*Now we manage slices in both TestPlc and TestSlice classes.
*Clean TestSite class nothing to deal with slices.
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
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)
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()
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
+
--- /dev/null
+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
+