Ansible-Beispiel: Benutzergruppen filtern, nur existierende Gruppen behalten
Beim Erstellen von Benutzern in Ansible möchten Sie sie möglicherweise einer Liste von Gruppen zuweisen, aber nicht alle Gruppen können auf jedem System existieren. Um Fehler zu vermeiden, können Sie 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:
# Some groups may not exist on all systems!
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:
- Das
getent-Modul sammelt alle Gruppen auf dem System. - Die
set_fact-Aufgabe teilt die kommagetrennteuser_groups-Zeichenkette in eine Liste und filtert sie, um nur Gruppen einzuschließen, die in der Gruppen-Datenbank des Systems vorhanden sind. - Das
user-Modul erstellt dann den Benutzer nur mit den gültigen Gruppen.
Dieser Ansatz verhindert, dass Ansible fehlschlägt, wenn eine Gruppe in Ihrer Liste auf dem Zielsystem nicht existiert.
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