Ansible-Beispiel: Benutzergruppen filtern, nur existierende Gruppen behalten

Beim Erstellen von Benutzern in Ansible möchten Sie sie möglicherweise einer Liste von Gruppen zuweisen, aber nicht alle Gruppen können auf jedem System existieren. Um Fehler zu vermeiden, können Sie die Gruppenliste filtern, um nur Gruppen einzuschließen, die tatsächlich existieren.

Hier ist ein minimales Beispiel-Playbook, das demonstriert, wie man das macht:

filter_user_groups.yml
---
- name: Create user with filtered groups
  hosts: all
  become: true
  vars:
    # Some groups may not exist on all systems!
    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: "Please delete me"
        shell: /bin/bash
        createhome: no
        state: present
        groups: "{{ filtered_user_groups }}"

Wie es funktioniert:

Dieser Ansatz verhindert, dass Ansible fehlschlägt, wenn eine Gruppe in Ihrer Liste auf dem Zielsystem nicht existiert.


Check out similar posts by category: Ansible