]> git.puffer.fish Git - mirror/frr.git/commitdiff
lib: convert to directories per node
authorLou Berger <lberger@labn.net>
Wed, 9 May 2018 15:11:47 +0000 (11:11 -0400)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Wed, 28 Nov 2018 01:22:14 +0000 (20:22 -0500)
Signed-off-by: Lou Berger <lberger@labn.net>
tests/topotests/lib/topogen.py
tests/topotests/lib/topotest.py

index 4943144725043e7ded01e7aec203e2dddaa19e64..d88e4a9890e255c3fef6d97a34ee2a779fe2b2ab 100644 (file)
@@ -570,8 +570,15 @@ class TopoRouter(TopoGear):
         # Propagate the router log directory
         params['logdir'] = self.logdir
 
+        #setup the per node directory
+        dir = '{}/{}'.format(self.logdir, self.name)
+        os.system('mkdir -p ' + dir)
+        os.system('chmod 775 ' + dir)
+        os.system('chgrp {} {}'.format(self.routertype, dir))
+
         # Open router log file
-        logfile = '{}/{}.log'.format(self.logdir, name)
+        logfile = '{0}/{1}.log'.format(dir, name)
+
         self.logger = logger_config.get_logger(name=name, target=logfile)
         self.tgen.topo.addNode(self.name, cls=self.cls, **params)
 
@@ -598,9 +605,9 @@ class TopoRouter(TopoGear):
             os.chmod(self.logdir, 01777)
 
         # Try to find relevant old logfiles in /tmp and delete them
-        map(os.remove, glob.glob('{}/*{}*.log'.format(self.logdir, self.name)))
+        map(os.remove, glob.glob('{}/{}/*.log'.format(self.logdir, self.name)))
         # Remove old core files
