Skip to content

Commit

Permalink
All variables in complex args again
Browse files Browse the repository at this point in the history
Also updates the CHANGELOG to note the slight change, where bare variables
in args are no longer allowed to be bare variables

Fixes ansible#13518
  • Loading branch information
jimi-c committed Dec 16, 2015
1 parent 491fd75 commit 8716bf8
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 1 deletion.
20 changes: 20 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,26 @@ newline being stripped you can change your playbook like this:
"msg": "Testing some things"
```
* When specifying complex args as a variable, the variable must use the full jinja2
variable syntax ('{{var_name}}') - bare variable names there are no longer accepted.
In fact, even specifying args with variables has been deprecated, and will not be
allowed in future versions:
```
---
- hosts: localhost
connection: local
gather_facts: false
vars:
my_dirs:
- { path: /tmp/3a, state: directory, mode: 0755 }
- { path: /tmp/3b, state: directory, mode: 0700 }
tasks:
- file:
args: "{{item}}"
with_items: my_dirs
```
###Plugins
* Rewritten dnf module that should be faster and less prone to encountering bugs in cornercases
Expand Down
11 changes: 10 additions & 1 deletion lib/ansible/parsing/mod_args.py
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,16 @@ def _normalize_parameters(self, thing, action=None, additional_args=dict()):
# than those which may be parsed/normalized next
final_args = dict()
if additional_args:
final_args.update(additional_args)
if isinstance(additional_args, string_types):
templar = Templar(loader=None)
if templar._contains_vars(additional_args):
final_args['_variable_params'] = additional_args
else:
raise AnsibleParserError("Complex args containing variables cannot use bare variables, and must use the full variable style ('{{var_name}}')")
elif isinstance(additional_args, dict):
final_args.update(additional_args)
else:
raise AnsibleParserError('Complex args must be a dictionary or variable string ("{{var}}").')

# how we normalize depends if we figured out what the module name is
# yet. If we have already figured it out, it's an 'old style' invocation.
Expand Down

0 comments on commit 8716bf8

Please sign in to comment.