summaryrefslogtreecommitdiff
path: root/cloudinit/mergers
diff options
context:
space:
mode:
Diffstat (limited to 'cloudinit/mergers')
-rw-r--r--cloudinit/mergers/m_dict.py5
-rw-r--r--cloudinit/mergers/m_list.py25
-rw-r--r--cloudinit/mergers/m_str.py2
3 files changed, 10 insertions, 22 deletions
diff --git a/cloudinit/mergers/m_dict.py b/cloudinit/mergers/m_dict.py
index 45a7d3a5..929d3865 100644
--- a/cloudinit/mergers/m_dict.py
+++ b/cloudinit/mergers/m_dict.py
@@ -20,7 +20,7 @@
class Merger(object):
def __init__(self, merger, opts):
self._merger = merger
- self._overwrite = 'overwrite' in opts
+ self._not_overwrite = 'not_overwrite' in opts
# This merging algorithm will attempt to merge with
# another dictionary, on encountering any other type of object
@@ -39,7 +39,8 @@ class Merger(object):
merged = dict(value)
for (k, v) in merge_with.items():
if k in merged:
- if not self._overwrite:
+ if self._not_overwrite:
+ # Attempt to merge them....
merged[k] = self._merger.merge(merged[k], v)
else:
merged[k] = v
diff --git a/cloudinit/mergers/m_list.py b/cloudinit/mergers/m_list.py
index a56ff007..208c5f52 100644
--- a/cloudinit/mergers/m_list.py
+++ b/cloudinit/mergers/m_list.py
@@ -20,7 +20,6 @@
class Merger(object):
def __init__(self, merger, opts):
self._merger = merger
- self._discard_non = 'discard_non_list' in opts
self._extend = 'extend' in opts
def _on_tuple(self, value, merge_with):
@@ -29,22 +28,10 @@ class Merger(object):
# On encountering a list or tuple type this action will be applied
# a new list will be returned, if the value to merge with is itself
# a list and we have been told to 'extend', then the value here will
- # be extended with the other list. If in 'extend' mode then we will
- # attempt to merge instead, which means that values from the list
- # to merge with will replace values in te original list (they will
- # also be merged recursively).
- #
- # If the value to merge with is not a list, and we are set to discared
- # then no modifications will take place, otherwise we will just append
- # the value to merge with onto the end of our own list.
+ # be extended with the other list.
def _on_list(self, value, merge_with):
- new_value = list(value)
- if isinstance(merge_with, (tuple, list)):
- if self._extend:
- new_value.extend(merge_with)
- else:
- return new_value
- else:
- if not self._discard_non:
- new_value.append(merge_with)
- return new_value
+ if not self._extend or not isinstance(merge_with, (tuple, list)):
+ return merge_with
+ # Leave the original list alone...
+ value = list(value)
+ return value.extend(merge_with)
diff --git a/cloudinit/mergers/m_str.py b/cloudinit/mergers/m_str.py
index 291c91c2..a0c57b53 100644
--- a/cloudinit/mergers/m_str.py
+++ b/cloudinit/mergers/m_str.py
@@ -31,7 +31,7 @@ class Merger(object):
# merge them together, otherwise we will just return value.
def _on_str(self, value, merge_with):
if not self._append:
- return value
+ return merge_with
else:
if isinstance(value, (unicode)):
return value + unicode(merge_with)