X-Git-Url: https://osm.etsi.org/gitweb/?p=osm%2Fvim-emu.git;a=blobdiff_plain;f=src%2Femuvim%2Fdcemulator%2Fnode.py;h=87085d8ae940608bd9ce5f133f639ca0dc49e769;hp=5a9c048bdc3fe8d465912b02af68fa76c3cd9403;hb=0719f4efe35a1ef06fe2751228e63d38b855967c;hpb=72f09885db3935e77901c3dee132cb176b927c7b diff --git a/src/emuvim/dcemulator/node.py b/src/emuvim/dcemulator/node.py index 5a9c048..87085d8 100755 --- a/src/emuvim/dcemulator/node.py +++ b/src/emuvim/dcemulator/node.py @@ -50,6 +50,7 @@ class EmulatorCompute(Docker): self, name, dimage, **kwargs): self.datacenter = kwargs.get("datacenter") # pointer to current DC self.flavor_name = kwargs.get("flavor_name") + self._network_state_cache = None LOG.debug("Starting compute instance %r in data center %r" % (name, str(self.datacenter))) # call original Docker.__init__ @@ -71,16 +72,21 @@ class EmulatorCompute(Docker): intf_dict = {'intf_name': str(i), 'ip': "{0}/{1}".format(i.IP(), i.prefixLen), 'netmask': i.prefixLen, 'mac': i.MAC(), 'up': i.isUp(), 'status': i.status(), 'dc_portname': dc_port_name} networkStatusList.append(intf_dict) - return networkStatusList def getStatus(self): """ Helper method to receive information about this compute instance. """ + # inspect container + cinspect = self.dcli.inspect_container(self.dc) + # inspect networking (slow, so do only once) + if self._network_state_cache is None: + self._network_state_cache = self.getNetworkStatus() + # build status status = {} status["name"] = self.name - status["network"] = self.getNetworkStatus() + status["network"] = self._network_state_cache status["docker_network"] = self.dcinfo['NetworkSettings']['IPAddress'] status["image"] = self.dimage status["flavor_name"] = self.flavor_name @@ -90,11 +96,10 @@ class EmulatorCompute(Docker): status["cpuset"] = self.resources.get('cpuset_cpus') status["mem_limit"] = self.resources.get('mem_limit') status["memswap_limit"] = self.resources.get('memswap_limit') - status["state"] = self.dcli.inspect_container(self.dc)["State"] - status["id"] = self.dcli.inspect_container(self.dc)["Id"] - status["short_id"] = self.dcli.inspect_container(self.dc)["Id"][:12] - status["hostname"] = self.dcli.inspect_container(self.dc)[ - "Config"]['Hostname'] + status["state"] = cinspect["State"] + status["id"] = cinspect["Id"] + status["short_id"] = cinspect["Id"][:12] + status["hostname"] = cinspect["Config"]['Hostname'] status["datacenter"] = (None if self.datacenter is None else self.datacenter.label) @@ -231,6 +236,7 @@ class Datacenter(object): :return: """ assert name is not None + default_net = {"id": "emu0"} # no duplications if name in [c.name for c in self.net.getAllContainers()]: raise Exception("Container with name %s already exists." % name) @@ -238,13 +244,17 @@ class Datacenter(object): if image is None: image = "ubuntu:trusty" if network is None: - network = {} # {"ip": "10.0.0.254/8"} + network = {} if isinstance(network, dict): + if len(network) < 1: + # create at least one default interface + network = default_net # if we have only one network, put it in a list network = [network] if isinstance(network, list): if len(network) < 1: - network.append({}) + # create at least one default interface + network.append(default_net) # apply hard-set resource limits=0 cpu_percentage = params.get('cpu_percent') @@ -256,7 +266,7 @@ class Datacenter(object): properties['VNF_NAME'] = name # create the container d = self.net.addDocker( - "%s" % (name), + str(name), dimage=image, dcmd=command, datacenter=self, @@ -293,7 +303,6 @@ class Datacenter(object): cls=Link, intfName1=nw.get('id')) # do bookkeeping self.containers[name] = d - return d # we might use UUIDs for naming later on def stopCompute(self, name):