# Author: Lucia Guevgeozian <lucia.guevgeozian_odizzio@inria.fr>
from nepi.execution.ec import ExperimentController
+from nepi.execution.resource import ResourceAction, ResourceState
+
import os
# Create the EC
# 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()
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')
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)
"""
_rtype = "OMFApplication"
- _authorized_connections = ["OMFNode"]
+ _authorized_connections = ["OMFNode", "WilabtSfaNode"]
@classmethod
def _register_attributes(cls):
"""
_rtype = "OMFWifiInterface"
- _authorized_connections = ["OMFNode" , "OMFChannel"]
+ _authorized_connections = ["OMFNode" , "OMFChannel", "WilabtSfaNode"]
@classmethod
def _register_attributes(cls):
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)
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)
self._sfaapi = None
self._node_to_provision = None
self._slicenode = False
- self._hostname = False
+ self._host = False
self._username = None
def _skip_provision(self):
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
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()
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():
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\''
if 'localhost' in out.lower():
return False
else:
- self.set('hostxmpp', out.strip())
+ self.set('hostname', out.strip())
return True
def execute(self, command,
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"),
"""
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):
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):
"""
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):
"""
"""
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
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
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)
# 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]
for i, n in enumerate(b):
if 'sliver_type name="raw-pc"' in n:
b[i] = '<sliver_type name="raw-pc">'
- #b.insert(i+1, '<disk_image name="urn:publicid:IDN+wall2.ilabt.iminds.be+image+emulab-ops//%s"/>' % properties['disk_image'])
- b.insert(i+1, '<disk_image name="urn:publicid:IDN+wilab2.ilabt.iminds.be+image+nepi:%s"/>' % properties['disk_image'])
+ b.insert(i+1, '<disk_image name="urn:publicid:IDN+wall2.ilabt.iminds.be+image+emulab-ops//%s"/>' % properties['disk_image'])
+ #b.insert(i+1, '<disk_image name="urn:publicid:IDN+wilab2.ilabt.iminds.be+image+nepi:%s"/>' % properties['disk_image'])
b.insert(i+2, '</sliver_type>')
string = ''.join(b)
self._log.debug("request rspec : %s" % string)
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')
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)
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
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()
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)
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()
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)
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])
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])
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')