← Back to team overview

cloud-init-dev team mailing list archive

[Merge] lp:~harlowja/cloud-init/merging-order into lp:cloud-init

 

Joshua Harlow has proposed merging lp:~harlowja/cloud-init/merging-order into lp:cloud-init.

Requested reviews:
  cloud init development team (cloud-init-dev)

For more details, see:
https://code.launchpad.net/~harlowja/cloud-init/merging-order/+merge/159452
-- 
https://code.launchpad.net/~harlowja/cloud-init/merging-order/+merge/159452
Your team cloud init development team is requested to review the proposed merge of lp:~harlowja/cloud-init/merging-order into lp:cloud-init.
=== modified file 'cloudinit/handlers/cloud_config.py'
--- cloudinit/handlers/cloud_config.py	2013-03-07 22:13:05 +0000
+++ cloudinit/handlers/cloud_config.py	2013-04-17 17:18:26 +0000
@@ -39,7 +39,6 @@
         self.cloud_buf = None
         self.cloud_fn = paths.get_ipath("cloud_config")
         self.file_names = []
-        self.mergers = [DEF_MERGERS]
 
     def list_types(self):
         return [
@@ -89,13 +88,9 @@
         return all_mergers
 
     def _merge_part(self, payload, headers):
-        next_mergers = self._extract_mergers(payload, headers)
-        # Use the merger list from the last call, since it is the one
-        # that will be defining how to merge with the next payload.
-        curr_mergers = list(self.mergers[-1])
-        LOG.debug("Merging by applying %s", curr_mergers)
-        self.mergers.append(next_mergers)
-        merger = mergers.construct(curr_mergers)
+        my_mergers = self._extract_mergers(payload, headers)
+        LOG.debug("Merging by applying %s", my_mergers)
+        merger = mergers.construct(my_mergers)
         if self.cloud_buf is None:
             # First time through, merge with an empty dict...
             self.cloud_buf = {}
@@ -105,7 +100,6 @@
     def _reset(self):
         self.file_names = []
         self.cloud_buf = None
-        self.mergers = [DEF_MERGERS]
 
     def handle_part(self, _data, ctype, filename,  # pylint: disable=W0221
                     payload, _frequency, headers):  # pylint: disable=W0613

=== modified file 'cloudinit/util.py'
--- cloudinit/util.py	2013-03-26 21:48:40 +0000
+++ cloudinit/util.py	2013-04-17 17:18:26 +0000
@@ -543,21 +543,16 @@
 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:
-            # Take the last merger as the one that
-            # will define how to merge next...
-            mergers_to_apply = list(merge_how[-1])
+    merged_cfg = {}
+    for cfg in srcs:
+        if cfg:
+            # Figure out which mergers to apply...
+            mergers_to_apply = mergers.dict_extract_mergers(cfg)
+            if not mergers_to_apply:
+                mergers_to_apply = mergers.default_mergers()
             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
+            merged_cfg = merger.merge(merged_cfg, cfg)
+    return merged_cfg
 
 
 @contextlib.contextmanager


Follow ups