Ansible-Beispiel: Benutzergruppen filtern, nur existierende Gruppen behalten
Beim Erstellen von Benutzern in Ansible möchtest du sie möglicherweise einer Liste von Gruppen zuweisen, aber nicht alle Gruppen können auf jedem System existieren. Um Fehler zu vermeiden, kannst du 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:
# Einige Gruppen existieren möglicherweise nicht auf allen Systemen!
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 deiner Liste auf dem Zielsystem nicht existiert.
Ähnliche Beiträge nach Kategorie:
Ansible
Wenn dieser Beitrag dir geholfen hat, erwäge, mir einen Kaffee zu spendieren oder per PayPal zu spenden, um die Recherche und Veröffentlichung neuer Beiträge auf TechOverflow zu unterstützen