diff --git a/lib/ansible/utils/vars.py b/lib/ansible/utils/vars.py index 569bad2847..4d44a068c2 100644 --- a/lib/ansible/utils/vars.py +++ b/lib/ansible/utils/vars.py @@ -28,7 +28,8 @@ from ansible.compat.six import iteritems, string_types from ansible import constants as C from ansible.errors import AnsibleError from ansible.parsing.splitter import parse_kv -from ansible.utils.unicode import to_unicode +from ansible.utils.unicode import to_unicode, to_str + def _validate_mutable_mappings(a, b): """ @@ -43,8 +44,14 @@ def _validate_mutable_mappings(a, b): # a variable number of arguments instead. if not (isinstance(a, MutableMapping) and isinstance(b, MutableMapping)): + myvars = [] + for x in [a, b]: + try: + myvars.append(dumps(x)) + except: + myvars.append(to_str(x)) raise AnsibleError("failed to combine variables, expected dicts but got a '{0}' and a '{1}': \n{2}\n{3}".format( - a.__class__.__name__, b.__class__.__name__, dumps(a), dumps(b)) + a.__class__.__name__, b.__class__.__name__, myvars[0], myvars[1]) ) def combine_vars(a, b): diff --git a/test/units/plugins/strategies/test_strategy_base.py b/test/units/plugins/strategies/test_strategy_base.py index 8d1a1e8ada..9ea944a2a1 100644 --- a/test/units/plugins/strategies/test_strategy_base.py +++ b/test/units/plugins/strategies/test_strategy_base.py @@ -196,6 +196,7 @@ class TestStrategyBase(unittest.TestCase): mock_inventory.get_host.side_effect = _get_host mock_inventory.get_group.side_effect = _get_group mock_inventory.clear_pattern_cache.return_value = None + mock_inventory.get_host_vars.return_value = {} mock_var_mgr = MagicMock() mock_var_mgr.set_host_variable.return_value = None