From: Marc Fiuczynski Date: Tue, 12 Feb 2008 15:47:18 +0000 (+0000) Subject: *correct a syntax bug in qemu config file. X-Git-Tag: tests-4.2-4~253 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=3e66aad111ca31d9c5ffa957db12a27cf03e6ae8;p=tests.git *correct a syntax bug in qemu config file. *Giving up with the vmware nodes emulation,no needed anymore, now let's use Qemu emulated nodes(still with the display not in serial mode) --- diff --git a/system/TestMain.py b/system/TestMain.py index 82e6c3b..09784bc 100755 --- a/system/TestMain.py +++ b/system/TestMain.py @@ -21,7 +21,7 @@ class TestMain: 'clear_ssh_config','store_keys', 'initscripts', 'sites', 'nodes', 'slices', 'bootcd', 'nodegroups', - 'start_nodes', 'check_nodesStatus','standby','check_nodesConnectivity', 'check_slices' ] + 'start_nodes','standby', 'check_nodesStatus','check_nodesConnectivity', 'check_slices' ] other_steps = [ 'fresh_install', 'stop', 'clean_sites', 'clean_nodes', 'clean_slices', 'clean_keys', 'stop_nodes' , 'db_dump' , 'db_restore', diff --git a/system/TestNode.py b/system/TestNode.py index 9d3da8e..c916f84 100644 --- a/system/TestNode.py +++ b/system/TestNode.py @@ -13,13 +13,7 @@ class TestNode: def name(self): return self.node_spec['node_fields']['hostname'] - - @staticmethod - def is_vmware_model(model): - return model.find("vmware") >= 0 - def is_vmware (self): - return TestNode.is_vmware_model(self.node_spec['node_fields']['model']) - + @staticmethod def is_qemu_model (model): return model.find("qemu") >= 0 @@ -28,8 +22,7 @@ class TestNode: @staticmethod def is_real_model (model): - return (not TestNode.is_vmware_model(model)) \ - and (not TestNode.is_qemu_model(model)) + return not TestNode.is_qemu_model(model) def is_real (self): return TestNode.is_real_model (self.node_spec['node_fields']['model']) @@ -99,14 +92,7 @@ class TestNode: def conffile(self,image,hostname,path): model=self.node_spec['node_fields']['model'] - if self.is_vmware(): - host_box=self.host_box() - template='%s/template-vmplayer/node.vmx'%(path) - actual='%s/vmplayer-%s/node.vmx'%(path,hostname) - sed_command="sed -e s,@BOOTCD@,%s,g %s > %s"%(image,template,actual) - utils.header('Creating %s from %s'%(actual,template)) - utils.system(sed_command) - elif self.is_qemu(): + if self.is_qemu(): host_box=self.host_box() mac=self.node_spec['network_fields']['mac'] dest_dir="qemu-%s"%(hostname) @@ -122,7 +108,7 @@ class TestNode: utils.system(createdir_command) scp_command = "scp -r %s/qemu-%s/* root@%s:/root/%s"%(path,hostname,host_box,dest_dir) utils.system(scp_command) - + def create_boot_cd(self,path): model=self.node_spec['node_fields']['model'] node_spec=self.node_spec @@ -130,18 +116,8 @@ class TestNode: encoded=self.test_plc.server.GetBootMedium(self.test_plc.auth_root(), hostname, 'node-iso', '') if (encoded == ''): raise Exception, 'boot.iso not found' - - if model.find("vmware") >= 0: - utils.header('Initializing vmplayer area for node %s'%hostname) - clean_dir="rm -rf %s/vmplayer-%s"%(path,hostname) - mkdir_command="mkdir -p %s/vmplayer-%s"%(path,hostname) - tar_command="tar -C %s/template-vmplayer -cf - . | tar -C %s/vmplayer-%s -xf -"%(path,path,hostname) - utils.system(clean_dir) - utils.system(mkdir_command) - utils.system(tar_command); - utils.header('Creating boot medium for node %s'%hostname) - file=open(path+'/vmplayer-'+hostname+'/boot_file.iso','w') - elif model.find("qemu") >= 0: + + if model.find("qemu") >= 0: clean_dir="rm -rf %s/qemu-%s"%(path,hostname) mkdir_command="mkdir -p %s/qemu-%s"%(path,hostname) utils.system(clean_dir) @@ -160,40 +136,43 @@ class TestNode: file.close() utils.header('boot cd created for %s'%hostname) self.conffile('boot_file.iso',hostname, path) - + def start_node (self,options): model=self.node_spec['node_fields']['model'] - if model.find("vmware") >= 0: - self.start_vmware(options) - elif model.find("qemu") >= 0: + #starting the Qemu nodes before + if model.find("qemu") >= 0: self.start_qemu(options) else: utils.header("TestNode.start_node : ignoring model %s"%model) - def start_vmware (self,options): - hostname=self.node_spec['node_fields']['hostname'] - path=options.path - display=options.display - utils.header('Starting vmplayer for node %s on %s'%(hostname,display)) - utils.system('cd %s/vmplayer-%s ; DISPLAY=%s vmplayer node.vmx < /dev/null >/dev/null 2>/dev/null &'%(path,hostname,display)) + def get_host_in_hostbox(self,hostbox,test_site): + hosts=[] + for node_spec in test_site.site_spec['nodes']: + if (node_spec['host_box'] == hostbox): + hosts.append((node_spec['node_fields']['hostname'],node_spec['node_fields']['model'])) + return hosts def start_qemu (self, options): + utils.header("Starting Qemu nodes") host_box=self.host_box() hostname=self.node_spec['node_fields']['hostname'] path=options.path display=options.display dest_dir="qemu-%s"%(hostname) utils.header('Starting qemu for node %s '%(hostname)) - utils.system("ssh root@%s ~/%s/env-qemu start "%(host_box, dest_dir )) - utils.system("ssh root@%s DISPLAY=%s ~/%s/start-qemu-node %s & "%( host_box, display, dest_dir, dest_dir)) + self.test_plc.run_in_host("ssh root@%s ~/%s/%s/env-qemu start"%(host_box, path, dest_dir )) + self.test_plc.run_in_host("ssh root@%s DISPLAY=%s ~/%s/start-qemu-node %s & "%( host_box, display, dest_dir, dest_dir)) - def stop_qemu(self): - if not self.is_qemu(): + def stop_qemu(self,node_spec): + try: + if self.is_qemu_model(node_spec['node_fields']['model']): + hostname=node_spec['node_fields']['hostname'] + host_box=node_spec['host_box'] + self.test_plc.run_in_host('ssh root@%s killall qemu'%host_box) + utils.header('Stoping qemu emulation of %s on the host machine %s and Restoring the initial network' + %(hostname,host_box)) + self.test_plc.run_in_host("ssh root@%s ~/qemu-%s/env-qemu stop "%(host_box, hostname )) return True - hostname=self.node_spec['node_fields']['hostname'] - host_box=self.host_box() - utils.system('ssh root@%s killall qemu'%host_box) - utils.header('Stoping qemu emulation of %s on the host machine %s and Restoring the initial network' - %(hostname,host_box)) - utils.system("ssh root@%s ~/qemu-%s/env-qemu stop "%(host_box, hostname )) - return True + except Exception,e : + print str(e) + return False diff --git a/system/TestPlc.py b/system/TestPlc.py index cbb3ded..97e9215 100644 --- a/system/TestPlc.py +++ b/system/TestPlc.py @@ -16,11 +16,11 @@ from TestKey import TestKey from TestSlice import TestSlice # inserts a backslash before each occurence of the following chars -# \ " ' < > & | ; ( ) $ * +# \ " ' < > & | ; ( ) $ * ~ @ def backslash_shell_specials (command): result='' for char in command: - if char in "\\\"'<>&|;()$*": + if char in "\\\"'<>&|;()$*~@": result +='\\'+char else: result +=char @@ -128,21 +128,28 @@ class TestPlc: if key['name'] == keyname: return key raise Exception,"Cannot locate key %s"%keyname - - # this should be run on the nodes' host_box, not locally to the plc - def kill_all_vmwares(self): - utils.header('Killing any running vmware or vmplayer instance') - utils.system('pgrep vmware | xargs -r kill') - utils.system('pgrep vmplayer | xargs -r kill ') - utils.system('pgrep vmware | xargs -r kill -9') - utils.system('pgrep vmplayer | xargs -r kill -9') + #this to catch up all different hostboxes used in this plc + def locate_hostBoxes(self,site_spec): + #Get The first host box to avoid returning a long list with the same host box + #in case only one is used for all the nodes + HostBoxes=[site_spec['nodes'][0]['host_box']] + for node_spec in site_spec['nodes']: + if node_spec['host_box']!= HostBoxes[0]: + HostBoxes.append( node_spec['host_box']) + + return HostBoxes + def kill_all_qemus(self): for site_spec in self.plc_spec['sites']: test_site = TestSite (self,site_spec) - for node_spec in site_spec['nodes']: - TestNode (self,test_site,node_spec).stop_qemu() - + hostboxes_list=self.locate_hostBoxes(site_spec) + if (hostboxes_list): + for node_spec in site_spec['nodes']: + TestNode(self,test_site,node_spec).stop_qemu(node_spec) + else: + utils.header("No emulated node running on this PLC config ignore the kill() step") + def clear_ssh_config (self,options): # install local ssh_config file as root's .ssh/config - ssh should be quiet # dir might need creation first @@ -456,8 +463,8 @@ class TestPlc: def standby(self,options): #Method for waiting a while when nodes are booting and being sshable,giving time to NM to be up - utils.header('Entering in StanbdBy mode at %s'%datetime.datetime.now()) - time.sleep(900) + utils.header('Entering in StanbdBy mode for 10min at %s'%datetime.datetime.now()) + time.sleep(600) utils.header('Exist StandBy mode at %s'%datetime.datetime.now()) return True @@ -504,15 +511,13 @@ class TestPlc: return status def start_nodes (self, options): - self.kill_all_vmwares() self.kill_all_qemus() - utils.header("Starting vmware nodes") + utils.header("Starting nodes") for site_spec in self.plc_spec['sites']: TestSite(self,site_spec).start_nodes (options) return True def stop_nodes (self, options): - self.kill_all_vmwares () self.kill_all_qemus() return True diff --git a/system/config_onelab.py b/system/config_onelab.py index a812572..6ad30d2 100644 --- a/system/config_onelab.py +++ b/system/config_onelab.py @@ -7,40 +7,26 @@ onelab="one-lab.org" -# use a model that contains "vmware" to get the node actually started # host_box is taken as 'localhost' if omitted (should be a direct field in the node spec) def nodes(): - nodes= [ {'node_fields': {'hostname': 'test1.one-lab.org', - 'model':'vmware/minhw', }, - 'host_box' : 'test.one-lab.org', - 'owner' : 'pi', - 'network_fields': { 'method':'static', - 'type':'ipv4', - 'ip':'192.168.132.128', - 'gateway':'192.168.132.1', - 'network':'192.168.132.0', - 'broadcast':'192.168.132.255', - 'netmask':'255.255.255.0', - 'dns1': '192.168.132.2', - }, - }, - { 'node_fields': {'hostname':'test2.one-lab.org', - 'model':'vmware/minhw', } , - 'host_box' : 'test.one-lab.org', - 'owner' : 'tech', - 'network_fields': {'method':'static', - 'type':'ipv4', - 'ip':'192.168.132.130', - 'gateway':'192.168.132.1', - 'network':'192.168.132.0', - 'broadcast':'192.168.132.255', - 'netmask':'255.255.255.0', - 'dns1': '192.168.132.2', - }, - }, - ] + nodes= [{'node_fields': {'hostname': 'lysithea.inria.fr', + 'model':'qemu/minhw', } , + 'host_box': 'test.one-lab.org', + 'owner' : 'pi', + 'network_fields': { 'method':'static', + 'type':'ipv4', + 'ip':'138.96.250.153', + 'gateway':'138.96.248.250', + 'network':'138.96.0.0', + 'broadcast':'138.96.255.255', + 'netmask':'255.255.0.0', + 'dns1': '138.96.0.10', + 'dns2': '138.96.0.11', + 'mac' : '00:0b:cd:62:50:95', + }, + }, + ] return nodes -# return [nodes[0]] def all_nodenames (): return [ node['node_fields']['hostname'] for node in nodes()] @@ -174,9 +160,7 @@ def slices (): 'sitename' : 'main', 'owner' : 'pi', }] - # I suspect the check_slices stuff to work improperly with 2 slices -# return both - return [both[0]] + return both def plc () : return {