У меня следующая задача
- name: Create users
user:
uid: "{{ item.uid }}"
name: "{{ item.username }}"
comment: "{{ item.comment }}"
shell: /bin/bash
groups: "{{ item.groups }}"
with_items: users
users
содержит всех пользователей, работающих в компании, и я хочу создать их всех на серверах самбы. Но есть еще 3 администратора, и я хочу создать их только на других серверах, которые не входят в группу samba.
Я могу создать пользователей-администраторов с указанным выше, если я добавлю when: item.username in admin_users
, но это сделает это для всех пользователей, и я хочу, чтобы по умолчанию для новых серверов создавались только admin_users, но если сервер находится в группе samba, создайте всех пользователей.
Будет ли это простой способ? Я подумываю разделить пользователей на две группы и создать admin_user и other_users, выполнив две задачи, но я хотел бы знать, есть ли СУХОЕ решение этой проблемы.
playbook.yml
---
- hosts: all
gather_facts: no
vars:
users:
- { uid: user1, username: username1, comment: comment1, shell: /bin/bash, groups: group1 }
- { uid: user2, username: username2, comment: comment2, shell: /bin/bash, groups: group2 }
admin_users: [ username1 ]
users_admin: |
{%- set o=[] %}
{%- for i in users %}
{%- if i.username in admin_users %}
{%- if o.append(i) %}
{%- endif %}
{%- endif %}
{%- endfor %}
{{ o }}
users_filtered: "{{ users if 'samba' in group_names else users_admin }}"
tasks:
- debug:
var: users_filtered
хозяева
host1 ansible_ssh_host=localhost
[samba]
host2 ansible_ssh_host=localhost
образец сеанса:
$ ansible-playbook -i hosts playbook.yml
PLAY [all] ********************************************************************
TASK: [debug ] ****************************************************************
ok: [host1] => {
"var": {
"users_filtered": [
{
"comment": "comment1",
"groups": "group1",
"shell": "/bin/bash",
"uid": "user1",
"username": "username1"
}
]
}
}
ok: [host2] => {
"var": {
"users_filtered": [
{
"comment": "comment1",
"groups": "group1",
"shell": "/bin/bash",
"uid": "user1",
"username": "username1"
},
{
"comment": "comment2",
"groups": "group2",
"shell": "/bin/bash",
"uid": "user2",
"username": "username2"
}
]
}
}
PLAY RECAP ********************************************************************
host1 : ok=1 changed=0 unreachable=0 failed=0
host2 : ok=1 changed=0 unreachable=0 failed=0