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
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
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'
def check_nodesStatus(self,options):
return self.do_check_nodesStatus(minutes=5)
-
+
+ #to scan and store the nodes's public keys and avoid to ask for confirmation when ssh
+ def scan_publicKeys(self,hostnames):
+ try:
+ temp_knownhosts="/root/known_hosts"
+ remote_knownhosts="/root/.ssh/known_hosts"
+ self.run_in_host("touch %s"%temp_knownhosts )
+ for hostname in hostnames:
+ utils.header("Scan Public %s key and store it in the known_host file(under the root image) "%hostname)
+ scan=self.run_in_host('ssh-keyscan -t rsa %s >> %s '%(hostname,temp_knownhosts))
+ #Store the public keys in the right root image
+ self.copy_in_guest(temp_knownhosts,remote_knownhosts,True)
+ #clean the temp keys file used
+ self.run_in_host('rm -f %s '%temp_knownhosts )
+ except Exception, err:
+ print err
+
def do_check_nodesSsh(self,minutes):
# compute timeout
timeout = datetime.datetime.now()+datetime.timedelta(minutes=minutes)
#graceout = datetime.datetime.now()+datetime.timedelta(minutes=gracetime)
tocheck = self.all_hostnames()
+ self.scan_publicKeys(tocheck)
utils.header("checking Connectivity on nodes %r"%tocheck)
-
while tocheck:
for hostname in tocheck:
# try to ssh in nodes
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:
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
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)
+ status=test_slice.do_check_slice(options)
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