-        map(os.remove, glob.glob('{}/{}*.dmp'.format(self.logdir, self.name)))
+        map(os.remove, glob.glob('{}/{}/*.dmp'.format(self.logdir, self.name)))
 
     def check_capability(self, daemon, param):
         """
@@ -647,7 +654,7 @@ class TopoRouter(TopoGear):
         for daemon, enabled in nrouter.daemons.iteritems():
             if enabled == 0:
                 continue
-            self.vtysh_cmd('configure terminal\nlog file {}/{}-{}.log'.format(
+            self.vtysh_cmd('configure terminal\nlog file {}/{}/{}.log'.format(
                 self.logdir, self.name, daemon), daemon=daemon)
 
         if result != '':
index 6fd1e2c179faca492aedfbdd222197a433e9195f..64e3652aaf19f5bed18a4e774c735478183648ec 100644 (file)
@@ -518,8 +518,11 @@ class Router(Node):
         assert_sysctl(self, 'net.ipv6.conf.all.forwarding', 1)
         # Enable coredumps
         assert_sysctl(self, 'kernel.core_uses_pid', 1)
-        assert_sysctl(self, 'fs.suid_dumpable', 2)
-        corefile = '{}/{}_%e_core-sig_%s-pid_%p.dmp'.format(self.logdir, self.name)
+        assert_sysctl(self, 'fs.suid_dumpable', 1)
+        #this applies to the kernel not the namespace...
+        #original on ubuntu 17.x, but apport won't save as in namespace
+        # |/usr/share/apport/apport %p %s %c %d %P
+        corefile = '%e_core-sig_%s-pid_%p.dmp'
         assert_sysctl(self, 'kernel.core_pattern', corefile)
         self.cmd('ulimit -c unlimited')
         # Set ownership of config files
@@ -600,15 +603,16 @@ class Router(Node):
         else:
             logger.info('No daemon {} known'.format(daemon))
         # print "Daemons after:", self.daemons
+
     def startRouter(self, tgen=None):
         # Disable integrated-vtysh-config
         self.cmd('echo "no service integrated-vtysh-config" >> /etc/%s/vtysh.conf' % self.routertype)
         self.cmd('chown %s:%svty /etc/%s/vtysh.conf' % (self.routertype, self.routertype, self.routertype))
         # TODO remove the following lines after all tests are migrated to Topogen.
         # Try to find relevant old logfiles in /tmp and delete them
-        map(os.remove, glob.glob("/tmp/*%s*.log" % self.name))
+        map(os.remove, glob.glob('{}/{}/*.log'.format(self.logdir, self.name)))
         # Remove old core files
-        map(os.remove, glob.glob("/tmp/%s*.dmp" % self.name))
+        map(os.remove, glob.glob('{}/{}/*.dmp'.format(self.logdir, self.name)))
         # Remove IP addresses from OS first - we have them in zebra.conf
         self.removeIPs()
         # If ldp is used, check for LDP to be compiled and Linux Kernel to be 4.5 or higher
@@ -648,13 +652,16 @@ class Router(Node):
 
         self.restartRouter()
         return ""
+
     def restartRouter(self):
-        # Starts actuall daemons without init (ie restart)
+        # Starts actual daemons without init (ie restart)
+        # cd to per node directory
+        self.cmd('cd {}/{}'.format(self.logdir, self.name))
         # Start Zebra first
         if self.daemons['zebra'] == 1:
             zebra_path = os.path.join(self.daemondir, 'zebra')
             zebra_option = self.daemons_options['zebra']
-            self.cmd('{0} {1} > {2}/{3}-zebra.out 2> {2}/{3}-zebra.err &'.format(
+            self.cmd('{0} {1} > zebra.out 2> zebra.err &'.format(
                  zebra_path, zebra_option, self.logdir, self.name
             ))
             self.waitOutput()
@@ -670,7 +677,7 @@ class Router(Node):
                 continue
 
             daemon_path = os.path.join(self.daemondir, daemon)
-            self.cmd('{0} > {1}/{2}-{3}.out 2> {1}/{2}-{3}.err &'.format(
+            self.cmd('{0} > {3}.out 2> {3}.err &'.format(
                 daemon_path, self.logdir, self.name, daemon
             ))
             self.waitOutput()
@@ -680,7 +687,7 @@ class Router(Node):
     def getStdOut(self, daemon):
         return self.getLog('out', daemon)
     def getLog(self, log, daemon):
-        return self.cmd('cat {}/{}-{}.{}'.format(self.logdir, self.name, daemon, log))
+        return self.cmd('cat {}/{}/{}.{}'.format(self.logdir, self.name, daemon, log))
     def checkRouterRunning(self):
         "Check if router daemons are running and collect crashinfo they don't run"
 
@@ -695,7 +702,7 @@ class Router(Node):
             if (self.daemons[daemon] == 1) and not (daemon in daemonsRunning):
                 sys.stderr.write("%s: Daemon %s not running\n" % (self.name, daemon))
                 # Look for core file
-                corefiles = glob.glob('{}/{}_{}_core*.dmp'.format(
+                corefiles = glob.glob('{}/{}/{}_core*.dmp'.format(
                     self.logdir, self.name, daemon))
                 if (len(corefiles) > 0):
                     daemon_path = os.path.join(self.daemondir, daemon)
@@ -706,9 +713,9 @@ class Router(Node):
                     sys.stderr.write("%s\n" % backtrace)
                 else:
                     # No core found - If we find matching logfile in /tmp, then print last 20 lines from it.
-                    if os.path.isfile('{}/{}-{}.log'.format(self.logdir, self.name, daemon)):
+                    if os.path.isfile('{}/{}/{}.log'.format(self.logdir, self.name, daemon)):
                         log_tail = subprocess.check_output([
-                            "tail -n20 {}/{}-{}.log 2> /dev/null".format(
+                            "tail -n20 {}/{}/{}.log 2> /dev/null".format(
                                 self.logdir, self.name, daemon)
                             ], shell=True)
                         sys.stderr.write("\nFrom %s %s %s log file:\n" % (self.routertype, self.name, daemon))