X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=src%2Fnepi%2Ftestbeds%2Fplanetlab%2Fmetadata_v01.py;h=6fcc07d2a1e8a519d7e906d4f56a806d4c5e6bd5;hb=3f1dc42591981522c72c19ad5a0ea5cdc518d8b9;hp=885c181b07d79c743d69510affaab21f207dad3e;hpb=d8fc729cb77f28be997cccaae0d787ece65b0e7b;p=nepi.git diff --git a/src/nepi/testbeds/planetlab/metadata_v01.py b/src/nepi/testbeds/planetlab/metadata_v01.py index 885c181b..6fcc07d2 100644 --- a/src/nepi/testbeds/planetlab/metadata_v01.py +++ b/src/nepi/testbeds/planetlab/metadata_v01.py @@ -7,8 +7,9 @@ from constants import TESTBED_ID from nepi.core import metadata from nepi.core.attributes import Attribute from nepi.util import validation -from nepi.util.constants import STATUS_NOT_STARTED, STATUS_RUNNING, \ - STATUS_FINISHED, ATTR_NEPI_TESTBED_ENVIRONMENT_SETUP +from nepi.util.constants import ApplicationStatus as AS, \ + FactoryCategories as FC, \ + ATTR_NEPI_TESTBED_ENVIRONMENT_SETUP import functools import os @@ -147,6 +148,9 @@ def connect_dep(testbed_instance, node_guid, app_guid): for envkey, envval in app.env.iteritems(): envval = app._replace_paths(envval) node.env[envkey].append(envval) + + if app.rpmFusion: + node.rpmFusion = True def connect_node_netpipe(testbed_instance, node_guid, netpipe_guid): node = testbed_instance._elements[node_guid] @@ -279,7 +283,7 @@ def stop_application(testbed_instance, guid): def status_application(testbed_instance, guid): if guid not in testbed_instance.elements.keys(): - return STATUS_NOT_STARTED + return AS.STATUS_NOT_STARTED app = testbed_instance.elements[guid] return app.status() @@ -377,12 +381,6 @@ def configure_node(testbed_instance, guid): # Do some validations node.validate() - # recently provisioned nodes may not be up yet - sleeptime = 1.0 - while not node.is_alive(): - time.sleep(sleeptime) - sleeptime = min(30.0, sleeptime*1.5) - # this will be done in parallel in all nodes # this call only spawns the process node.install_dependencies() @@ -409,7 +407,7 @@ def configure_application(testbed_instance, guid): app.node.wait_dependencies() # Install stuff - app.setup() + app.async_setup() def configure_dependency(testbed_instance, guid): dep = testbed_instance._elements[guid] @@ -421,7 +419,7 @@ def configure_dependency(testbed_instance, guid): dep.node.wait_dependencies() # Install stuff - dep.setup() + dep.async_setup() def configure_netpipe(testbed_instance, guid): netpipe = testbed_instance._elements[guid] @@ -800,6 +798,14 @@ attributes = dict({ "flags": Attribute.DesignOnly, "validation_function": validation.is_string }), + "rpm-fusion": dict({ + "name": "rpmFusion", + "help": "True if required packages can be found in the RpmFusion repository", + "type": Attribute.BOOL, + "flags": Attribute.DesignOnly, + "value": False, + "validation_function": validation.is_bool + }), "sources": dict({ "name": "sources", "help": "Space-separated list of regular files to be deployed in the working path prior to building. " @@ -941,7 +947,7 @@ factories_info = dict({ NODE: dict({ "allow_routes": True, "help": "Virtualized Node (V-Server style)", - "category": "topology", + "category": FC.CATEGORY_NODES, "create_function": create_node, "preconfigure_function": configure_node, "prestart_function": configure_node_routes, @@ -965,7 +971,7 @@ factories_info = dict({ NODEIFACE: dict({ "has_addresses": True, "help": "External network interface - they cannot be brought up or down, and they MUST be connected to the internet.", - "category": "devices", + "category": FC.CATEGORY_DEVICES, "create_function": create_nodeiface, "preconfigure_function": configure_nodeiface, "box_attributes": [ ], @@ -974,7 +980,7 @@ factories_info = dict({ TUNIFACE: dict({ "allow_addresses": True, "help": "Virtual TUN network interface (layer 3)", - "category": "devices", + "category": FC.CATEGORY_DEVICES, "create_function": create_tuniface, "preconfigure_function": preconfigure_tuniface, "configure_function": postconfigure_tuniface, @@ -990,7 +996,7 @@ factories_info = dict({ TAPIFACE: dict({ "allow_addresses": True, "help": "Virtual TAP network interface (layer 2)", - "category": "devices", + "category": FC.CATEGORY_DEVICES, "create_function": create_tapiface, "preconfigure_function": preconfigure_tuniface, "configure_function": postconfigure_tuniface, @@ -1005,7 +1011,7 @@ factories_info = dict({ }), APPLICATION: dict({ "help": "Generic executable command line application", - "category": "applications", + "category": FC.CATEGORY_APPLICATIONS, "create_function": create_application, "start_function": start_application, "status_function": status_application, @@ -1013,23 +1019,23 @@ factories_info = dict({ "configure_function": configure_application, "box_attributes": ["command", "sudo", "stdin", "depends", "build-depends", "build", "install", - "sources" ], + "sources", "rpm-fusion" ], "connector_types": ["node"], "traces": ["stdout", "stderr", "buildlog"] }), DEPENDENCY: dict({ "help": "Requirement for package or application to be installed on some node", - "category": "applications", + "category": FC.CATEGORY_APPLICATIONS, "create_function": create_dependency, "preconfigure_function": configure_dependency, "box_attributes": ["depends", "build-depends", "build", "install", - "sources" ], + "sources", "rpm-fusion" ], "connector_types": ["node"], "traces": ["buildlog"] }), NEPIDEPENDENCY: dict({ "help": "Requirement for NEPI inside NEPI - required to run testbed instances inside a node", - "category": "applications", + "category": FC.CATEGORY_APPLICATIONS, "create_function": create_nepi_dependency, "preconfigure_function": configure_dependency, "box_attributes": [ ], @@ -1038,7 +1044,7 @@ factories_info = dict({ }), NS3DEPENDENCY: dict({ "help": "Requirement for NS3 inside NEPI - required to run NS3 testbed instances inside a node. It also needs NepiDependency.", - "category": "applications", + "category": FC.CATEGORY_APPLICATIONS, "create_function": create_ns3_dependency, "preconfigure_function": configure_dependency, "box_attributes": [ ], @@ -1047,13 +1053,13 @@ factories_info = dict({ }), INTERNET: dict({ "help": "Internet routing", - "category": "topology", + "category": FC.CATEGORY_CHANNELS, "create_function": create_internet, "connector_types": ["devs"], }), NETPIPE: dict({ "help": "Link emulation", - "category": "topology", + "category": FC.CATEGORY_CHANNELS, "create_function": create_netpipe, "configure_function": configure_netpipe, "box_attributes": ["netpipe_mode",