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 :
- Le module
getentcollecte tous les groupes du système. - La tâche
set_factdivise la chaîneuser_groupsséparée par des virgules en une liste et la filtre pour n’inclure que les groupes présents dans la base de données des groupes du système. - Le module
usercrée ensuite l’utilisateur avec uniquement les groupes valides.
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
If this post helped you, please consider buying me a coffee or donating via PayPal to support research & publishing of new posts on TechOverflow