import copy
import functools
+import inspect
import logging
+import os
+import pkgutil
import weakref
-_reschedule_delay = "1s"
+reschedule_delay = "0.5s"
class ResourceAction:
DEPLOY = 0
"""
reschedule = False
- delay = _reschedule_delay
+ delay = reschedule_delay
# check state and time elapsed on all RMs
for guid in group:
"""
reschedule = False
- delay = _reschedule_delay
+ delay = reschedule_delay
## evaluate if set conditions are met
"""
reschedule = False
- delay = _reschedule_delay
+ delay = reschedule_delay
## evaluate if set conditions are met
reschedule = True
self.debug("---- RESCHEDULING START ---- state %s " % self.state )
else:
- self.debug("---- START CONDITIONS ---- %s" %
- self.conditions.get(ResourceAction.START))
+ start_conditions = self.conditions.get(ResourceAction.START, [])
+
+ self.debug("---- START CONDITIONS ---- %s" % start_conditions)
# Verify all start conditions are met
- start_conditions = self.conditions.get(ResourceAction.START, [])
for (group, state, time) in start_conditions:
+ # Uncomment for debug
+ #unmet = []
+ #for guid in group:
+ # rm = self.ec.get_resource(guid)
+ # unmet.append((guid, rm._state))
+ #
+ #self.debug("---- WAITED STATES ---- %s" % unmet )
+
reschedule, delay = self._needs_reschedule(group, state, time)
if reschedule:
break
"""
reschedule = False
- delay = _reschedule_delay
+ delay = reschedule_delay
## evaluate if set conditions are met
rclass = cls._resource_types[rtype]
return rclass(ec, guid)
+def populate_factory():
+ for rclass in find_types():
+ ResourceFactory.register_type(rclass)
+
+def find_types():
+ search_path = os.environ.get("NEPI_SEARCH_PATH", "")
+ search_path = set(search_path.split(" "))
+
+ import neco.resources
+ path = os.path.dirname(neco.resources.__file__)
+ search_path.add(path)
+
+ types = []
+
+ for importer, modname, ispkg in pkgutil.walk_packages(search_path):
+ loader = importer.find_module(modname)
+ try:
+ module = loader.load_module(loader.fullname)
+ for attrname in dir(module):
+ if attrname.startswith("_"):
+ continue
+
+ attr = getattr(module, attrname)
+
+ if attr == ResourceManager:
+ continue
+
+ if not inspect.isclass(attr):
+ continue
+
+ if issubclass(attr, ResourceManager):
+ types.append(attr)
+ except:
+ import traceback
+ err = traceback.format_exc()
+ logger = logging.getLogger("Resource.find_types()")
+ logger.error("Error while lading Resource Managers %s" % err)
+
+ return types
+
+