5 class Resource(object):
6 # static template for resource filters
9 # static template for resource attributes
13 def _register_filter(cls, attr):
14 """ Resource subclasses will invoke this method to add a
16 cls._filters[attr.name] = attr
19 def _register_attributes(cls, attr):
20 """ Resource subclasses will invoke this method to add a
22 cls._attributes[attr.name] = attr
26 return copy.deepcopy(cls._filters.values())
29 def get_attributes(cls):
30 return copy.deepcopy(cls._attributes.values())
32 def __init__(self, ec, guid):
34 self._ec = weakref.ref(ec)
35 self._connections = set()
36 # the resource instance gets a copy of all attributes
38 self._attrs = copy.deepcopy(self._attributes)
42 self._logger = logging.getLogger("neco.execution.resource.Resource.%s" %
44 self._logger.setLevel(getattr(logging, loglevel.upper()))
54 def connect(self, guid):
55 if (self._validate_connection(guid)):
56 self._connections.add(guid)
58 def discover(self, filters):
61 def provision(self, filters):
64 def set(self, name, value):
65 attr = self._attrs[name]
69 attr = self._attrs[name]
72 def start_after(self, time, after_status, guid):
75 def stop_after(self, time, after_status, guid):
78 def set_after(self, name, value, time, after_status, guid):
84 def _validate_connection(self, guid):
88 class ResourceFactory(object):
90 self._resource_types = dict()
92 def register_type(self, rtype, rclass):
93 self._resource_types[rtype] = rclass
95 def create(self, rtype, ec, guid):
96 rclass = self._resource[rtype]
97 return rclass(ec, guid)