* 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
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 ):
"""
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
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]