summaryrefslogtreecommitdiff
path: root/cloudinit/util.py
diff options
context:
space:
mode:
authorJoshua Harlow <harlowja@yahoo-inc.com>2013-03-06 19:36:31 -0800
committerJoshua Harlow <harlowja@yahoo-inc.com>2013-03-06 19:36:31 -0800
commit1e4f41e900a9c942354428b0f312428af00031ce (patch)
treeb43a40ae2d63817998f6ed1ba3235170bace6c80 /cloudinit/util.py
parentfc6aa5aa54ee35ff0a3eff823bae0d3cf9b34bc1 (diff)
downloadvyos-cloud-init-1e4f41e900a9c942354428b0f312428af00031ce.tar.gz
vyos-cloud-init-1e4f41e900a9c942354428b0f312428af00031ce.zip
Make conf.d and the default merging use the new merging algos.
Diffstat (limited to 'cloudinit/util.py')
-rw-r--r--cloudinit/util.py25
1 files changed, 12 insertions, 13 deletions
diff --git a/cloudinit/util.py b/cloudinit/util.py
index 73bf6304..e5c6f4ea 100644
--- a/cloudinit/util.py
+++ b/cloudinit/util.py
@@ -519,23 +519,22 @@ def mergemanydict(srcs, reverse=False):
if reverse:
srcs = reversed(srcs)
m_cfg = {}
+ merge_how = [mergers.default_mergers()]
for a_cfg in srcs:
if a_cfg:
- m_cfg = mergedict(m_cfg, a_cfg)
+ # Take the last merger as the one that
+ # will define how to merge next...
+ mergers_to_apply = list(merge_how[-1])
+ merger = mergers.construct(mergers_to_apply)
+ m_cfg = merger.merge(m_cfg, a_cfg)
+ # If the config has now has new merger set,
+ # extract them to be used next time...
+ new_mergers = mergers.dict_extract_mergers(m_cfg)
+ if new_mergers:
+ merge_how.append(new_mergers)
return m_cfg
-def mergedict(src, cand):
- """
- Merge values from C{cand} into C{src}.
- If C{src} has a key C{cand} will not override.
- Nested dictionaries are merged recursively.
- """
- raw_mergers = mergers.default_mergers()
- merger = mergers.construct(raw_mergers)
- return merger.merge(src, cand)
-
-
@contextlib.contextmanager
def chdir(ndir):
curr = os.getcwd()
@@ -714,7 +713,7 @@ def read_conf_with_confd(cfgfile):
# Conf.d settings override input configuration
confd_cfg = read_conf_d(confd)
- return mergedict(confd_cfg, cfg)
+ return mergemanydict([confd_cfg, cfg])
def read_cc_from_cmdline(cmdline=None):