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__
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
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)
: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)
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')