populated compute API
[osm/vim-emu.git] / emuvim / dcemulator / node.py
index 71267ff..3ab6341 100644 (file)
@@ -20,6 +20,7 @@ class Datacenter(object):
         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
@@ -41,15 +42,40 @@ class Datacenter(object):
     def start(self):
         pass
 
-    def addCompute(self, name):
+    def addCompute(self, name, image=None, network=None):
         """
         Create a new container as compute resource and connect it to this
         data center.
+
+        TODO: This interface will change to support multiple networks to which
+        a single container can be connected.
         """
-        #TODO connect container to DC's swtich
-        d1 = self.net.addDocker("%s.%s" % (self.name, name), dimage="ubuntu")
-        l1 = self.net.addLink(d1, self.switch)
+        assert name is not None
+        # set default parameter
+        if image is None:
+            image = "ubuntu"
+        if network is None:
+            network = {}  # {"ip": "10.0.0.254/8"}
+        # create the container and connect it to the given network
+        d = self.net.addDocker("%s" % (name), dimage=image)
+        self.net.addLink(d, self.switch, params1=network)
+        self.containers[name] = d
+        return name  # we might use UUIDs for naming later on
 
     def removeCompute(self, name):
-        #TODO disconnect container to DC's swtich
-        self.net.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]
+        return True
+
+    def listCompute(self):
+        """
+        Return a list of all running containers assigned to this
+        data center.
+        """
+        return self.containers.itervalues()