diff --git a/lib/ansible/config/manager.py b/lib/ansible/config/manager.py index c31f3ab5084..c308c3810d4 100644 --- a/lib/ansible/config/manager.py +++ b/lib/ansible/config/manager.py @@ -99,7 +99,10 @@ def ensure_type(value, value_type, origin=None): value = value.split(',') value = [resolve_path(x, basedir=basedir) for x in value] - # defaults to string types + elif value_type in ('str', 'string'): + value = unquote(to_text(value, errors='surrogate_or_strict')) + + # defaults to string type elif isinstance(value, string_types): value = unquote(value) diff --git a/lib/ansible/plugins/action/template.py b/lib/ansible/plugins/action/template.py index c4e802a756b..5cdb2f5271e 100644 --- a/lib/ansible/plugins/action/template.py +++ b/lib/ansible/plugins/action/template.py @@ -89,7 +89,7 @@ class ActionModule(ActionBase): for b_type in ('force', 'follow', 'trim_blocks'): value = locals()[b_type] - value = ensure_type(value, 'string') + value = ensure_type(value, 'boolean') if value is not None and not isinstance(value, bool): raise AnsibleActionFail("%s is expected to be a boolean, but got %s instead" % (b_type, type(value))) locals()[b_type] = value