Merge pull request #38645 from rallytime/merge-2016.11

[2016.11] Merge forward from 2016.3 to 2016.11
This commit is contained in:
Mike Place 2017-01-10 12:54:05 -07:00 committed by GitHub
commit b0ed91ce2d
3 changed files with 39 additions and 2 deletions

View file

@ -3602,7 +3602,7 @@ def apply_template_on_contents(
to_str=True,
context=context_dict,
saltenv=saltenv,
grains=__grains__,
grains=__opts__['grains'],
pillar=__pillar__,
salt=__salt__,
opts=__opts__)['data'].encode('utf-8')
@ -3771,7 +3771,7 @@ def get_managed(
context=context_dict,
salt=__salt__,
pillar=__pillar__,
grains=__grains__,
grains=__opts__['grains'],
opts=__opts__,
**kwargs)
else:

View file

@ -9,6 +9,7 @@ import collections
# Import third party libs
import os
import copy
import yaml
import salt.ext.six as six
@ -94,6 +95,7 @@ def get(key,
ret = salt.utils.traverse_dict_and_list(pillar_dict, key, {}, delimiter)
if isinstance(ret, collections.Mapping) and \
isinstance(default, collections.Mapping):
default = copy.deepcopy(default)
return salt.utils.dictupdate.update(default, ret, merge_lists=opt_merge_lists)
ret = salt.utils.traverse_dict_and_list(pillar_dict,

View file

@ -58,6 +58,41 @@ class PillarModuleTestCase(TestCase):
else:
self.assertEqual(pillarmod.ls(), ['a', 'b'])
def test_pillar_get_default_merge(self):
pillarmod.__opts__ = {}
pillarmod.__pillar__ = {'key': 'value'}
default = {'default': 'plop'}
res = pillarmod.get(key='key', default=default)
self.assertEqual("value", res)
res = pillarmod.get(key='missing pillar', default=default)
self.assertEqual({'default': 'plop'}, res)
def test_pillar_get_default_merge_regression_38558(self):
"""Test for pillar.get(key=..., default=..., merge=True)
Do not update the ``default`` value when using ``merge=True``.
See: https://github.com/saltstack/salt/issues/38558
"""
pillarmod.__opts__ = {}
pillarmod.__pillar__ = {'l1': {'l2': {'l3': 42}}}
res = pillarmod.get(key='l1')
self.assertEqual({'l2': {'l3': 42}}, res)
default = {'l2': {'l3': 43}}
res = pillarmod.get(key='l1', default=default)
self.assertEqual({'l2': {'l3': 42}}, res)
self.assertEqual({'l2': {'l3': 43}}, default)
res = pillarmod.get(key='l1', default=default, merge=True)
self.assertEqual({'l2': {'l3': 42}}, res)
self.assertEqual({'l2': {'l3': 43}}, default)
# gracinet: not sure this is really useful, but other test modules have this as well
if __name__ == '__main__':