self._set[guid][time] = dict()
self._set[guid][time][name] = value
- def box_get(self, time, guid, name):
+ def get(self, time, guid, name):
"""
Helper for subclasses, gets an attribute from box definitions
if available. Throws KeyError if the GUID wasn't created
raise AttributeError, "Attribute %s can only be queried during experiment design" % name
return factory.box_attributes.get_attribute_value(name)
- #get: NotImplementedError
-
def box_get_route(self, guid, index, attribute):
"""
Helper implementation for get_route, returns information
from constants import TESTBED_ID
from nepi.core import testbed_impl
+from nepi.util.constants import TESTBED_STATUS_CREATED
import os
class TestbedController(testbed_impl.TestbedController):
self._home_directory = self._attributes.\
get_attribute_value("homeDirectory")
self._netns = self._load_netns_module()
+ super(TestbedController, self).do_setup()
def set(self, time, guid, name, value):
super(TestbedController, self).set(time, guid, name, value)
-
# TODO: take on account schedule time for the task
element = self._elements.get(guid)
if element:
setattr(element, name, value)
def get(self, time, guid, name):
+ value = super(TestbedController, self).get(time, guid, name)
# TODO: take on account schedule time for the task
+ factory_id = self._create[guid]
+ factory = self._factories[factory_id]
+ if factory.box_attributes.is_attribute_design_only(name):
+ return value
element = self._elements.get(guid)
- if element:
- try:
- if hasattr(element, name):
- # Runtime attribute
- return getattr(element, name)
- else:
- # Try design-time attributes
- return self.box_get(time, guid, name)
- except KeyError, AttributeError:
- return None
+ try:
+ return getattr(element, name)
+ except KeyError, AttributeError:
+ return value
def get_route(self, guid, index, attribute):
# TODO: fetch real data from netns
def set(self, time, guid, name, value):
super(TestbedController, self).set(time, guid, name, value)
# TODO: take on account schedule time for the task
- if self._status < TESTBED_STATUS_CREATED or \
- factory.box_attributes.is_attribute_design_only(name):
+ factory_id = self._create[guid]
+ factory = self._factories[factory_id]
+ if factory.box_attributes.is_attribute_design_only(name):
return
element = self._elements[guid]
ns3_value = self._to_ns3_value(guid, name, value)
element.SetAttribute(name, ns3_value)
def get(self, time, guid, name):
+ value = super(TestbedController, self).get(time, guid, name)
# TODO: take on account schedule time for the task
+ factory_id = self._create[guid]
+ factory = self._factories[factory_id]
+ if factory.box_attributes.is_attribute_design_only(name):
+ return value
TypeId = self.ns3.TypeId()
typeid = TypeId.LookupByName(factory_id)
info = TypeId.AttributeInfo()
if not typeid or not typeid.LookupAttributeByName(name, info):
- try:
- # Try design-time attributes
- return self.box_get(time, guid, name)
- except KeyError, AttributeError:
- return None
+ raise AttributeError("Invalid attribute %s for element type %d" % \
+ (name, guid))
checker = info.checker
ns3_value = checker.Create()
element = self._elements[guid]
element.GetAttribute(name, ns3_value)
value = ns3_value.SerializeToString(checker)
- factory_id = self._create[guid]
- factory = self._factories[factory_id]
attr_type = factory.box_attributes.get_attribute_type(name)
if attr_type == Attribute.INTEGER:
return int(value)
get_attribute_value("authPass")
self.sliceSSHKey = self._attributes.\
get_attribute_value("sliceSSHKey")
+ super(TestbedController, self).do_setup()
def do_preconfigure(self):
# Perform resource discovery if we don't have
# cleanup
del self._to_provision
-
def set(self, time, guid, name, value):
super(TestbedController, self).set(time, guid, name, value)
# TODO: take on account schedule time for the task
element.refresh()
def get(self, time, guid, name):
+ value = super(TestbedController, self).get(time, guid, name)
# TODO: take on account schedule time for the task
+ factory_id = self._create[guid]
+ factory = self._factories[factory_id]
+ if factory.box_attributes.is_attribute_design_only(name):
+ return value
element = self._elements.get(guid)
- if element:
- try:
- if hasattr(element, name):
- # Runtime attribute
- return getattr(element, name)
- else:
- # Try design-time attributes
- return self.box_get(time, guid, name)
- except KeyError, AttributeError:
- return None
+ try:
+ return getattr(element, name)
+ except KeyError, AttributeError:
+ return value
def get_route(self, guid, index, attribute):
# TODO: fetch real data from planetlab
def __init__(self, testbed_version):
super(TestbedController, self).__init__(TESTBED_ID, testbed_version)
- def do_setup(self):
- pass
-
def do_configure(self):
pass
- def set(self, time, guid, name, value):
- super(TestbedController, self).set(time, guid, name, value)
-
- def get(self, time, guid, name):
- try:
- return self.box_get(time, guid, name)
- except KeyError, AttributeError:
- return None
-
def get_route(self, guid, index, attribute):
try:
return self.box_get_route(guid, int(index), attribute)