Приклад Ansible: Фільтрація груп користувача, залишення лише існуючих груп

Під час створення користувачів в Ansible ви можете захотіти призначити їм список груп, але не всі групи можуть існувати на кожній системі. Щоб уникнути помилок, ви можете відфільтрувати список груп, щоб включити лише ті групи, які фактично існують.

Ось мінімальний приклад playbook, який демонструє, як це зробити:

filter_user_groups.yml
---
- name: Create user with filtered groups
  hosts: all
  become: true
  vars:
    # Деякі групи можуть не існувати на всіх системах!
    user_groups: "adm,sudo,sambashare,tss,docker,realtime,versatile,libvirt,libvirt-qemu,libvirt-dnsmasq,boinc,kvm,video,plugdev,users,render,video"
  tasks:
    - name: Get existing groups
      ansible.builtin.getent:
        database: group
      register: existing_groups

    - name: Filter user_groups to only existing groups
      set_fact:
        filtered_user_groups: >-
          {{
            user_groups.split(',') | select('in', (existing_groups.ansible_facts.getent_group.keys() | list)) | list
          }}

    - name: Create user deleteme
      user:
        name: "deleteme"
        password: "abc123"
        comment: "Будь ласка, видаліть мене"
        shell: /bin/bash
        createhome: no
        state: present
        groups: "{{ filtered_user_groups }}"

Як це працює:

Цей підхід запобігає збоям Ansible, якщо група у вашому списку не існує в цільовій системі.


Дивіться схожі статті за категоріями: Ansible