I'm trying to write an Ansible playbook which will allow me to define a list of groups to apply to a list of users, across a list of defined servers.
It seems to be getting close to working except the users being created are the literal list value such as ['mike']
in /etc/passwd
.
How do I tell Ansible to use the value of the which_users
?
---
- hosts: all
gather_facts: false
vars:
local_group_info:
- name : developer group
which_users :
- mike
- george
which_groups :
- adm
- www-data
on_hosts :
- test.sv1.org
- punchy.sv1.org
- name: admin group
which_users:
- kelly
which_groups:
- sudo
on_hosts :
- test.sv1.org
tasks:
- name: Add users to local groups if current host matches
when: inventory_hostname in item.0.on_hosts or 'all' in item.0.on_hosts
debug:
msg: "user {{ item.0.which_users }} should be in group {{ item.1 }}"
with_subelements:
- "{{ local_group_info }}"
- which_groups
output:
PLAY [all] **************************************************************************************************************************
TASK [Add users to local groups if current host matches] ****************************************************************************
ok: [test.sv1.org] => (item=[{u'which_users': [u'mike', u'george'], u'name': u'developer group', u'on_hosts': [u'test.sv1.org', u'punchy.sv1.org']}, u'adm']) => {
"msg": "user [u'mike', u'george'] should be in group adm"
}
ok: [test.sv1.org] => (item=[{u'which_users': [u'mike', u'george'], u'name': u'developer group', u'on_hosts': [u'test.sv1.org', u'punchy.sv1.org']}, u'www-data']) => {
"msg": "user [u'mike', u'george'] should be in group www-data"
}
ok: [test.sv1.org] => (item=[{u'which_users': [u'kelly'], u'name': u'admin group', u'on_hosts': [u'test.sv1.org']}, u'sudo']) => {
"msg": "user [u'kelly'] should be in group sudo"
}
PLAY RECAP **************************************************************************************************************************
test.sv1.org : ok=1 changed=0 unreachable=0 failed=0