For the same playbook, if my variables are defined in a file (let name it
myvars.yml) specified with vars_files statement it works but if the same
variables are defined in group_vars/all it don't.
Example my playbook and it's associated files using var_files/myvars.yml
playbook.yml
> ---
> - hosts: all
> sudo: yes
> vars_files:
> - myvars.yml
> roles:
> - usertest
>
myvars.yml
> ---
> users:
> - username: timmy
> gecos: Timmy
> groups:
> - group1
> - group2
> - username: tony
> gecos: Tony
> groups:
> - group1
> - group3
>
roles/usertest/tasks/main.yml
> - include: tasks_user.yml user=$item
> with_items: $users
>
roles/usertest/tasks/task_user.yml (excerpt)
> ---
> - name: create user ${user.username}
> action: user name=${user.username} comment=${user.gecos}
>
> - name: "Create group"
> group: name=$item state=present
> with_items: ${user.groups}
>
> - name: add user to groups
> action: user name=${user.username} groups=$item append=yes
> with_items: ${user.groups}
>
When I run it, everything fine :
PLAY [all]
> ********************************************************************
>
> GATHERING FACTS
> ***************************************************************
> ok: [127.0.0.1]
>
> TASK: [create user timmy]
> *****************************************************
> ok: [127.0.0.1] => (item={'username': 'timmy', 'gecos': 'Timmy', 'groups':
> ['group1', 'group2']})
>
> TASK: [Create group]
> **********************************************************
> ok: [127.0.0.1] => (item=group1)
> ok: [127.0.0.1] => (item=group2)
>
> TASK: [add user to groups]
> ****************************************************
> ok: [127.0.0.1] => (item=group1)
> ok: [127.0.0.1] => (item=group2)
>
> TASK: [create user tony]
> ******************************************************
> ok: [127.0.0.1] => (item={'username': 'tony', 'gecos': 'Tony', 'groups':
> ['group1', 'group3']})
>
> TASK: [Create group]
> **********************************************************
> ok: [127.0.0.1] => (item=group1)
> ok: [127.0.0.1] => (item=group3)
>
> TASK: [add user to groups]
> ****************************************************
> ok: [127.0.0.1] => (item=group1)
> ok: [127.0.0.1] => (item=group3)
>
> PLAY RECAP
> ********************************************************************
> 127.0.0.1 : ok=7 changed=0 unreachable=0 failed=0
>
>
Now instead of using an external file to define my users setting I want to
put them in group_vars/all :
playbook.yml : I remove vars_files
> ---
> - hosts: all
> sudo: yes
> roles:
> - usertest
>
myvars.yml : deleted, users definition set in group_vars/all instead (same
yaml)
> ---
>
users:
> - username: timmy
> gecos: Timmy
> groups:
> - group1
> - group2
> - username: tony
> gecos: Tony
> groups:
> - group1
> - group3
>
roles/usertest/tasks/main.yml : nothing changed
> - include: tasks_user.yml user=$item
> with_items: $users
>
roles/usertest/tasks/task_user.yml (excerpt) : nothing changed
> ---
> - name: create user ${user.username}
> action: user name=${user.username} comment=${user.gecos}
>
> - name: "Create group"
> group: name=$item state=present
> with_items: ${user.groups}
>
> - name: add user to groups
> action: user name=${user.username} groups=$item append=yes
> with_items: ${user.groups}
>
And when I run it, $users is not expended or something like that :
PLAY [all]
> ********************************************************************
>
> GATHERING FACTS
> ***************************************************************
> ok: [127.0.0.1]
>
> TASK: [create user ${user.username}]
> ******************************************
> ok: [127.0.0.1] => (item=$users)
>
> TASK: [Create group]
> **********************************************************
> fatal: [127.0.0.1] => with_items expects a list
>
> FATAL: all hosts have already failed -- aborting
>
> PLAY RECAP
> ********************************************************************
> to retry, use: --limit @/Users/ydavid/playbook-test.retry
>
> 127.0.0.1 : ok=2 changed=0 unreachable=1 failed=0
>
It create a user named ${user.username} and fail on the loop over groups
because as $user is not expanded $user.groups is not a list
The problem comme from the association include and with_item because
group_vars/all is readed correctly if I don't use a loop
Must I open an issue ? Or may I did something wrong ?
Thanks for your help
--
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 [email protected].
For more options, visit https://groups.google.com/groups/opt_out.