summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoshua Harlow <harlowja@yahoo-inc.com>2012-06-19 15:39:54 -0700
committerJoshua Harlow <harlowja@yahoo-inc.com>2012-06-19 15:39:54 -0700
commite731e0b9a06f27d705a0635e848e68f00f2b16cc (patch)
tree3d363e0e85c5452fad00b7f303b4cb631ceb45fa
parenta8241225f408b8df258af0e6ea0820fb6894ea29 (diff)
downloadvyos-cloud-init-e731e0b9a06f27d705a0635e848e68f00f2b16cc.tar.gz
vyos-cloud-init-e731e0b9a06f27d705a0635e848e68f00f2b16cc.zip
1. Cleanup variable names to match more of the pythonic underscore pattern
2. Seperate config loading from the actual final 'merging' process. a. A util function will now merge multiple config dictionaries after they have all been loaded instead of loading and merging at the same time, which can get confusing to follow.
-rw-r--r--cloudinit/stages.py87
-rw-r--r--cloudinit/util.py11
2 files changed, 58 insertions, 40 deletions
diff --git a/cloudinit/stages.py b/cloudinit/stages.py
index 6eb211db..558de035 100644
--- a/cloudinit/stages.py
+++ b/cloudinit/stages.py
@@ -156,20 +156,27 @@ class Init(object):
# None check so that we don't keep on re-loading if empty
if self._cfg is None:
self._cfg = self._read_cfg(extra_fns)
- LOG.debug("Loaded init config %s", self._cfg)
+ LOG.debug("Loaded %s config %s", util.obj_name(self), self._cfg)
def _read_cfg(self, extra_fns):
- builtin_cfg = util.get_builtin_cfg()
- try:
- conf = util.get_base_cfg(builtin=builtin_cfg)
- except Exception:
- conf = builtin_cfg
- m_cfg = util.mergedict(conf, self._read_cfg_old())
+ # Read extra files provided (if any)
+ i_cfgs = []
if extra_fns:
for fn in extra_fns:
- # Any extras over-ride the existing configs
- m_cfg = util.mergedict(util.read_conf(fn), m_cfg)
- return m_cfg
+ try:
+ fn_cfg = util.read_conf(fn)
+ i_cfgs.append(fn_cfg)
+ except:
+ util.logexc(LOG, ("Failed loading of additional"
+ " configuration from %s"), fn)
+ # Now read in the built-in + base + old
+ try:
+ conf = util.get_base_cfg(builtin=util.get_builtin_cfg())
+ except Exception:
+ conf = util.get_builtin_cfg()
+ i_cfgs.append(conf)
+ i_cfgs.append(self._read_cfg_old())
+ return util.mergemanydict(i_cfgs)
def _restore_from_cache(self):
pickled_fn = self.paths.get_ipath_cur('obj_pkl')
@@ -371,46 +378,46 @@ class Init(object):
class Transforms(object):
- def __init__(self, init, cfgfile=None):
+ def __init__(self, init, cfg_files=None):
self.datasource = init.fetch()
- self.cfgfile = cfgfile
- self.basecfg = copy.deepcopy(init.cfg)
+ self.cfg_files = cfg_files
+ self.base_cfg = copy.deepcopy(init.cfg)
self.init = init
# Created on first use
- self._cachedcfg = None
+ self._cached_cfg = None
@property
def cfg(self):
- if self._cachedcfg is None:
- self._cachedcfg = self._get_config(self.cfgfile)
- LOG.debug("Loading module config %s", self._cachedcfg)
- return self._cachedcfg
+ # None check to avoid empty case
+ if self._cached_cfg is None:
+ self._cached_cfg = self._get_config()
+ LOG.debug("Loading %s config %s",
+ util.obj_name(self), self._cached_cfg)
+ return self._cached_cfg
+
+ def _get_config(self):
+ t_cfgs = []
+ if self.cfg_files:
+ for fn in self.cfg_files:
+ try:
+ t_cfgs.append(util.read_conf(fn))
+ except:
+ util.logexc(LOG, ("Failed loading of configuration"
+ " from %s"), fn)
- def _get_config(self, cfgfile):
- mcfg = None
-
- if self.cfgfile:
+ if self.datasource:
try:
- mcfg = util.read_conf(cfgfile)
+ d_cfg = self.datasource.get_config_obj()
+ if d_cfg:
+ t_cfgs.append(d_cfg)
except:
- util.logexc(LOG, ("Failed loading of cloud config '%s'. "
- "Continuing with an empty config."), cfgfile)
- if not mcfg:
- mcfg = {}
+ util.logexc(LOG, ("Failed loading of datasource"
+ " config object from %s"), self.datasource)
+
+ if self.base_cfg:
+ t_cfgs.append(self.base_cfg)
- ds_cfg = None
- try:
- ds_cfg = self.datasource.get_config_obj()
- except:
- util.logexc(LOG, "Failed loading of datasource config object.")
- if not ds_cfg:
- ds_cfg = {}
-
- mcfg = util.mergedict(mcfg, ds_cfg)
- if self.basecfg:
- return util.mergedict(mcfg, self.basecfg)
- else:
- return mcfg
+ return util.mergemanydict(t_cfgs)
def _read_transforms(self, name):
diff --git a/cloudinit/util.py b/cloudinit/util.py
index 164bcea8..91d20a76 100644
--- a/cloudinit/util.py
+++ b/cloudinit/util.py
@@ -360,6 +360,7 @@ def get_cfg_by_path(yobj, keyp, default=None):
def fixup_output(cfg, mode):
(outfmt, errfmt) = get_output_cfg(cfg, mode)
redirect_output(outfmt, errfmt)
+ return (outfmt, errfmt)
# redirect_output(outfmt, errfmt, orig_out, orig_err)
@@ -448,6 +449,16 @@ def obj_name(obj):
return obj_name(obj.__class__)
+def mergemanydict(srcs, reverse=False):
+ if reverse:
+ srcs = reversed(srcs)
+ m_cfg = {}
+ for a_cfg in srcs:
+ if a_cfg:
+ m_cfg = mergedict(m_cfg, a_cfg)
+ return m_cfg
+
+
def mergedict(src, cand):
"""
Merge values from C{cand} into C{src}.