6ddd45955ac0a26e8204e91e68b1f8231d2a4cf5
2 Base classes needed for resource models support.
6 LOG
= logging
.getLogger("resourcemodel")
7 LOG
.setLevel(logging
.DEBUG
)
10 class ResourceModelRegistrar(object):
12 def __init__(self
, dc_emulation_max_cpu
):
13 self
.e_cpu
= dc_emulation_max_cpu
14 # pointer to all resource models assigned to DCs
15 self
._resource
_models
= dict()
16 LOG
.info("Resource model registrar created with dc_emulation_max_cpu=%r" % dc_emulation_max_cpu
)
18 def register(self
, dc
, rm
):
19 if dc
in self
._resource
_models
:
20 raise Exception("There is already an resource model assigned to this DC.")
21 self
._resource
_models
[dc
] = rm
22 LOG
.info("Registrar: Added resource model: %r" % rm
)
25 class ResourceFlavor(object):
27 def __init__(self
, name
, metrics
):
29 self
.metrics
= metrics
30 LOG
.debug("Create flavor %r with metrics: %r" % (name
, metrics
))
33 class BaseResourceModel(object):
37 self
._initDefaultFlavors
()
38 LOG
.info("Resource model %r initialized" % self
)
41 return self
.__class
__.__name
__
43 def _initDefaultFlavors(self
):
44 # initialize some default flavours (inspired by OpenStack)
45 self
.addFlavour(ResourceFlavor(
46 "tiny", {"compute": 1, "memory": 32, "disk": 1}))
47 self
.addFlavour(ResourceFlavor(
48 "small", {"compute": 4, "memory": 128, "disk": 20}))
49 self
.addFlavour(ResourceFlavor(
50 "medium", {"compute": 8, "memory": 256, "disk": 40}))
51 self
.addFlavour(ResourceFlavor(
52 "large", {"compute": 16, "memory": 512, "disk": 80}))
53 self
.addFlavour(ResourceFlavor(
54 "xlarge", {"compute": 32, "memory": 1024, "disk": 160}))
56 def addFlavour(self
, fl
):
57 if fl
.name
in self
._flavors
:
58 raise Exception("Flavor with name %r already exists!" % fl
.name
)
59 self
._flavors
[fl
.name
] = fl
61 def allocate(self
, name
, flavor_name
):
62 LOG
.info("RM-ALLOCATE: %r with flavor: %r" % (name
, flavor_name
))
66 LOG
.info("RM-FREE: %r" % name
)