"""
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
Each data center is represented by a single switch to which
compute resources can be connected at run time.
- TODO: This will be changes in the future to support multiple networks
+ TODO: This will be changed in the future to support multiple networks
per data center
"""
self.switch = self.net.mnet.addSwitch(
def start(self):
pass
- def addCompute(self):
- pass
+ def addCompute(self, name):
+ """
+ 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):
- pass
+ def removeCompute(self, 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]