From: Lou Berger Date: Wed, 9 May 2018 15:11:47 +0000 (-0400) Subject: lib: convert to directories per node X-Git-Tag: frr-7.1-dev~151^2~80 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=e1dfa45e1b225de81604f0289f93b043b57d13a3;p=mirror%2Ffrr.git lib: convert to directories per node Signed-off-by: Lou Berger --- diff --git a/tests/topotests/lib/topogen.py b/tests/topotests/lib/topogen.py index 4943144725..d88e4a9890 100644 --- a/tests/topotests/lib/topogen.py +++ b/tests/topotests/lib/topogen.py @@ -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 != '': diff --git a/tests/topotests/lib/topotest.py b/tests/topotests/lib/topotest.py index 6fd1e2c179..64e3652aaf 100644 --- a/tests/topotests/lib/topotest.py +++ b/tests/topotests/lib/topotest.py @@ -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))