- #def provision(self):
- #de hostname para que provision haga add_node_slice, check que ip coincide con hostname
- #command = "ssh %s@%s -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no 'echo \'GOOD NODE\''" % (pl_slice, hostname p = subprocess.Popen(command, shell=True, stdout = subprocess.PIPE, stderr = subprocess.PIPE) stdout, stderr = p.communicate() if stdout.find("GOOD NODE") < 0: continue
-
-
+ def provisionl(self):
+ import time
+ bl = PlanetlabNode.blacklist()
+ lockbl = PlanetlabNode.lock_bl()
+ provision_ok = False
+ ssh_ok = False
+ proc_ok = False
+ timeout = 1200
+ while not provision_ok:
+ slicename = self.get("username")
+ node = self._node_to_provision
+ ip = self.plapi.get_interfaces({'node_id':node}, fields=['ip'])
+ ip = ip[0]['ip']
+ print ip
+
+ self.plapi.add_slice_nodes(slicename, [node])
+
+ t = 0
+ while t < timeout and not ssh_ok:
+ # check ssh connection
+ command = "ssh %s@%s -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no 'echo \'GOOD NODE\''" % (slicename, ip)
+ p = subprocess.Popen(command, shell=True, stdout = subprocess.PIPE, stderr = subprocess.PIPE)
+ stdout, stderr = p.communicate()
+ if stdout.find("GOOD NODE") < 0:
+ print t
+ t = t + 60
+ time.sleep(60)
+ continue
+ else:
+ ssh_ok = True
+ continue
+
+ if not ssh_ok:
+ with lockbl:
+ bl.append(node)
+ print bl
+ self.plapi.delete_slice_node(slicename, [node])
+ self.discover()
+ continue
+
+ # check /proc directory
+ else: # ssh_ok:
+ command = "ssh %s@%s -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no 'mount |grep proc'" % (slicename, ip)
+ p = subprocess.Popen(command, shell=True, stdout = subprocess.PIPE, stderr = subprocess.PIPE)
+ stdout, stderr = p.communicate()
+ if stdout.find("/proc type proc") < 0:
+ lockbl.acquire()
+ bl.append(node)
+ lockbl.release()
+ self.plapi.delete_slice_node(slicename, [node])
+ self.discover()
+ continue
+
+ else:
+ provision_ok = True
+ # set attributes ip, hostname
+ self.set("ip", ip)
+
+ hostname = self.plapi.get_nodes(node, ['hostname'])
+ self.set("hostname", hostname[0]['hostname'])
+ print self.get("hostname")
+
+ # call provision de linux node?
+ super(PlanetlabNode, self).provision()