from random import randint
import time
+import socket
import threading
import datetime
@classmethod
def _register_attributes(cls):
ip = Attribute("ip", "PlanetLab host public IP address",
- flags = Flags.ReadOnly)
+ flags = Flags.Design)
pl_url = Attribute("plcApiUrl", "URL of PlanetLab PLCAPI host \
(e.g. www.planet-lab.eu or www.planet-lab.org) ",
pl_ptn = Attribute("plcApiPattern", "PLC API service regexp pattern \
(e.g. https://%(hostname)s:443/PLCAPI/ ) ",
default = "https://%(hostname)s:443/PLCAPI/",
- flags = Flags.ExecReadOnly)
+ flags = Flags.Design)
pl_user = Attribute("pluser", "PlanetLab account user, as the one to \
authenticate in the website) ",
self._plapi = None
self._node_to_provision = None
self._slicenode = False
+ self._hostname = False
def _skip_provision(self):
pl_user = self.get("pluser")
hostname = self._get_hostname()
if hostname:
# the user specified one particular node to be provisioned
- # check with PLCAPI if it is alvive
+ # check with PLCAPI if it is alive
+ self._hostname = True
node_id = self._query_if_alive(hostname=hostname)
node_id = node_id.pop()
self._slicenode = True
self._put_node_in_provision(node_id)
self._node_to_provision = node_id
- super(PlanetlabNode, self).do_discover()
-
else:
self.fail_node_not_available(hostname)
+ super(PlanetlabNode, self).do_discover()
else:
# the user specifies constraints based on attributes, zero, one or
try:
self._set_hostname_attr(node_id)
self.info(" Selected node to provision ")
+ super(PlanetlabNode, self).do_discover()
except:
with PlanetlabNode.lock:
self._blacklist_node(node_id)
- self.do_discover()
-
- super(PlanetlabNode, self).do_discover()
+ self.do_discover()
else:
self.fail_not_enough_nodes()
self.warn(" Could not SSH login ")
self._blacklist_node(node)
#self._delete_node_from_slice(node)
- self.set('hostname', None)
+ #self.set('hostname', None)
self.do_discover()
continue
self.warn(" Could not find directory /proc ")
self._blacklist_node(node)
#self._delete_node_from_slice(node)
- self.set('hostname', None)
+ #self.set('hostname', None)
self.do_discover()
continue
else:
provision_ok = True
+ if not self.get('hostname'):
+ self._set_hostname_attr(node)
# set IP attribute
ip = self._get_ip(node)
self.set("ip", ip)
self._set_hostname_attr(node_id)
self.warn(" Node not responding PING ")
self._blacklist_node(node_id)
- self.set('hostname', None)
+ #self.set('hostname', None)
else:
# discovered node for provision, added to provision list
self._put_node_in_provision(node_id)
if hostname:
return hostname
elif ip:
- hostname = sshfuncs.gethostbyname(ip)
+ hostname = socket.gethostbyaddr(ip)[0]
+ self.set('hostname', hostname)
return hostname
else:
return None
Add node mal functioning node to blacklist
"""
self.warn(" Blacklisting malfunctioning node ")
- self._plapi.blacklist_host(node)
+ self.plapi.blacklist_host(node)
+ if not self._hostname:
+ self.set('hostname', None)
def _put_node_in_provision(self, node):
"""
Add node to the list of nodes being provisioned, in order for other RMs
to not try to provision the same one again
"""
- self._plapi.reserve_host(node)
+ self.plapi.reserve_host(node)
def _get_ip(self, node_id):
"""