Fixup CloudConfig by using new module functions and calling objects.

This commit is contained in:
Joshua Harlow
2012-06-08 18:42:06 -07:00
parent 57da61791c
commit 692065dd76

View File

@@ -16,6 +16,7 @@ from cloudinit import parts
from cloudinit import sources from cloudinit import sources
from cloudinit import util from cloudinit import util
from cloudinit import user_data from cloudinit import user_data
from cloudinit import handlers
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)
@@ -168,7 +169,6 @@ class CloudInit(object):
else: else:
self.ds_deps = [sources.DEP_FILESYSTEM, sources.DEP_NETWORK] self.ds_deps = [sources.DEP_FILESYSTEM, sources.DEP_NETWORK]
self.paths = CloudPaths(self) self.paths = CloudPaths(self)
self.sems = CloudSemaphores(self.paths)
self.cfg = self._read_cfg() self.cfg = self._read_cfg()
def _read_cfg_old(self): def _read_cfg_old(self):
@@ -294,16 +294,14 @@ class CloudInit(object):
handlers = CloudHandlers(self) handlers = CloudHandlers(self)
# Add handlers in cdir # Add handlers in cdir
for fname in glob.glob(os.path.join(cdir, "*.py")): potential_handlers = parts.find_module_files(cdir)
if not os.path.isfile(fname): for (fname, modname) in potential_handlers.iteritems():
continue
modname = os.path.basename(fname)[0:-3]
try: try:
mod = parts.fixup_module(importer.import_module(modname)) mod = parts.fixup_module(importer.import_module(modname))
types = handlers.register(mod) types = handlers.register(mod)
LOG.debug("Added handler for [%s] from %s", types, fname) LOG.debug("Added handler for [%s] from %s", types, fname)
except: except:
LOG.exception("Failed to register handler in %s", fname) LOG.exception("Failed to register handler from %s", fname)
def_handlers = handlers.register_defaults() def_handlers = handlers.register_defaults()
if def_handlers: if def_handlers:
@@ -391,47 +389,46 @@ class CloudHandlers(object):
class CloudConfig(object): class CloudConfig(object):
cfgfile = None
cfg = None
def __init__(self, cfgfile, cloud=None, ds_deps=None): def __init__(self, cfgfile, cloud):
if cloud == None: self.cloud = cloud
self.cloud = cloudinit.CloudInit(ds_deps) self.cfg = self._get_config(cfgfile)
self.cloud.get_data_source() self.paths = cloud.paths
else: self.sems = CloudSemaphores(self.paths)
self.cloud = cloud
self.cfg = self.get_config_obj(cfgfile)
def get_config_obj(self, cfgfile): def _get_config(self, cfgfile):
cfg = None
try: try:
cfg = util.read_conf(cfgfile) cfg = util.read_conf(cfgfile)
except: except:
# TODO: this 'log' could/should be passed in LOG.exception(("Failed loading of cloud config '%s'. "
cloudinit.log.critical("Failed loading of cloud config '%s'. " "Continuing with empty config."), cfgfile)
"Continuing with empty config\n" % cfgfile) if not cfg:
cloudinit.log.debug(traceback.format_exc() + "\n")
cfg = None
if cfg is None:
cfg = {} cfg = {}
ds_cfg = None
try: try:
ds_cfg = self.cloud.datasource.get_config_obj() ds_cfg = self.cloud.datasource.get_config_obj()
except: except:
LOG.exception("Failed loading of datasource config.")
if not ds_cfg:
ds_cfg = {} ds_cfg = {}
cfg = util.mergedict(cfg, ds_cfg) cfg = util.mergedict(cfg, ds_cfg)
return(util.mergedict(cfg, self.cloud.cfg)) cloud_cfg = self.cloud.cfg or {}
return util.mergedict(cfg, cloud_cfg)
def handle(self, name, args, freq=None): def extract(self, name):
try: modname = handlers.form_module_name(name)
mod = __import__("cc_" + name.replace("-", "_"), globals()) if not modname:
def_freq = getattr(mod, "frequency", per_instance) return None
handler = getattr(mod, "handle") return handlers.fixup_module(importer.import_module(modname))
if not freq: def handle(self, name, mod, args, freq=None):
freq = def_freq def_freq = mod.frequency
if not freq:
self.cloud.sem_and_run("config-" + name, freq, handler, freq = def_freq
[name, self.cfg, self.cloud, cloudinit.log, args]) c_name = "config-%s" % (name)
except: real_args = [name, self.cfg, self.cloud, LOG, args]
raise return self.sems.run_functor(c_name, freq, mod.handle, real_args)