Source code for cfd.nodes

from cfd.modules import CFDModule


class CFDException(Exception):
    pass


class CFDNodeMetaclass(type):
    def __new__(upperattr_metaclass, future_class_name,
                future_class_parents, future_class_attr):

        for key, value in future_class_attr.items():
            if key == "modules":
                del future_class_attr[key]
                future_class_attr["modules_%s" % future_class_name.lower()] = value

        return type.__new__(upperattr_metaclass, future_class_name, future_class_parents, future_class_attr)


[docs]class CFDNode(object): """ Base class for nodes. Nodes inherit from this class or other nodes that eventually inherit from CFDNode. Example:: class InternalServer(CFDNode): modules = [ CFDFile("/etc/motd", content="An Acme Ltd server"), ] class WebServer(InternalServer): modules = [ Nginx(), # Use the nginx module with default settings ] class ASpecificServer(WebServer): modules = [ NginxVirtualHost("domain.com"), ] """ __metaclass__ = CFDNodeMetaclass def __init__(self, hostname, facts): self.hostname = hostname self.facts = facts self.modules = [] for method in dir(self): if method.startswith("modules_"): try: mthd = getattr(self, method) if callable(mthd): mthd = mthd() for item in mthd: self.add(item) except Exception as e: raise CFDException(u"%s: %s" % (type(e), e.message)) if not self.modules: raise Exception("Please define at least one module for %s" % hostname) def add(self, module): self.modules.append(module) def as_dict(self): return { 'hostname': self.hostname, 'facts': self.facts, 'items': [item.as_dict() for item in self.modules], }

This Page