From 665cc9b410de55b1013ad86b4764b07f2b1e5f42 Mon Sep 17 00:00:00 2001 From: Lucia Guevgeozian Odizzio Date: Wed, 25 Jun 2014 11:37:15 +0200 Subject: [PATCH] Changes for release --- examples/omf/wilabt_provision.py | 33 +++++++-- examples/planetlab/ping_sfa.py | 5 +- src/nepi/resources/omf/application.py | 2 +- src/nepi/resources/omf/interface.py | 2 +- src/nepi/resources/omf/wilabt_node.py | 98 ++++++++++++--------------- src/nepi/util/sfaapi.py | 2 +- src/nepi/util/sfarspec_proc.py | 5 +- test/resources/omf/wilab_node.py | 58 ++++++---------- test/resources/planetlab/sfa_node.py | 2 +- 9 files changed, 101 insertions(+), 106 deletions(-) diff --git a/examples/omf/wilabt_provision.py b/examples/omf/wilabt_provision.py index 83809112..975ad1eb 100755 --- a/examples/omf/wilabt_provision.py +++ b/examples/omf/wilabt_provision.py @@ -19,6 +19,8 @@ # Author: Lucia Guevgeozian from nepi.execution.ec import ExperimentController +from nepi.execution.resource import ResourceAction, ResourceState + import os # Create the EC @@ -31,29 +33,46 @@ sfaPrivateKey = os.environ.get('SFA_PK') # nodes node1 = ec.register_resource("WilabtSfaNode") -ec.set(node1, "hostname", 'zotacB5') +ec.set(node1, "host", 'zotacE5') ec.set(node1, "slicename", slicename) ec.set(node1, "sfauser", sfauser) ec.set(node1, "sfaPrivateKey", sfaPrivateKey) ec.set(node1, "gatewayUser", "nepi") ec.set(node1, "gateway", "bastion.test.iminds.be") -ec.set(node1, "cleanHome", True) -ec.set(node1, "cleanProcesses", True) +ec.set(node1, 'xmppServer', "xmpp.ilabt.iminds.be") +ec.set(node1, 'xmppUser', "nepi") +ec.set(node1, 'xmppPort', "5222") +ec.set(node1, 'xmppPassword', "1234") node2 = ec.register_resource("WilabtSfaNode") -ec.set(node2, "hostname", 'zotacM20') +ec.set(node2, "host", 'zotacM20') ec.set(node2, "slicename", slicename) ec.set(node2, "sfauser", sfauser) ec.set(node2, "sfaPrivateKey", sfaPrivateKey) ec.set(node2, "gatewayUser", "nepi") ec.set(node2, "gateway", "bastion.test.iminds.be") -ec.set(node2, "cleanHome", True) -ec.set(node2, "cleanProcesses", True) +ec.set(node2, 'xmppServer', "xmpp.ilabt.iminds.be") +ec.set(node2, 'xmppUser', "nepi") +ec.set(node2, 'xmppPort', "5222") +ec.set(node2, 'xmppPassword', "1234") + +node3 = ec.register_resource("WilabtSfaNode") +ec.set(node3, "host", 'zotacG1') +ec.set(node3, "slicename", slicename) +ec.set(node3, "sfauser", sfauser) +ec.set(node3, "sfaPrivateKey", sfaPrivateKey) +ec.set(node3, "gatewayUser", "nepi") +ec.set(node3, "gateway", "bastion.test.iminds.be") +ec.set(node3, 'xmppServer', "xmpp.ilabt.iminds.be") +ec.set(node3, 'xmppUser', "nepi") +ec.set(node3, 'xmppPort', "5222") +ec.set(node3, 'xmppPassword', "1234") + # Deploy ec.deploy() -ec.wait_deployed([node1, node2]) +ec.wait_deployed([node1, node2, node3]) ec.shutdown() diff --git a/examples/planetlab/ping_sfa.py b/examples/planetlab/ping_sfa.py index b05b91e1..9e9974d8 100755 --- a/examples/planetlab/ping_sfa.py +++ b/examples/planetlab/ping_sfa.py @@ -25,7 +25,8 @@ import os exp_id = "sfa_test" ec = ExperimentController(exp_id) -username = os.environ.get('SFA_SLICE') +#username = os.environ.get('SFA_SLICE') +username = 'inria_lguevgeo' sfauser = os.environ.get('SFA_USER') sfaPrivateKey = os.environ.get('SFA_PK') @@ -39,7 +40,7 @@ ec.set(node1, "cleanHome", True) ec.set(node1, "cleanProcesses", True) node2 = ec.register_resource("PlanetlabSfaNode") -ec.set(node2, "hostname", 'planetlab3.xeno.cl.cam.ac.uk') +ec.set(node2, "hostname", 'onelab1.info.ucl.ac.be') ec.set(node2, "username", username) ec.set(node2, "sfauser", sfauser) ec.set(node2, "sfaPrivateKey", sfaPrivateKey) diff --git a/src/nepi/resources/omf/application.py b/src/nepi/resources/omf/application.py index b6d8d13a..a0faf2a1 100644 --- a/src/nepi/resources/omf/application.py +++ b/src/nepi/resources/omf/application.py @@ -41,7 +41,7 @@ class OMFApplication(OMFResource): """ _rtype = "OMFApplication" - _authorized_connections = ["OMFNode"] + _authorized_connections = ["OMFNode", "WilabtSfaNode"] @classmethod def _register_attributes(cls): diff --git a/src/nepi/resources/omf/interface.py b/src/nepi/resources/omf/interface.py index 4a7b7a7e..59a7964c 100644 --- a/src/nepi/resources/omf/interface.py +++ b/src/nepi/resources/omf/interface.py @@ -40,7 +40,7 @@ class OMFWifiInterface(OMFResource): """ _rtype = "OMFWifiInterface" - _authorized_connections = ["OMFNode" , "OMFChannel"] + _authorized_connections = ["OMFNode" , "OMFChannel", "WilabtSfaNode"] @classmethod def _register_attributes(cls): diff --git a/src/nepi/resources/omf/wilabt_node.py b/src/nepi/resources/omf/wilabt_node.py index d18769ac..eecbe45a 100644 --- a/src/nepi/resources/omf/wilabt_node.py +++ b/src/nepi/resources/omf/wilabt_node.py @@ -68,11 +68,11 @@ class WilabtSfaNode(OMFNode): gateway = Attribute("gateway", "Hostname of the gateway machine", flags = Flags.Design) - hostxmpp = Attribute("hostxmpp", "Hostname from RSpec to use in xmpp messages", + host = Attribute("host", "Name of the physical machine", flags = Flags.Design) - disk_image = Attribute("disk_image", "Specify a specific disk image for a node", - flags = Flags.Design) + #disk_image = Attribute("disk_image", "Specify a specific disk image for a node", + # flags = Flags.Design) cls._register_attribute(username) cls._register_attribute(identity) @@ -82,8 +82,8 @@ class WilabtSfaNode(OMFNode): cls._register_attribute(slicename) cls._register_attribute(gateway_user) cls._register_attribute(gateway) - cls._register_attribute(hostxmpp) - cls._register_attribute(disk_image) + cls._register_attribute(host) + #cls._register_attribute(disk_image) def __init__(self, ec, guid): super(WilabtSfaNode, self).__init__(ec, guid) @@ -92,7 +92,7 @@ class WilabtSfaNode(OMFNode): self._sfaapi = None self._node_to_provision = None self._slicenode = False - self._hostname = False + self._host = False self._username = None def _skip_provision(self): @@ -136,11 +136,11 @@ class WilabtSfaNode(OMFNode): nodes = self.sfaapi.get_resources_hrn() - hostname = self._get_hostname() - if hostname: + host = self._get_host() + if host: # the user specified one particular node to be provisioned - self._hostname = True - host_hrn = nodes[hostname] + self._host = True + host_hrn = nodes[host] # check that the node is not blacklisted or being provisioned # by other RM @@ -149,8 +149,8 @@ class WilabtSfaNode(OMFNode): if self._check_if_in_slice([host_hrn]): self.debug("Node already in slice %s" % host_hrn) self._slicenode = True - hostname = hostname + '.wilab2.ilabt.iminds.be' - self.set('hostname', hostname) + host = host + '.wilab2.ilabt.iminds.be' + self.set('host', host) self._node_to_provision = host_hrn super(WilabtSfaNode, self).do_discover() @@ -214,12 +214,19 @@ class WilabtSfaNode(OMFNode): else: provision_ok = True - if not self.get('hostname'): - self._set_hostname_attr(node) + if not self.get('host'): + self._set_host_attr(node) self.info(" Node provisioned ") super(WilabtSfaNode, self).do_provision() + def do_deploy(self): + if self.state == ResourceState.NEW: + self.info("Deploying w-iLab.t node") + self.do_discover() + self.do_provision() + super(WilabtSfaNode, self).do_deploy() + def do_release(self): super(WilabtSfaNode, self).do_release() if self.state == ResourceState.RELEASED and not self._skip_provision(): @@ -263,7 +270,7 @@ class WilabtSfaNode(OMFNode): through the gateway because is private testbed. """ t = 0 - timeout = 300 + timeout = 1200 ssh_ok = False while t < timeout and not ssh_ok: cmd = 'echo \'GOOD NODE\'' @@ -310,7 +317,7 @@ class WilabtSfaNode(OMFNode): if 'localhost' in out.lower(): return False else: - self.set('hostxmpp', out.strip()) + self.set('hostname', out.strip()) return True def execute(self, command, @@ -329,7 +336,7 @@ class WilabtSfaNode(OMFNode): use 'run' instead.""" (out, err), proc = sshfuncs.rexec( command, - host = self.get("hostname"), + host = self.get("host"), user = self.get("username"), port = 22, gwuser = self.get("gatewayUser"), @@ -361,10 +368,11 @@ class WilabtSfaNode(OMFNode): """ self.info(" Adding node to slice ") slicename = self.get("slicename") - disk_image = self.get("disk_image") - if disk_image is not None: - properties = {'disk_image': disk_image} - else: properties = None + #disk_image = self.get("disk_image") + #if disk_image is not None: + # properties = {'disk_image': disk_image} + #else: properties = None + properties = None self.sfaapi.add_resource_to_slice_batch(slicename, host_hrn, properties=properties) def _delete_from_slice(self): @@ -378,26 +386,26 @@ class WilabtSfaNode(OMFNode): slicename = self.get("slicename") self.sfaapi.remove_all_from_slice(slicename) - def _get_hostname(self): + def _get_host(self): """ Get the attribute hostname. """ - hostname = self.get("hostname") - if hostname: - return hostname + host = self.get("host") + if host: + return host else: return None - def _set_hostname_attr(self, node): + def _set_host_attr(self, node): """ Query SFAAPI for the hostname of a certain host hrn and sets the attribute hostname, it will over write the previous value. """ hosts_hrn = self.sfaapi.get_resources_hrn() - for hostname, hrn in hosts_hrn.iteritems(): + for host, hrn in hosts_hrn.iteritems(): if hrn == node: - hostname = hostname + '.wilab2.ilabt.iminds.be' - self.set("hostname", hostname) + host = host + '.wilab2.ilabt.iminds.be' + self.set("host", host) def _check_if_in_slice(self, hosts_hrn): """ @@ -413,32 +421,16 @@ class WilabtSfaNode(OMFNode): nodes_inslice = list(set(hosts_hrn) & set(slice_nodes_hrn)) return nodes_inslice - def _do_ping(self, hostname): - """ - Perform ping command on node's IP matching hostname. - """ - ping_ok = False - guser = self.get("gatewayUser") - gw = self.get("gateway") - host = hostname + ".wilab2.ilabt.iminds.be" - command = "ssh %s@%s 'ping -c4 %s'" % (guser, gw, host) - (out, err) = lexec(command) - m = re.search("(\d+)% packet loss", str(out)) - if m and int(m.groups()[0]) < 50: - ping_ok = True - - return ping_ok - def _blacklist_node(self, host_hrn): """ Add mal functioning node to blacklist (in SFA API). """ self.warning(" Blacklisting malfunctioning node ") self.sfaapi.blacklist_resource(host_hrn) - if not self._hostname: - self.set('hostname', None) + if not self._host: + self.set('host', None) else: - self.set('hostname', host_hrn.split('.').pop()) + self.set('host', host_hrn.split('.').pop()) def _put_node_in_provision(self, host_hrn): """ @@ -447,12 +439,12 @@ class WilabtSfaNode(OMFNode): """ self.sfaapi.reserve_resource(host_hrn) - def _get_ip(self, hostname): + def _get_ip(self, host): """ Query cache for the IP of a node with certain hostname """ try: - ip = sshfuncs.gethostbyname(hostname) + ip = sshfuncs.gethostbyname(host) except: # Fail while trying to find the IP return None @@ -463,11 +455,11 @@ class WilabtSfaNode(OMFNode): self.error(msg) raise RuntimeError, msg - def fail_node_not_alive(self, hostname=None): - msg = "Node %s not alive" % hostname + def fail_node_not_alive(self, host=None): + msg = "Node %s not alive" % host raise RuntimeError, msg - def fail_node_not_available(self, hostname): + def fail_node_not_available(self, host): msg = "Some nodes not available for provisioning" raise RuntimeError, msg diff --git a/src/nepi/util/sfaapi.py b/src/nepi/util/sfaapi.py index 15e75be0..fafb99d0 100644 --- a/src/nepi/util/sfaapi.py +++ b/src/nepi/util/sfaapi.py @@ -218,7 +218,7 @@ class SFAAPI(object): resources_urn = self._get_resources_urn(resources_hrn_new) - rspec = self.rspec_proc.build_sfa_rspec(slicename, resources_urn, leases) + rspec = self.rspec_proc.build_sfa_rspec(slicename, resources_urn, None, leases) f = open("/tmp/rspec_input.rspec", "w") f.truncate(0) f.write(rspec) diff --git a/src/nepi/util/sfarspec_proc.py b/src/nepi/util/sfarspec_proc.py index d8bb27bd..7e266fa2 100644 --- a/src/nepi/util/sfarspec_proc.py +++ b/src/nepi/util/sfarspec_proc.py @@ -168,7 +168,6 @@ class SfaRSpecProcessing(object): # TODO: take into account the case where we send a dict of URNs without keys #resource['component_id'] = resource.pop('urn') resource['component_id'] = urn - print resource['component_id'] resource_hrn, resource_type = urn_to_hrn(resource['component_id']) # build component_manager_id top_auth = resource_hrn.split('.')[0] @@ -214,8 +213,8 @@ class SfaRSpecProcessing(object): for i, n in enumerate(b): if 'sliver_type name="raw-pc"' in n: b[i] = '' - #b.insert(i+1, '' % properties['disk_image']) - b.insert(i+1, '' % properties['disk_image']) + b.insert(i+1, '' % properties['disk_image']) + #b.insert(i+1, '' % properties['disk_image']) b.insert(i+2, '') string = ''.join(b) self._log.debug("request rspec : %s" % string) diff --git a/test/resources/omf/wilab_node.py b/test/resources/omf/wilab_node.py index 5bca9692..48b7f055 100755 --- a/test/resources/omf/wilab_node.py +++ b/test/resources/omf/wilab_node.py @@ -48,9 +48,10 @@ class WilabtSfaNodeTestCase(unittest.TestCase): def setUp(self): self.ec = DummyEC() - slicepl = os.environ.get('SFA_SLICE') - slicename = ['ple'] + slicepl.split('_') - self.slicename = '.'.join(slicename) + #slicepl = os.environ.get('SFA_SLICE') + #slicename = ['ple'] + slicepl.split('_') + #self.slicename = '.'.join(slicename) + self.slicename = os.environ.get('SFA_SLICE') self.sfauser = os.environ.get('SFA_USER') self.sfaPrivateKey = os.environ.get('SFA_PK') @@ -62,14 +63,12 @@ class WilabtSfaNodeTestCase(unittest.TestCase): the same credentials, the same object of the api is used. """ node1 = self.ec.register_resource("WilabtSfaNode") - self.ec.set(node1, "hostname", "zotacB5") + self.ec.set(node1, "host", "zotacE5") self.ec.set(node1, "slicename", self.slicename) self.ec.set(node1, "sfauser", self.sfauser) self.ec.set(node1, "sfaPrivateKey", self.sfaPrivateKey) self.ec.set(node1, "gatewayUser", "nepi") self.ec.set(node1, "gateway", "bastion.test.iminds.be") - self.ec.set(node1, "cleanHome", True) - self.ec.set(node1, "cleanProcesses", True) wnode_rm1 = self.ec.get_resource(node1) @@ -81,14 +80,12 @@ class WilabtSfaNodeTestCase(unittest.TestCase): self.assertEquals(len(api1._blacklist), 0) node2 = self.ec.register_resource("WilabtSfaNode") - self.ec.set(node2, "hostname", "zotacM20") + self.ec.set(node2, "host", "zotacM20") self.ec.set(node2, "slicename", self.slicename) self.ec.set(node2, "sfauser", self.sfauser) self.ec.set(node2, "sfaPrivateKey", self.sfaPrivateKey) self.ec.set(node1, "gatewayUser", "nepi") self.ec.set(node1, "gateway", "bastion.test.iminds.be") - self.ec.set(node1, "cleanHome", True) - self.ec.set(node1, "cleanProcesses", True) wnode_rm2 = self.ec.get_resource(node2) api2 = wnode_rm2.sfaapi @@ -103,25 +100,23 @@ class WilabtSfaNodeTestCase(unittest.TestCase): Check that the method do_discover reserve the right node. """ node1 = self.ec.register_resource("WilabtSfaNode") - self.ec.set(node1, "hostname", "zotacB5") + self.ec.set(node1, "host", "zotacE5") self.ec.set(node1, "slicename", self.slicename) self.ec.set(node1, "sfauser", self.sfauser) self.ec.set(node1, "sfaPrivateKey", self.sfaPrivateKey) self.ec.set(node1, "gatewayUser", "nepi") self.ec.set(node1, "gateway", "bastion.test.iminds.be") - self.ec.set(node1, "cleanHome", True) - self.ec.set(node1, "cleanProcesses", True) wnode_rm = self.ec.get_resource(node1) - hostname = wnode_rm.get("hostname") - self.assertIsNotNone(hostname) + host = wnode_rm.get("host") + self.assertIsNotNone(host) self.assertEquals(wnode_rm.sfaapi._reserved, set()) wnode_rm.do_discover() self.assertEquals(len(wnode_rm.sfaapi._reserved), 1) - self.assertEquals(wnode_rm._node_to_provision, 'wilab2.ilabt.iminds.be.zotacB5') + self.assertEquals(wnode_rm._node_to_provision, 'wilab2.ilabt.iminds.be.zotacE5') wnode_rm.sfaapi._reserved = set() wnode_rm.sfaapi._blacklist = set() @@ -133,14 +128,12 @@ class WilabtSfaNodeTestCase(unittest.TestCase): its well functioning. """ node = self.ec.register_resource("WilabtSfaNode") - self.ec.set(node, "hostname", "zotacB5") + self.ec.set(node, "host", "zotacE5") self.ec.set(node, "slicename", self.slicename) self.ec.set(node, "sfauser", self.sfauser) self.ec.set(node, "sfaPrivateKey", self.sfaPrivateKey) self.ec.set(node, "gatewayUser", "nepi") self.ec.set(node, "gateway", "bastion.test.iminds.be") - self.ec.set(node, "cleanHome", True) - self.ec.set(node, "cleanProcesses", True) wnode_rm = self.ec.get_resource(node) @@ -148,16 +141,17 @@ class WilabtSfaNodeTestCase(unittest.TestCase): self.assertIsNone(wnode_rm._node_to_provision) wnode_rm.do_discover() - with self.assertRaises(RuntimeError): - wnode_rm.do_provision() + #with self.assertRaises(RuntimeError): + # wnode_rm.do_provision() + wnode_rm.do_provision() if not self.ec.abort and self.ec.state(node) > 2: cmd = 'echo "IT WORKED"' ((out, err), proc) = wnode_rm.execute(cmd) self.assertEquals(out.strip(), "IT WORKED") - wnode_rm.sfaapi._reserved = set() - wnode_rm.sfaapi._blacklist = set() + #wnode_rm.sfaapi._reserved = set() + #wnode_rm.sfaapi._blacklist = set() self.ec.shutdown() @@ -167,14 +161,12 @@ class WilabtSfaNodeTestCase(unittest.TestCase): Test deploy 1 node. """ node = self.ec.register_resource("WilabtSfaNode") - self.ec.set(node, "hostname", "zotacM20") + self.ec.set(node, "host", "zotacM20") self.ec.set(node, "slicename", self.slicename) self.ec.set(node, "sfauser", self.sfauser) self.ec.set(node, "sfaPrivateKey", self.sfaPrivateKey) self.ec.set(node, "gatewayUser", "nepi") self.ec.set(node, "gateway", "bastion.test.iminds.be") - self.ec.set(node, "cleanHome", True) - self.ec.set(node, "cleanProcesses", True) self.ec.deploy() self.ec.wait_deployed(node) @@ -194,24 +186,20 @@ class WilabtSfaNodeTestCase(unittest.TestCase): Test deploy 2 nodes. """ node1 = self.ec.register_resource("WilabtSfaNode") - self.ec.set(node1, "hostname", "zotacB5") + self.ec.set(node1, "host", "zotacE3") self.ec.set(node1, "slicename", self.slicename) self.ec.set(node1, "sfauser", self.sfauser) self.ec.set(node1, "sfaPrivateKey", self.sfaPrivateKey) self.ec.set(node1, "gatewayUser", "nepi") self.ec.set(node1, "gateway", "bastion.test.iminds.be") - self.ec.set(node1, "cleanHome", True) - self.ec.set(node1, "cleanProcesses", True) node2 = self.ec.register_resource("WilabtSfaNode") - self.ec.set(node2, "hostname", "zotacM20") + self.ec.set(node2, "host", "zotacM20") self.ec.set(node2, "slicename", self.slicename) self.ec.set(node2, "sfauser", self.sfauser) self.ec.set(node2, "sfaPrivateKey", self.sfaPrivateKey) self.ec.set(node2, "gatewayUser", "nepi") self.ec.set(node2, "gateway", "bastion.test.iminds.be") - self.ec.set(node2, "cleanHome", True) - self.ec.set(node2, "cleanProcesses", True) self.ec.deploy() self.ec.wait_deployed([node1, node2]) @@ -233,24 +221,20 @@ class WilabtSfaNodeTestCase(unittest.TestCase): Test deploy 2 nodes, already in the slice. """ node1 = self.ec.register_resource("WilabtSfaNode") - self.ec.set(node1, "hostname", "zotacM20") + self.ec.set(node1, "host", "zotacM20") self.ec.set(node1, "slicename", self.slicename) self.ec.set(node1, "sfauser", self.sfauser) self.ec.set(node1, "sfaPrivateKey", self.sfaPrivateKey) self.ec.set(node1, "gatewayUser", "nepi") self.ec.set(node1, "gateway", "bastion.test.iminds.be") - self.ec.set(node1, "cleanHome", True) - self.ec.set(node1, "cleanProcesses", True) node2 = self.ec.register_resource("WilabtSfaNode") - self.ec.set(node2, "hostname", "zotacB5") + self.ec.set(node2, "host", "zotacE3") self.ec.set(node2, "slicename", self.slicename) self.ec.set(node2, "sfauser", self.sfauser) self.ec.set(node2, "sfaPrivateKey", self.sfaPrivateKey) self.ec.set(node2, "gatewayUser", "nepi") self.ec.set(node2, "gateway", "bastion.test.iminds.be") - self.ec.set(node2, "cleanHome", True) - self.ec.set(node2, "cleanProcesses", True) self.ec.deploy() self.ec.wait_deployed([node1, node2]) diff --git a/test/resources/planetlab/sfa_node.py b/test/resources/planetlab/sfa_node.py index 691e84dd..d42440b3 100755 --- a/test/resources/planetlab/sfa_node.py +++ b/test/resources/planetlab/sfa_node.py @@ -50,7 +50,7 @@ class PLSfaNodeTestCase(unittest.TestCase): def setUp(self): self.ec = DummyEC() - self.username = os.environ.get('SFA_SLICE') + self.username = 'inria_lguevgeo' self.sfauser = os.environ.get('SFA_USER') self.sfaPrivateKey = os.environ.get('SFA_PK') -- 2.43.0