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:
- El módulo
getentrecopila todos los grupos del sistema. - La tarea
set_factdivide la cadenauser_groupsseparada por comas en una lista y la filtra para incluir solo los grupos presentes en la base de datos de grupos del sistema. - El módulo
userentonces crea el usuario solo con los grupos válidos.
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
Si este artículo te ha ayudado, considera invitarme a un café o hacer una donación vía PayPal para apoyar la investigación y publicación de nuevos artículos en TechOverflow