self.set_state(ResourceState.PROVISIONED, "_provision_time")
def set_state(self, state, state_time_attr):
+ """ Set the state of the RM while keeping a trace of the time """
+
# Ensure that RM state will not change after released
if self._state == ResourceState.RELEASED:
return
:type ec: ExperimentController
:param guid: guid of the RM
:type guid: int
- :param creds: Credentials to communicate with the rm (XmppClient)
- :type creds: dict
-
- .. note::
-
- This class is used only by the Experiment Controller through the
- Resource Factory
"""
_rtype = "OMFApplication"
return None
def stdin_hook(self, old_value, new_value):
+ """ Set a hook to the stdin attribute in order to send a message at each time
+ the value of this parameter is changed
+
+ """
self._omf_api.send_stdin(self.node.get('hostname'), new_value, self.get('appid'))
return new_value
def add_set_hook(self):
+ """ Initialize the hooks
+
+ """
attr = self._attrs["stdin"]
attr.set_hook = self.stdin_hook
:param creds: Credentials to communicate with the rm (XmppClient for OMF)
:type creds: dict
- .. note::
-
- This class is used only by the Experiment Controller through the Resource Factory
-
"""
_rtype = "OMFChannel"
_authorized_connections = ["OMFWifiInterface", "OMFNode"]
:type ec: ExperimentController
:param guid: guid of the RM
:type guid: int
- :param creds: Credentials to communicate with the rm (XmppClient for OMF)
- :type creds: dict
"""
super(OMFChannel, self).__init__(ec, guid)
:type ec: ExperimentController
:param guid: guid of the RM
:type guid: int
- :param creds: Credentials to communicate with the rm (XmppClient for OMF)
- :type creds: dict
-
- .. note::
-
- This class is used only by the Experiment Controller through the Resource
- Factory
"""
_rtype = "OMFWifiInterface"
:param creds: Credentials to communicate with the rm (XmppClient for OMF)
:type creds: dict
- .. note::
-
- This class is used only by the Experiment Controller through the Resource Factory
-
"""
_rtype = "OMFNode"
_authorized_connections = ["OMFApplication" , "OMFWifiInterface"]
hostname = self._get_hostname()
if hostname:
# the user specified one particular node to be provisioned
- # check with PLCAPI if it is alive
self._hostname = True
- node_id = self._query_if_alive(hostname=hostname)
- node_id = node_id.pop()
+ node_id = self._get_nodes_id({'hostname':hostname})
+ node_id = node_id.pop()['node_id']
# check that the node is not blacklisted or being provisioned
# by other RM
# the user specifies constraints based on attributes, zero, one or
# more nodes can match these constraints
nodes = self._filter_based_on_attributes()
- nodes_alive = self._query_if_alive(nodes)
# nodes that are already part of user's slice have the priority to
# provisioned
- nodes_inslice = self._check_if_in_slice(nodes_alive)
- nodes_not_inslice = list(set(nodes_alive) - set(nodes_inslice))
+ nodes_inslice = self._check_if_in_slice(nodes)
+ nodes_not_inslice = list(set(nodes) - set(nodes_inslice))
node_id = None
if nodes_inslice:
nodes_id = self._filter_by_range_attr(attr_name, attr_value, filters, nodes_id)
if not filters:
- nodes = self.plapi.get_nodes()
+ nodes = self._get_nodes_id()
for node in nodes:
nodes_id.append(node['node_id'])
-
return nodes_id
-
def _filter_by_fixed_attr(self, filters, nodes_id):
"""
Query PLCAPI for nodes ids matching fixed attributes defined by the
return nodes_id
- def _query_if_alive(self, nodes_id=None, hostname=None):
- """
- Query PLCAPI for nodes that register activity recently, using filters
- related to the state of the node, e.g. last time it was contacted
- """
- if nodes_id is None and hostname is None:
- msg = "Specify nodes_id or hostname"
- raise RuntimeError, msg
-
- if nodes_id is not None and hostname is not None:
- msg = "Specify either nodes_id or hostname"
- raise RuntimeError, msg
-
- # define PL filters to check the node is alive
- filters = dict()
- filters['run_level'] = 'boot'
- filters['boot_state'] = 'boot'
- filters['node_type'] = 'regular'
- #filters['>last_contact'] = int(time.time()) - 2*3600
-
- # adding node_id or hostname to the filters to check for the particular
- # node
- if nodes_id:
- filters['node_id'] = list(nodes_id)
- alive_nodes_id = self._get_nodes_id(filters)
- elif hostname:
- filters['hostname'] = hostname
- alive_nodes_id = self._get_nodes_id(filters)
-
- if len(alive_nodes_id) == 0:
- self.fail_node_not_alive(hostname)
- else:
- nodes_id = list()
- for node_id in alive_nodes_id:
- nid = node_id['node_id']
- nodes_id.append(nid)
-
- return nodes_id
-
def _choose_random_node(self, nodes):
"""
From the possible nodes for provision, choose randomly to decrese the
self._put_node_in_provision(node_id)
return node_id
- def _get_nodes_id(self, filters):
+ def _get_nodes_id(self, filters=None):
return self.plapi.get_nodes(filters, fields=['node_id'])
def _add_node_to_slice(self, node_id):
self._blacklist = set()
self._reserved = set()
self._nodes_cache = None
+ self._already_cached = False
if session_key is not None:
self.auth = dict(AuthMethod='session', session=session_key)
filters.update(kw)
if not filters and not fieldstuple:
- if not self._nodes_cache:
+ if not self._nodes_cache and not self._already_cached:
+ self._already_cached = True
self._nodes_cache = _retry(self.mcapi.GetNodes)(self.auth)
+ elif not self._nodes_cache:
+ while not self._nodes_cache:
+ time.sleep(10)
return self._nodes_cache
return _retry(self.mcapi.GetNodes)(self.auth, filters, *fieldstuple)
def do_start(self):
super(Application, self).do_start()
time.sleep(random.random() * 3)
- self.ec.schedule("0.5s", self.finish)
+ self.ec.schedule("0.5s", self.stop)
class ErrorApplication(ResourceManager):
_rtype = "ErrorApplication"
self.assertTrue(ec.state(node) == ResourceState.STARTED)
self.assertTrue(
- all([ec.state(guid) == ResourceState.FINISHED \
+ all([ec.state(guid) == ResourceState.STOPPED \
for guid in apps])
)
for app in apps:
state = ec.state(app)
- self.assertEquals(state, ResourceState.FINISHED)
+ self.assertEquals(state, ResourceState.STOPPED)
ec.shutdown()
class LinuxApplicationTestCase(unittest.TestCase):
def setUp(self):
self.fedora_host = "nepi2.pl.sophia.inria.fr"
- self.fedora_user = "inria_nepi"
+ self.fedora_user = "inria_test"
self.ubuntu_host = "roseval.pl.sophia.inria.fr"
self.ubuntu_user = "alina"
ec.wait_finished(app)
self.assertTrue(ec.state(node) == ResourceState.STARTED)
- self.assertTrue(ec.state(app) == ResourceState.FINISHED)
+ self.assertTrue(ec.state(app) == ResourceState.STOPPED)
stdout = ec.trace(app, "stdout")
self.assertTrue(stdout.strip() == "HOLA")
ec.wait_finished(app)
self.assertTrue(ec.state(node) == ResourceState.STARTED)
- self.assertTrue(ec.state(app) == ResourceState.FINISHED)
+ self.assertTrue(ec.state(app) == ResourceState.STOPPED)
stdout = ec.trace(app, "stdout")
size = ec.trace(app, "stdout", attr = TraceAttr.SIZE)
self.assertTrue(ec.state(node) == ResourceState.STARTED)
self.assertTrue(
- all([ec.state(guid) == ResourceState.FINISHED \
+ all([ec.state(guid) == ResourceState.STOPPED \
for guid in apps])
)
ec.wait_finished(apps)
self.assertTrue(ec.state(node) == ResourceState.STARTED)
- self.assertTrue(ec.state(server) == ResourceState.FINISHED)
- self.assertTrue(ec.state(client) == ResourceState.FINISHED)
+ self.assertTrue(ec.state(server) == ResourceState.STOPPED)
+ self.assertTrue(ec.state(client) == ResourceState.STOPPED)
stdout = ec.trace(client, "stdout")
self.assertTrue(stdout.strip() == "HOLA")
ec.wait_finished([app])
self.assertTrue(ec.state(node) == ResourceState.STARTED)
- self.assertTrue(ec.state(app) == ResourceState.FINISHED)
+ self.assertTrue(ec.state(app) == ResourceState.STOPPED)
exitcode = ec.trace(app, "deploy_exitcode")
self.assertTrue(exitcode.strip() == "0")
ec.wait_finished([app])
- self.assertTrue(ec.state(app) == ResourceState.FINISHED)
+ self.assertTrue(ec.state(app) == ResourceState.STOPPED)
ec.shutdown()
class LinuxCCNPingTestCase(unittest.TestCase):
def setUp(self):
self.fedora_host = "nepi2.pl.sophia.inria.fr"
- self.fedora_user = "inria_nepi"
+ self.fedora_user = "inria_test"
self.ubuntu_host = "roseval.pl.sophia.inria.fr"
self.ubuntu_user = "alina"
class LinuxFIBEntryTestCase(unittest.TestCase):
def setUp(self):
self.fedora_host = "nepi2.pl.sophia.inria.fr"
- self.fedora_user = "inria_nepi"
+ self.fedora_user = "inria_test"
self.ubuntu_host = "roseval.pl.sophia.inria.fr"
- self.ubuntu_user = "alina"
+ self.ubuntu_user = "nepi"
self.target = "nepi5.pl.sophia.inria.fr"
class LinuxInterfaceTestCase(unittest.TestCase):
def setUp(self):
self.fedora_host = "nepi2.pl.sophia.inria.fr"
- self.fedora_user = "inria_nepi"
+ self.fedora_user = "inria_test"
self.ubuntu_host = "roseval.pl.sophia.inria.fr"
self.ubuntu_user = "alina"
class LinuxMtrTestCase(unittest.TestCase):
def setUp(self):
self.fedora_host = "nepi2.pl.sophia.inria.fr"
- self.fedora_user = "inria_nepi"
+ self.fedora_user = "inria_test"
self.ubuntu_host = "roseval.pl.sophia.inria.fr"
self.ubuntu_user = "alina"
class LinuxNodeTestCase(unittest.TestCase):
def setUp(self):
self.fedora_host = "nepi2.pl.sophia.inria.fr"
- self.fedora_user = "inria_nepi"
+ self.fedora_user = "inria_test"
self.ubuntu_host = "roseval.pl.sophia.inria.fr"
self.ubuntu_user = "alina"
class LinuxNPingTestCase(unittest.TestCase):
def setUp(self):
self.fedora_host = "nepi2.pl.sophia.inria.fr"
- self.fedora_user = "inria_nepi"
+ self.fedora_user = "inria_test"
self.ubuntu_host = "roseval.pl.sophia.inria.fr"
self.ubuntu_user = "alina"
class LinuxPingTestCase(unittest.TestCase):
def setUp(self):
self.fedora_host = "nepi2.pl.sophia.inria.fr"
- self.fedora_user = "inria_nepi"
+ self.fedora_user = "inria_test"
self.ubuntu_host = "roseval.pl.sophia.inria.fr"
self.ubuntu_user = "alina"
class LinuxTcpdumpTestCase(unittest.TestCase):
def setUp(self):
self.fedora_host = "nepi2.pl.sophia.inria.fr"
- self.fedora_user = "inria_nepi"
+ self.fedora_user = "inria_test"
self.ubuntu_host = "roseval.pl.sophia.inria.fr"
self.ubuntu_user = "alina"
class LinuxTracerouteTestCase(unittest.TestCase):
def setUp(self):
self.fedora_host = "nepi2.pl.sophia.inria.fr"
- self.fedora_user = "inria_nepi"
+ self.fedora_user = "inria_test"
self.ubuntu_host = "roseval.pl.sophia.inria.fr"
self.ubuntu_user = "alina"
class LinuxUdpTestTestCase(unittest.TestCase):
def setUp(self):
self.fedora_host = "nepi2.pl.sophia.inria.fr"
- self.fedora_user = "inria_nepi"
+ self.fedora_user = "inria_test"
self.ubuntu_host = "roseval.pl.sophia.inria.fr"
self.ubuntu_user = "alina"
self.ec.wait_finished([self.app1, self.app2, self.app3])
+ self.assertEquals(self.ec.get_resource(self.app1).state, ResourceState.STOPPED)
self.assertEquals(self.ec.get_resource(self.app2).state, ResourceState.FAILED)
- self.assertEquals(self.ec.get_resource(self.app3).state, ResourceState.FAILED)
+ self.assertEquals(self.ec.get_resource(self.app3).state, ResourceState.STOPPED)
self.ec.shutdown()
self.ec.wait_finished([self.app1, self.app2, self.app3, self.app4, self.app5, self.app6])
+ self.assertEquals(self.ec.get_resource(self.app3).state, ResourceState.STOPPED)
self.assertEquals(self.ec.get_resource(self.app2).state, ResourceState.FAILED)
- self.assertEquals(self.ec.get_resource(self.app3).state, ResourceState.FAILED)
+ self.assertEquals(self.ec.get_resource(self.app3).state, ResourceState.STOPPED)
+ self.assertEquals(self.ec.get_resource(self.app3).state, ResourceState.STOPPED)
self.assertEquals(self.ec.get_resource(self.app5).state, ResourceState.FAILED)
- self.assertEquals(self.ec.get_resource(self.app6).state, ResourceState.FAILED)
+ self.assertEquals(self.ec.get_resource(self.app6).state, ResourceState.STOPPED)
self.ec.shutdown()