Назад | Перейти на главную страницу

Измените переменную, которую нужно создать, на основе группы в Ansible

У меня следующая задача

- 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