Fixup CloudConfig by using new module functions and calling objects.
This commit is contained in:
@@ -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 = cloudinit.CloudInit(ds_deps)
|
|
||||||
self.cloud.get_data_source()
|
|
||||||
else:
|
|
||||||
self.cloud = cloud
|
self.cloud = cloud
|
||||||
self.cfg = self.get_config_obj(cfgfile)
|
self.cfg = self._get_config(cfgfile)
|
||||||
|
self.paths = cloud.paths
|
||||||
|
self.sems = CloudSemaphores(self.paths)
|
||||||
|
|
||||||
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))
|
||||||
|
|
||||||
|
def handle(self, name, mod, args, freq=None):
|
||||||
|
def_freq = mod.frequency
|
||||||
if not freq:
|
if not freq:
|
||||||
freq = def_freq
|
freq = def_freq
|
||||||
|
c_name = "config-%s" % (name)
|
||||||
self.cloud.sem_and_run("config-" + name, freq, handler,
|
real_args = [name, self.cfg, self.cloud, LOG, args]
|
||||||
[name, self.cfg, self.cloud, cloudinit.log, args])
|
return self.sems.run_functor(c_name, freq, mod.handle, real_args)
|
||||||
except:
|
|
||||||
raise
|
|
||||||
|
|||||||
Reference in New Issue
Block a user