from TestUser import TestUser
from TestKey import TestKey
from TestSlice import TestSlice
+from TestBox import TestBox
# 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
# step methods must take (self, options) and return a boolean
+def standby(minutes):
+ utils.header('Entering StandBy for %d mn'%minutes)
+ time.sleep(60*minutes)
+ return True
+
+def standby_generic (func):
+ def actual(self,options):
+ minutes=int(func.__name__.split("_")[1])
+ return standby(minutes)
+ return actual
+
class TestPlc:
def __init__ (self,plc_spec):
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')
- def kill_all_qemus(self):
+ # all different hostboxes used in this plc
+ def gather_hostBoxes(self):
+ # maps on sites and nodes, return [ (host_box,hostname) ]
+ tuples=[]
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()
+ test_node = TestNode (self, test_site, node_spec)
+ if not test_node.is_real():
+ tuples.append( (test_node.host_box(),node_spec['node_fields']['hostname']) )
+ # transform into a dict { 'host_box' -> [ hostnames .. ] }
+ result = {}
+ for (box,hostname) in tuples:
+ if not result.has_key(box):
+ result[box]=[hostname]
+ else:
+ result[box].append(hostname)
+ return result
+ # a step for checking this stuff
+ def showboxes (self,options):
+ print 'showboxes'
+ for (box,hosts) in self.gather_hostBoxes().iteritems():
+ print box,":"," + ".join(hosts)
+ return True
+
+ def kill_all_qemus(self):
+ for (box,hosts) in self.gather_hostBoxes().iteritems():
+ # this is the brute force version, kill all qemus on that host box
+ TestBox(box).kill_all_qemus()
+
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
return hostnames
# gracetime : during the first <gracetime> minutes nothing gets printed
- def do_check_nodesStatus (self, minutes, gracetime=2):
+ def do_nodes_booted (self, minutes, gracetime=2):
# compute timeout
timeout = datetime.datetime.now()+datetime.timedelta(minutes=minutes)
graceout = datetime.datetime.now()+datetime.timedelta(minutes=gracetime)
else:
# if it's a real node, never mind
(site_spec,node_spec)=self.locate_node(hostname)
- test_node = TestNode(self,site_spec,node_spec)
- if test_node.is_real():
+ if TestNode.is_real_model(node_spec['node_fields']['model']):
utils.header("WARNING - Real node %s in %s - ignored"%(hostname,boot_state))
# let's cheat
boot_state = 'boot'
# only useful in empty plcs
return True
- def check_nodesStatus(self,options):
- return self.do_check_nodesStatus(minutes=5)
+ def nodes_booted(self,options):
+ return self.do_nodes_booted(minutes=5)
#to scan and store the nodes's public keys and avoid to ask for confirmation when ssh
def scan_publicKeys(self,hostnames):
utils.header('The node %s is sshable -->'%hostname)
# refresh tocheck
tocheck.remove(hostname)
+ else:
+ (site_spec,node_spec)=self.locate_node(hostname)
+ if TestNode.is_real_model(node_spec['node_fields']['model']):
+ utils.header ("WARNING : check ssh access into real node %s - skipped"%hostname)
+ tocheck.remove(hostname)
if not tocheck:
return True
if datetime.datetime.now() > timeout:
# only useful in empty plcs
return True
- def check_nodesConnectivity(self, options):
+ def nodes_ssh(self, options):
return self.do_check_nodesSsh(minutes=2)
- 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('Exist StandBy mode at %s'%datetime.datetime.now())
- return True
-
def bootcd (self, options):
for site_spec in self.plc_spec['sites']:
test_site = TestSite (self,site_spec)
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(options)
- return status
+ status=test_slice.do_check_slice(options)
+ if (not status):
+ return False
+ 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
self.run_in_guest('service httpd start')
utils.header('Database restored from ' + dump)
+
+ @standby_generic
+ def standby_1(): pass
+ @standby_generic
+ def standby_2(): pass
+ @standby_generic
+ def standby_3(): pass
+ @standby_generic
+ def standby_4(): pass
+ @standby_generic
+ def standby_5(): pass
+ @standby_generic
+ def standby_6(): pass
+ @standby_generic
+ def standby_7(): pass
+ @standby_generic
+ def standby_8(): pass
+ @standby_generic
+ def standby_9(): pass
+ @standby_generic
+ def standby_10(): pass
+ @standby_generic
+ def standby_11(): pass
+ @standby_generic
+ def standby_12(): pass
+ @standby_generic
+ def standby_13(): pass
+ @standby_generic
+ def standby_14(): pass
+ @standby_generic
+ def standby_15(): pass
+ @standby_generic
+ def standby_16(): pass
+ @standby_generic
+ def standby_17(): pass
+ @standby_generic
+ def standby_18(): pass
+ @standby_generic
+ def standby_19(): pass
+ @standby_generic
+ def standby_20(): pass
+