*correct a syntax bug in qemu config file.
Marc Fiuczynski [Tue, 12 Feb 2008 15:47:18 +0000 (15:47 +0000)]
*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)

system/TestMain.py
system/TestNode.py
system/TestPlc.py
system/config_onelab.py

index 82e6c3b..09784bc 100755 (executable)
@@ -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',
index 9d3da8e..c916f84 100644 (file)
@@ -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
index cbb3ded..97e9215 100644 (file)
@@ -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
 
index a812572..6ad30d2 100644 (file)
@@ -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 {