Exemple Ansible : Filtrer les groupes d'utilisateurs, ne garder que les groupes qui existent

Lors de la création d’utilisateurs dans Ansible, vous pouvez vouloir les assigner à une liste de groupes, mais tous les groupes peuvent ne pas exister sur chaque système. Pour éviter les erreurs, vous pouvez filtrer la liste des groupes pour n’inclure que les groupes qui existent réellement.

Voici un playbook d’exemple minimal qui montre comment faire cela :

filter_user_groups.yml
---
- name: Create user with filtered groups
  hosts: all
  become: true
  vars:
    # Certains groupes peuvent ne pas exister sur tous les systèmes !
    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 }}"

Comment ça fonctionne :

Cette approche empêche Ansible d’échouer si un groupe dans votre liste n’existe pas sur le système cible.


Check out similar posts by category: Ansible