Ansible-Beispiel: Benutzergruppen filtern, nur existierende Gruppen behalten

Beim Erstellen von Benutzern in Ansible möchtest du sie möglicherweise einer Liste von Gruppen zuweisen, aber nicht alle Gruppen können auf jedem System existieren. Um Fehler zu vermeiden, kannst du 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:
    # Einige Gruppen existieren möglicherweise nicht auf allen Systemen!
    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 deiner Liste auf dem Zielsystem nicht existiert.


Ähnliche Beiträge nach Kategorie: Ansible