def compute_action_start(self, dc_name, compute_name):
# TODO what to return UUID / given name / internal name ?
logging.debug("RPC CALL: compute start")
- if dc_name in self.dcs:
- return self.dcs[dc_name].addCompute(compute_name)
+ try:
+ return self.dcs.get(dc_name).startCompute(compute_name)
+ except Exception as ex:
+ logging.exception("RPC error.")
+ return ex.message
def compute_action_stop(self, dc_name, compute_name):
logging.info("RPC CALL: compute stop")
- if dc_name in self.dcs:
- return self.dcs[dc_name].removeCompute(compute_name)
+ try:
+ return self.dcs.get(dc_name).stopCompute(compute_name)
+ except Exception as ex:
+ logging.exception("RPC error.")
+ return ex.message
def compute_list(self, dc_name):
logging.info("RPC CALL: compute list")
- if dc_name in self.dcs:
- return [(c.name, c.IP()) for c in self.dcs[dc_name].listCompute()]
+ try:
+ return [(c.name, c.IP())
+ for c in self.dcs.get(dc_name).listCompute()]
+ except Exception as ex:
+ logging.exception("RPC error.")
+ return ex.message
def compute_status(self, dc_name, compute_name):
logging.info("RPC CALL: compute status")
- # TODO implement
+ try:
+ return self.dcs.get(
+ dc_name).containers.get(compute_name).getStatus()
+ except Exception as ex:
+ logging.exception("RPC error.")
+ return ex.message
from mininet.log import setLogLevel, info
from mininet.link import TCLink, Link
-from node import Datacenter
+from node import Datacenter, EmulatorCompute
class DCNetwork(object):
"""
Wrapper for addDocker method provided by Dockernet.
"""
- return self.mnet.addDocker( name, **params)
+ return self.mnet.addDocker( name, cls=EmulatorCompute, **params)
def removeDocker( self, name, **params):
"""
Distributed Cloud Emulator (dcemulator)
(c) 2015 by Manuel Peuster <manuel.peuster@upb.de>
"""
+from mininet.node import Docker
import logging
DCDPID_BASE = 1000 # start of switch dpid's used for data center switches
+class EmulatorCompute(Docker):
+ """
+ Emulator specific compute node class.
+ Inherits from Dockernet's Docker host class.
+ Represents a single container connected to a (logical)
+ data center.
+ We can add emulator specific helper functions to it.
+ """
+
+ def __init__(
+ self, name, dimage, **kwargs):
+ logging.debug("Create EmulatorCompute instance: %s" % name)
+
+ # call original Docker.__init__
+ Docker.__init__(self, name, dimage, **kwargs)
+
+ def getNetworkStatus(self):
+ """
+ Helper method to receive information about the virtual networks
+ this compute instance is connected to.
+ """
+ return None
+
+ def getStatus(self):
+ """
+ Helper method to receive information about this compute instance.
+ """
+ return None
+
+
class Datacenter(object):
"""
Represents a logical data center to which compute resources
def start(self):
pass
- def addCompute(self, name, image=None, network=None):
+ def startCompute(self, name, image=None, network=None):
"""
Create a new container as compute resource and connect it to this
data center.
self.containers[name] = d
return name # we might use UUIDs for naming later on
- def removeCompute(self, name):
+ def stopCompute(self, name):
"""
Stop and remove a container from this data center.
"""