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=643236129b5b3393ca85e575619d0c7bea6aedab;hb=a769d95a4ee55df7b12d93c10c71d29dff62cbeb;hp=6ddd45955ac0a26e8204e91e68b1f8231d2a4cf5;hpb=42f08becf9e88b1765793977d581f08c3ebf641f;p=osm%2Fvim-emu.git diff --git a/src/emuvim/dcemulator/resourcemodel/__init__.py b/src/emuvim/dcemulator/resourcemodel/__init__.py index 6ddd459..6432361 100644 --- a/src/emuvim/dcemulator/resourcemodel/__init__.py +++ b/src/emuvim/dcemulator/resourcemodel/__init__.py @@ -19,22 +19,42 @@ class ResourceModelRegistrar(object): if dc in self._resource_models: raise Exception("There is already an resource model assigned to this DC.") self._resource_models[dc] = rm + rm.registrar = self LOG.info("Registrar: Added resource model: %r" % rm) + @property + def num_models(self): + return len(self._resource_models) + + @property + def resource_models(self): + return list(self._resource_models.itervalues()) -class ResourceFlavor(object): +class ResourceFlavor(object): + """ + Simple class that represents resource flavors (c.f. OpenStack). + Can contain arbitrary metrics. + """ def __init__(self, name, metrics): self.name = name - self.metrics = metrics + self._metrics = metrics LOG.debug("Create flavor %r with metrics: %r" % (name, metrics)) + def get(self, metric_key): + return self._metrics.get(metric_key) + class BaseResourceModel(object): + """ + Base class for a resource limitation model. + Has to be extended by a real resource model implementtion. + """ def __init__(self): self._flavors=dict() self._initDefaultFlavors() + self.registrar = None # pointer to registrar LOG.info("Resource model %r initialized" % self) def __repr__(self): @@ -54,14 +74,30 @@ class BaseResourceModel(object): "xlarge", {"compute": 32, "memory": 1024, "disk": 160})) def addFlavour(self, fl): + """ + Add a new flavor to the resource model. + :param fl: flavor object + :return: None + """ 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 + """ + This method has to be overwritten by a real resource model. + :param name: Name of the started compute instance. + :param flavor_name: Name of the flavor to be allocated. + :return: 3-tuple: (CPU-fraction, Mem-limit, Disk-limit) + """ + LOG.warning("Allocating in BaseResourceModel: %r with flavor: %r" % (name, flavor_name)) + return -1.0, -1.0, -1.0 # return invalid values to indicate that this RM is a dummy def free(self, name): - LOG.info("RM-FREE: %r" % name) - + """ + This method has to be overwritten by a real resource model. + :param name: Name of the compute instance that is stopped. + :return: True/False + """ + LOG.warning("Free in BaseResourceModel: %r" % name) + return True