From a2ad9ffafff966fbfc17ba1d5782a8ef90807428 Mon Sep 17 00:00:00 2001 From: peusterm Date: Mon, 11 Jan 2016 17:10:07 +0100 Subject: [PATCH] link remove enabled --- README.md | 1 + emuvim/dcemulator/net.py | 10 +++++++++- emuvim/dcemulator/node.py | 16 ++++++++++++---- 3 files changed, 22 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 93e8049..873a936 100644 --- 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 diff --git a/emuvim/dcemulator/net.py b/emuvim/dcemulator/net.py index 600eca3..478c587 100644 --- a/emuvim/dcemulator/net.py +++ b/emuvim/dcemulator/net.py @@ -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 ): """ diff --git a/emuvim/dcemulator/node.py b/emuvim/dcemulator/node.py index 71267ff..6adf57c 100644 --- a/emuvim/dcemulator/node.py +++ b/emuvim/dcemulator/node.py @@ -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] -- 2.25.1