Ticket #10: netrefs, initial implementation
[nepi.git] / src / nepi / testbeds / planetlab / execute.py
index c6fa941..313e51f 100644 (file)
@@ -8,7 +8,6 @@ import os
 class TestbedInstance(testbed_impl.TestbedInstance):
     def __init__(self, testbed_version):
         super(TestbedInstance, self).__init__(TESTBED_ID, testbed_version)
-        self._netns = None
         self._home_directory = None
         self._traces = dict()
 
@@ -16,14 +15,9 @@ class TestbedInstance(testbed_impl.TestbedInstance):
     def home_directory(self):
         return self._home_directory
 
-    @property
-    def netns(self):
-        return self._netns
-
     def do_setup(self):
         self._home_directory = self._attributes.\
             get_attribute_value("homeDirectory")
-        self._netns = self._load_netns_module()
 
     def set(self, time, guid, name, value):
         super(TestbedInstance, self).set(time, guid, name, value)
@@ -34,18 +28,36 @@ class TestbedInstance(testbed_impl.TestbedInstance):
 
     def get(self, time, guid, name):
         # TODO: take on account schedule time for the task
-        element = self._elements[guid]
-        return getattr(element, name)
+        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
+
+    def get_route(self, guid, index, attribute):
+        # TODO: fetch real data from planetlab
+        try:
+            return self.box_get_route(guid, int(index), attribute)
+        except KeyError, AttributeError:
+            return None
+
+    def get_address(self, guid, index, attribute='Address'):
+        # TODO: fetch real data from planetlab
+        try:
+            return self.box_get_address(guid, int(index), attribute)
+        except KeyError, AttributeError:
+            return None
+
 
     def action(self, time, guid, action):
         raise NotImplementedError
 
-    def trace(self, guid, trace_id):
-        fd = open("%s" % self.trace_filename(guid, trace_id), "r")
-        content = fd.read()
-        fd.close()
-        return content
-
     def shutdown(self):
         for trace in self._traces.values():
             trace.close()
@@ -59,14 +71,4 @@ class TestbedInstance(testbed_impl.TestbedInstance):
     def follow_trace(self, trace_id, trace):
         self._traces[trace_id] = trace
 
-    def _load_netns_module(self):
-        # TODO: Do something with the configuration!!!
-        import sys
-        __import__("netns")
-        netns_mod = sys.modules["netns"]
-        # enable debug
-        enable_debug = self._attributes.get_attribute_value("enableDebug")
-        if enable_debug:
-            netns_mod.environ.set_log_level(netns_mod.environ.LOG_DEBUG)
-        return netns_mod