improved connection management
[osm/vim-emu.git] / emuvim / dcemulator / node.py
index 3111735..67ce600 100644 (file)
@@ -12,12 +12,15 @@ class Datacenter(object):
     """
     Represents a logical data center to which compute resources
     (Docker containers) can be added at runtime.
+
+    Will also implement resource bookkeeping in later versions.
     """
 
     def __init__(self, name):
         self.net = None  # DCNetwork to which we belong
         self.name = name
         self.switch = None  # first prototype assumes one "bigswitch" per DC
+        self.containers = {}  # keep track of running containers
 
     def _get_next_dc_dpid(self):
         global DCDPID_BASE
@@ -40,11 +43,21 @@ class Datacenter(object):
         pass
 
     def addCompute(self, name):
-        #TODO remove mnet shortcut to have a clean API
-        #TODO connect container to DC's swtich
-        self.net.mnet.addDocker("%s.%s" % (self.name, name), dimage="ubuntu")
+        """
+        Create a new container as compute resource and connect it to this
+        data center.
+        """
+        # TODO ip management
+        d = self.net.addDocker("%s" % (name), dimage="ubuntu")
+        self.net.addLink(d, self.switch) #params1={"ip": "10.0.0.254/8"}
+        self.containers[name] = d
 
     def removeCompute(self, name):
-        #TODO remove mnet shortcut to have a clean API
-        #TODO disconnect container to DC's swtich
-        self.net.mnet.removeDocker("%s.%s" % (self.name, name))
+        """
+        Stop and remove a container from this data center.
+        """
+        assert name in self.containers
+        self.net.removeLink(
+            link=None, node1=self.containers[name], node2=self.switch)
+        self.net.removeDocker("%s" % (name))
+        del self.containers[name]