Ejemplo de Ansible: Filtrar grupos de usuario, solo mantener grupos que existen

Al crear usuarios en Ansible, puede que quieras asignarlos a una lista de grupos, pero no todos los grupos pueden existir en cada sistema. Para evitar errores, puedes filtrar la lista de grupos para incluir solo los grupos que realmente existen.

Aquí hay un playbook de ejemplo minimal que demuestra cómo hacer esto:

filter_user_groups.yml
---
- name: Create user with filtered groups
  hosts: all
  become: true
  vars:
    # ¡Algunos grupos pueden no existir en todos los sistemas!
    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 }}"

Cómo funciona:

Este enfoque evita que Ansible falle si un grupo en tu lista no existe en el sistema objetivo.


Echa un vistazo a artículos similares por categoría: Ansible