X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=src%2Femuvim%2Fdcemulator%2Fresourcemodel%2F__init__.py;fp=src%2Femuvim%2Fdcemulator%2Fresourcemodel%2F__init__.py;h=6ddd45955ac0a26e8204e91e68b1f8231d2a4cf5;hb=42f08becf9e88b1765793977d581f08c3ebf641f;hp=0000000000000000000000000000000000000000;hpb=4282d1a5e61b04fbfa9e2a1e0226c97c85668583;p=osm%2Fvim-emu.git diff --git a/src/emuvim/dcemulator/resourcemodel/__init__.py b/src/emuvim/dcemulator/resourcemodel/__init__.py new file mode 100644 index 0000000..6ddd459 --- /dev/null +++ b/src/emuvim/dcemulator/resourcemodel/__init__.py @@ -0,0 +1,67 @@ +""" +Base classes needed for resource models support. +""" + +import logging +LOG = logging.getLogger("resourcemodel") +LOG.setLevel(logging.DEBUG) + + +class ResourceModelRegistrar(object): + + def __init__(self, dc_emulation_max_cpu): + self.e_cpu = dc_emulation_max_cpu + # pointer to all resource models assigned to DCs + self._resource_models = dict() + LOG.info("Resource model registrar created with dc_emulation_max_cpu=%r" % dc_emulation_max_cpu) + + def register(self, dc, rm): + if dc in self._resource_models: + raise Exception("There is already an resource model assigned to this DC.") + self._resource_models[dc] = rm + LOG.info("Registrar: Added resource model: %r" % rm) + + +class ResourceFlavor(object): + + def __init__(self, name, metrics): + self.name = name + self.metrics = metrics + LOG.debug("Create flavor %r with metrics: %r" % (name, metrics)) + + +class BaseResourceModel(object): + + def __init__(self): + self._flavors=dict() + self._initDefaultFlavors() + LOG.info("Resource model %r initialized" % self) + + def __repr__(self): + return self.__class__.__name__ + + def _initDefaultFlavors(self): + # initialize some default flavours (inspired by OpenStack) + self.addFlavour(ResourceFlavor( + "tiny", {"compute": 1, "memory": 32, "disk": 1})) + self.addFlavour(ResourceFlavor( + "small", {"compute": 4, "memory": 128, "disk": 20})) + self.addFlavour(ResourceFlavor( + "medium", {"compute": 8, "memory": 256, "disk": 40})) + self.addFlavour(ResourceFlavor( + "large", {"compute": 16, "memory": 512, "disk": 80})) + self.addFlavour(ResourceFlavor( + "xlarge", {"compute": 32, "memory": 1024, "disk": 160})) + + def addFlavour(self, fl): + if fl.name in self._flavors: + raise Exception("Flavor with name %r already exists!" % fl.name) + self._flavors[fl.name] = fl + + def allocate(self, name, flavor_name): + LOG.info("RM-ALLOCATE: %r with flavor: %r" % (name, flavor_name)) + return 0.0, 0.0, 0.0 + + def free(self, name): + LOG.info("RM-FREE: %r" % name) +