X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=emuvim%2Fdcemulator%2Fnode.py;h=13007eb5fa85bb089f1c7651d8d2d460b667703b;hb=d7cb443596657a5c0a54e9c8230e441ad36a0cca;hp=d50693012b266550268ccc4fe6095fecb1749606;hpb=fa4bcc77c95dc01bfd98f664fafe433d255cfa33;p=osm%2Fvim-emu.git diff --git a/emuvim/dcemulator/node.py b/emuvim/dcemulator/node.py old mode 100644 new mode 100755 index d506930..13007eb --- a/emuvim/dcemulator/node.py +++ b/emuvim/dcemulator/node.py @@ -52,7 +52,7 @@ class EmulatorCompute(Docker): status["state"] = self.dcli.inspect_container(self.dc)["State"] status["id"] = self.dcli.inspect_container(self.dc)["Id"] status["datacenter"] = (None if self.datacenter is None - else self.datacenter.name) + else self.datacenter.label) return status @@ -64,9 +64,18 @@ class Datacenter(object): Will also implement resource bookkeeping in later versions. """ - def __init__(self, name): + DC_COUNTER = 1 + + def __init__(self, label, metadata={}): self.net = None # DCNetwork to which we belong - self.name = name + # each node (DC) has a short internal name used by Mininet + # this is caused by Mininets naming limitations for swtiches etc. + self.name = "dc%d" % Datacenter.DC_COUNTER + Datacenter.DC_COUNTER += 1 + # use this for user defined names that can be longer than self.name + self.label = label + # dict to store arbitrary metadata (e.g. latitude and longitude) + self.metadata = metadata self.switch = None # first prototype assumes one "bigswitch" per DC self.containers = {} # keep track of running containers @@ -90,7 +99,7 @@ class Datacenter(object): def start(self): pass - def startCompute(self, name, image=None, network=None): + def startCompute(self, name, image=None, command=None,network=None): """ Create a new container as compute resource and connect it to this data center. @@ -108,7 +117,7 @@ class Datacenter(object): 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) + d = self.net.addDocker("%s" % (name), dimage=image, dcmd=command) self.net.addLink(d, self.switch, params1=network) # do bookkeeping self.containers[name] = d @@ -133,4 +142,16 @@ class Datacenter(object): Return a list of all running containers assigned to this data center. """ - return self.containers.itervalues() + return list(self.containers.itervalues()) + + def getStatus(self): + """ + Return a dict with status information about this DC. + """ + return { + "label": self.label, + "internalname": self.name, + "switch": self.switch.name, + "n_running_containers": len(self.containers), + "metadata": self.metadata + }