From: Tony Mack Date: Wed, 30 Jan 2008 13:42:38 +0000 (+0000) Subject: *Create new TestSlice class. X-Git-Tag: 2008-02-11-last-vmware-support~52 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=6b9e9a683a119020cd120b451c0a11a52c586102;p=tests.git *Create new TestSlice class. *Now we manage slices in both TestPlc and TestSlice classes. *Clean TestSite class nothing to deal with slices. --- diff --git a/system/TestPlc.py b/system/TestPlc.py index 8244d4c..2ac008f 100644 --- a/system/TestPlc.py +++ b/system/TestPlc.py @@ -13,6 +13,7 @@ from TestSite import TestSite from TestNode import TestNode from TestUser import TestUser from TestKey import TestKey +from TestSlice import TestSlice # step methods must take (self, options) and return a boolean @@ -340,7 +341,7 @@ class TestPlc: test_node=TestNode (self,test_site,node_spec) test_node.create_boot_cd(options.path) return True - + def initscripts (self, options): for initscript in self.plc_spec['initscripts']: utils.show_spec('Adding Initscript in plc %s'%self.plc_spec['name'],initscript) @@ -353,41 +354,28 @@ class TestPlc: def clean_slices (self, options): return self.do_slices("delete") - ### would need a TestSlice class - def do_slices (self, add_or_delete="add"): + def do_slices (self, action="add"): for slice in self.plc_spec['slices']: site_spec = self.locate_site (slice['sitename']) test_site = TestSite(self,site_spec) - owner_spec = test_site.locate_user(slice['owner']) - auth = TestUser(self,test_site,owner_spec).auth() - slice_fields = slice['slice_fields'] - slice_name = slice_fields['name'] - if (add_or_delete == "delete"): - self.server.DeleteSlice(auth,slice_fields['name']) - utils.header("Deleted slice %s"%slice_fields['name']) - continue - utils.show_spec("Creating slice",slice_fields) - self.server.AddSlice(auth,slice_fields) - utils.header('Created Slice %s'%slice_fields['name']) - for username in slice['usernames']: - user_spec=test_site.locate_user(username) - test_user=TestUser(self,test_site,user_spec) - self.server.AddPersonToSlice(auth, test_user.name(), slice_name) - - hostnames=[] - for nodename in slice['nodenames']: - node_spec=test_site.locate_node(nodename) - test_node=TestNode(self,test_site,node_spec) - hostnames += [test_node.name()] - utils.header("Adding %r in %s"%(hostnames,slice_name)) - self.server.AddSliceToNodes(auth, slice_name, hostnames) - if slice.has_key('initscriptname'): - isname=slice['initscriptname'] - utils.header("Adding initscript %s in %s"%(isname,slice_name)) - self.server.AddSliceAttribute(self.auth_root(), slice_name, - 'initscript',isname) + test_slice=TestSlice(self,test_site,slice) + if action != "add": + utils.header("Deleting slices in site %s"%test_site.name()) + test_slice.delete_slice() + else: + utils.show_spec("Creating slice",slice) + test_slice.create_slice() + utils.header('Created Slice %s'%slice['slice_fields']['name']) return True + def check_slices(self, options): + for slice_spec in self.plc_spec['slices']: + site_spec = self.locate_site (slice_spec['sitename']) + test_site = TestSite(self,site_spec) + test_slice=TestSlice(self,test_site,slice_spec) + status=test_slice.do_check_slices() + return status + def start_nodes (self, options): self.kill_all_vmwares() self.kill_all_qemus() diff --git a/system/TestSite.py b/system/TestSite.py index f52a28e..a167ebf 100644 --- a/system/TestSite.py +++ b/system/TestSite.py @@ -59,73 +59,4 @@ class TestSite: TestNode(self.test_plc, self, node_spec).start_node(options) return True - def delete_known_hosts(self): - utils.header("Messing with known_hosts (cleaning hostnames starting with 'test[0-9]')") - sed_command="sed -i -e '/^test[0-9]/d' /root/.ssh/known_hosts" - utils.system(sed_command) - - # xxx should be attached to TestPlc - def check_slices(self): - - bool=True - bool1=True - secondes=15 - self.delete_known_hosts() - start_time = datetime.datetime.now() - dead_time=start_time + datetime.timedelta(minutes=3)##adding 3minutes - for slice_spec in self.test_plc.plc_spec['slices']: - for hostname in slice_spec['nodenames']: - slicename=slice_spec['slice_fields']['name'] - # locate the first avail. key - found=False - for username in slice_spec['usernames']: - user_spec=self.locate_user(username) - for keyname in user_spec['keynames']: - key_spec=self.test_plc.locate_key(keyname) - publickey=TestKey(self.test_plc,key_spec).publicpath() - privatekey=TestKey(self.test_plc,key_spec).privatepath() - if os.path.isfile(publickey) and os.path.isfile(privatekey): - found=True - break - if not found: - raise Exception,"Cannot find a valid key for slice %s"%slicename - - while(bool): - utils.header('restarting nm on %s'%hostname) - access=utils.system('ssh -i /etc/planetlab/root_ssh_key.rsa root@%s service nm restart'%hostname ) - if (access==0): - utils.header('nm restarted on %s'%hostname) - while(bool1): - utils.header('trying to connect to %s@%s'%(slicename,hostname)) - ### should use saved keys instead of this hard-coded stuff - Date=utils.system('ssh -i %s %s@%s date'%(privatekey,slicename,hostname)) - if (Date==0): - break - elif ( start_time <= dead_time ) : - start_time=datetime.datetime.now()+ datetime.timedelta(seconds=30) - time.sleep(secondes) - else: - bool1=False - if(bool1): - utils.header('connected to %s@%s -->'%(slicename,hostname)) - else: - utils.header('%s@%s : last chance - restarting nm on %s'%(slicename,hostname,hostname)) - access=utils.system('ssh -i /etc/planetlab/root_ssh_key.rsa root@%s service nm restart'%hostname) - if (access==0): - utils.header('trying to connect (2) to %s@%s'%(slicename,hostname)) - Date=utils.system('ssh -i ~/.ssh/slices.rsa %s@%s date'%(slicename,hostname)) - if (Date==0): - utils.header('connected to %s@%s -->'%(slicename,hostname)) - else: - utils.header('giving up with to %s@%s -->'%(slicename,hostname)) - return False - else : - utils.header('Last chance failed on %s@%s -->'%(slicename,hostname)) - break - elif ( start_time <= dead_time ) : - start_time=datetime.datetime.now()+ datetime.timedelta(minutes=1) - time.sleep(secondes) - else: - bool=False - - return bool + diff --git a/system/TestSlice.py b/system/TestSlice.py new file mode 100644 index 0000000..f8eaed8 --- /dev/null +++ b/system/TestSlice.py @@ -0,0 +1,121 @@ +import utils +import os, os.path +import datetime +import time + +from TestKey import TestKey +from TestUser import TestUser +from TestNode import TestNode + +class TestSlice: + + def __init__ (self,test_plc,test_site,slice_spec): + self.test_plc=test_plc + self.test_site=test_site + self.slice_spec=slice_spec + + def delete_slice(self): + owner_spec = self.test_site.locate_user(self.slice_spec['owner']) + auth = TestUser(self,self.test_site,owner_spec).auth() + slice_fields = self.slice_spec['slice_fields'] + slice_name = slice_fields['name'] + self.test_plc.server.DeleteSlice(auth,slice_fields['name']) + utils.header("Deleted slice %s"%slice_fields['name']) + + + def create_slice(self): + owner_spec = self.test_site.locate_user(self.slice_spec['owner']) + auth = TestUser(self,self.test_site,owner_spec).auth() + slice_fields = self.slice_spec['slice_fields'] + slice_name = slice_fields['name'] + + self.test_plc.server.AddSlice(auth,slice_fields) + for username in self.slice_spec['usernames']: + user_spec=self.test_site.locate_user(username) + test_user=TestUser(self,self.test_site,user_spec) + self.test_plc.server.AddPersonToSlice(auth, test_user.name(), slice_name) + + hostnames=[] + for nodename in self.slice_spec['nodenames']: + node_spec=self.test_site.locate_node(nodename) + test_node=TestNode(self,self.test_site,node_spec) + hostnames += [test_node.name()] + utils.header("Adding %r in %s"%(hostnames,slice_name)) + self.test_plc.server.AddSliceToNodes(auth, slice_name, hostnames) + if self.slice_spec.has_key('initscriptname'): + isname=self.slice_spec['initscriptname'] + utils.header("Adding initscript %s in %s"%(isname,slice_name)) + self.test_plc.server.AddSliceAttribute(self.test_plc.auth_root(), slice_name,'initscript',isname) + + + def delete_known_hosts(self): + utils.header("Messing with known_hosts (cleaning hostnames starting with 'test[0-9]')") + sed_command="sed -i -e '/^test[0-9]/d' /root/.ssh/known_hosts" + utils.system(sed_command) + + ###the logic is quit wrong, must be rewritten + def do_check_slices(self): + utils.header("wainting for the node to fully boot") + time.sleep(120) + bool=bool1=True + secondes=15 + self.delete_known_hosts() + start_time = datetime.datetime.now() + dead_time=start_time + datetime.timedelta(minutes=5)##adding 3minutes + for slice_spec in self.test_plc.plc_spec['slices']: + for hostname in slice_spec['nodenames']: + slicename=slice_spec['slice_fields']['name'] + # locate the first avail. key + found=False + for username in slice_spec['usernames']: + user_spec=self.test_site.locate_user(username) + for keyname in user_spec['keynames']: + key_spec=self.test_plc.locate_key(keyname) + publickey=TestKey(self.test_plc,key_spec).publicpath() + privatekey=TestKey(self.test_plc,key_spec).privatepath() + if os.path.isfile(publickey) and os.path.isfile(privatekey): + found=True + break + if not found: + raise Exception,"Cannot find a valid key for slice %s"%slicename + + while(bool): + utils.header('restarting nm on %s'%hostname) + access=utils.system('ssh -i /etc/planetlab/root_ssh_key.rsa root@%s service nm restart'%hostname ) + if (access==0): + utils.header('nm restarted on %s'%hostname) + while(bool1): + utils.header('trying to connect to %s@%s'%(slicename,hostname)) + Date=utils.system('ssh -i %s %s@%s date'%(privatekey,slicename,hostname)) + if (Date==0): + break + elif ( start_time <= dead_time ) : + start_time=datetime.datetime.now()+ datetime.timedelta(seconds=30) + time.sleep(secondes) + else: + bool1=False + if(bool1): + utils.header('connected to %s@%s -->'%(slicename,hostname)) + else: + utils.header('%s@%s : last chance - restarting nm on %s'%(slicename,hostname,hostname)) + access=utils.system('ssh -i /etc/planetlab/root_ssh_key.rsa root@%s service nm restart'%hostname) + time.sleep(120)##temoprally adding some delay due to the network slowness + if (access==0): + utils.header('trying to connect (2) to %s@%s'%(slicename,hostname)) + Date=utils.system('ssh -i %s %s@%s date'%(privatekey,slicename,hostname)) + if (Date==0): + utils.header('connected to %s@%s -->'%(slicename,hostname)) + else: + utils.header('giving up with to %s@%s -->'%(slicename,hostname)) + return False + else : + utils.header('Last chance failed on %s@%s -->'%(slicename,hostname)) + break + elif ( start_time <= dead_time ) : + start_time=datetime.datetime.now()+ datetime.timedelta(minutes=1) + time.sleep(secondes) + else: + bool=False + + return bool +