link remove enabled
authorpeusterm <manuel.peuster@uni-paderborn.de>
Mon, 11 Jan 2016 16:10:07 +0000 (17:10 +0100)
committerpeusterm <manuel.peuster@uni-paderborn.de>
Mon, 11 Jan 2016 16:10:07 +0000 (17:10 +0100)
README.md
emuvim/dcemulator/net.py
emuvim/dcemulator/node.py

index 93e8049..873a936 100644 (file)
--- a/README.md
+++ b/README.md
@@ -31,6 +31,7 @@
 * DCemulator
  * correctly start and connect new compute resources at runtime
  * remove and disconnect compute resources at runtime
+ * do IP management for new containers
  * list active compute resources
 * Cloud-like reference API with CLI for demonstrations
  * Write CLI client
index 600eca3..478c587 100644 (file)
@@ -77,7 +77,15 @@ class DCNetwork(object):
                 node2 = self.switches[node2]
         if isinstance( node2, Datacenter ):
             node2 = node2.switch
-        self.mnet.addLink(node1, node2, **params)  # TODO we need TCLinks with user defined performance here
+        return self.mnet.addLink(node1, node2, **params)  # TODO we need TCLinks with user defined performance here
+
+    def removeLink(self, link=None, node1=None, node2=None):
+        """
+        Removes a link. Can either be specified by link object,
+        or the nodes the link connects. Wraps Dockernet method.
+        """
+        logging.debug("removeLink: n1=%s n2=%s" % (str(node1), str(node2)))
+        return self.mnet.removeLink(link=link, node1=node1, node2=node2)
 
     def addDocker( self, name, **params ):
         """
index 71267ff..6adf57c 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
@@ -46,10 +47,17 @@ class Datacenter(object):
         Create a new container as compute resource and connect it to this
         data center.
         """
-        #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)
+        # TODO ip management
+        d = self.net.addDocker("%s.%s" % (self.name, 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 disconnect container to DC's swtich
+        """
+        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.%s" % (self.name, name))
+        del self.containers[name]