diff options
| author | Joshua Harlow <harlowja@yahoo-inc.com> | 2012-06-19 15:39:54 -0700 | 
|---|---|---|
| committer | Joshua Harlow <harlowja@yahoo-inc.com> | 2012-06-19 15:39:54 -0700 | 
| commit | e731e0b9a06f27d705a0635e848e68f00f2b16cc (patch) | |
| tree | 3d363e0e85c5452fad00b7f303b4cb631ceb45fa | |
| parent | a8241225f408b8df258af0e6ea0820fb6894ea29 (diff) | |
| download | vyos-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.py | 87 | ||||
| -rw-r--r-- | cloudinit/util.py | 11 | 
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}. | 
