##### SUMMARY
When dynamically creating a dict var with a list as its value, it's working 
when the list elements are int but will fallback to a string when the list 
elements are strings. 

##### ISSUE TYPE
- Not sure if this is a bug in Ansible, YAML or Jinja2, or is a feature by 
design

##### COMPONENT NAME
n/a

##### ANSIBLE VERSION

```paste below
2.7.0
```

##### OS / ENVIRONMENT
```
Linux awx 3.10.0-862.14.4.el7.x86_64 #1 SMP Wed Sep 26 15:12:11 UTC 2018 
x86_64 x86_64 x86_64 GNU/Linux
``` 
(Ansible AWX 2.0.1 official docker image)

##### STEPS TO REPRODUCE
The points are:
1. the dict's key has to be dynamic with vars passed at runtime
2. the dict's value has to be a string list 

A sample play:
```yaml
- name: Dynamically construct dict with string list and pass to some role
  hosts: test
  remote_user: tester
  become: no
  roles:
    - role: some_role
      variables: "{
        '{{ dynamic_key }}_KEY': '{{ [\"value1\"] + [\"value2\"] }}'
      }"
```

With the above play, `variables` we got in `some_role` is as follows when 
give it `var1` for `dynamic_key`:
```
ok: [test] => {
    "variables": "{ 'var1_KEY': '['value1', 'value2']' }"
}
```
where both the templating of `dynamic_key` and list concatenating worked as 
expected, but the dict became a string as a whole. However, if we change 
the two lists into integer lists, it will work fine:

input:
```yaml
- name: Dynamically construct dict with int list and pass to some role
  hosts: test
  remote_user: tester
  become: no
  roles:
    - role: some_role
      variables: "{
        '{{ dynamic_key }}_KEY': '{{ [1,2,3] + [4,5,6] }}'
      }"
```

output:
```
ok: [test] => {
  "variables": {
        "var1_KEY": "[1, 2, 3, 4, 5, 6]"
    }
}
```
in this case, the whole dict are constructed correctly. I would like to 
know if this is a feature by design or a bug.

Maybe some of you may ask why I don't construct and pass the `variables` 
like this:
```yaml
- name: Dynamically construct dict with int list and pass to some role
  hosts: test
  remote_user: tester
  become: no
  roles:
    - role: some_role
      variables: 
         "{{ dynamic_key }}_KEY": "{{ [1,2,3] + [4,5,6] }}"
```
The reason is the "{{ dynamic_key }}_KEY" won't get templated and will be 
kept as `{{ dynamic_key }}_KEY` in the result. I don't know either this is 
a feature or a bug. 

I hope I have described everything clearly. Thanks!

##### EXPECTED RESULTS
as above mentioned


##### ACTUAL RESULTS
as above mentionedEnter code here...

-- 
You received this message because you are subscribed to the Google Groups 
"Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to ansible-project+unsubscr...@googlegroups.com.
To post to this group, send email to ansible-project@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ansible-project/afd0b4ea-7efe-4b41-965a-18ee069a12b8%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to