improved CLI
[osm/vim-emu.git] / emuvim / dcemulator / node.py
index aeac665..de64d69 100644 (file)
@@ -21,6 +21,7 @@ class EmulatorCompute(Docker):
     def __init__(
             self, name, dimage, **kwargs):
         logging.debug("Create EmulatorCompute instance: %s" % name)
     def __init__(
             self, name, dimage, **kwargs):
         logging.debug("Create EmulatorCompute instance: %s" % name)
+        self.datacenter = None  # pointer to current DC
 
         # call original Docker.__init__
         Docker.__init__(self, name, dimage, **kwargs)
 
         # call original Docker.__init__
         Docker.__init__(self, name, dimage, **kwargs)
@@ -30,13 +31,29 @@ class EmulatorCompute(Docker):
         Helper method to receive information about the virtual networks
         this compute instance is connected to.
         """
         Helper method to receive information about the virtual networks
         this compute instance is connected to.
         """
-        return None
+        # format list of tuples (name, Ip, MAC, isUp, status)
+        return [(str(i), i.IP(), i.MAC(), i.isUp(), i.status())
+                for i in self.intfList()]
 
     def getStatus(self):
         """
         Helper method to receive information about this compute instance.
         """
 
     def getStatus(self):
         """
         Helper method to receive information about this compute instance.
         """
-        return None
+        status = {}
+        status["name"] = self.name
+        status["network"] = self.getNetworkStatus()
+        status["image"] = self.dimage
+        status["cpu_quota"] = self.cpu_quota
+        status["cpu_period"] = self.cpu_period
+        status["cpu_shares"] = self.cpu_shares
+        status["cpuset"] = self.cpuset
+        status["mem_limit"] = self.mem_limit
+        status["memswap_limit"] = self.memswap_limit
+        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)
+        return status
 
 
 class Datacenter(object):
 
 
 class Datacenter(object):
@@ -82,6 +99,9 @@ class Datacenter(object):
         a single container can be connected.
         """
         assert name is not None
         a single container can be connected.
         """
         assert name is not None
+        # no duplications
+        if name in [c.name for c in self.net.getAllContainers()]:
+            raise Exception("Container with name %s already exists." % name)
         # set default parameter
         if image is None:
             image = "ubuntu"
         # set default parameter
         if image is None:
             image = "ubuntu"
@@ -90,14 +110,18 @@ class Datacenter(object):
         # create the container and connect it to the given network
         d = self.net.addDocker("%s" % (name), dimage=image)
         self.net.addLink(d, self.switch, params1=network)
         # create the container and connect it to the given network
         d = self.net.addDocker("%s" % (name), dimage=image)
         self.net.addLink(d, self.switch, params1=network)
+        # do bookkeeping
         self.containers[name] = d
         self.containers[name] = d
+        d.datacenter = self
         return name  # we might use UUIDs for naming later on
 
     def stopCompute(self, name):
         """
         Stop and remove a container from this data center.
         """
         return name  # we might use UUIDs for naming later on
 
     def stopCompute(self, name):
         """
         Stop and remove a container from this data center.
         """
-        assert name in self.containers
+        assert name is not None
+        if name not in self.containers:
+            raise Exception("Container with name %s not found." % name)
         self.net.removeLink(
             link=None, node1=self.containers[name], node2=self.switch)
         self.net.removeDocker("%s" % (name))
         self.net.removeLink(
             link=None, node1=self.containers[name], node2=self.switch)
         self.net.removeDocker("%s" % (name))