Приклад Ansible: Фільтрація груп користувача, залишення лише існуючих груп
Під час створення користувачів в Ansible ви можете захотіти призначити їм список груп, але не всі групи можуть існувати на кожній системі. Щоб уникнути помилок, ви можете відфільтрувати список груп, щоб включити лише ті групи, які фактично існують.
Ось мінімальний приклад playbook, який демонструє, як це зробити:
filter_user_groups.yml
---
- name: Create user with filtered groups
hosts: all
become: true
vars:
# Деякі групи можуть не існувати на всіх системах!
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: "Будь ласка, видаліть мене"
shell: /bin/bash
createhome: no
state: present
groups: "{{ filtered_user_groups }}"Як це працює:
- Модуль
getentзбирає всі групи в системі. - Завдання
set_factрозбиває рядокuser_groups, розділений комами, на список і фільтрує його, щоб включити лише групи, присутні в базі даних груп системи. - Модуль
userпотім створює користувача лише з дійсними групами.
Цей підхід запобігає збоям Ansible, якщо група у вашому списку не існує в цільовій системі.
Дивіться схожі статті за категоріями:
Ansible
Якщо ця стаття допомогла вам, будь ласка, подумайте про те, щоб купити мені каву або зробити пожертву через PayPal на підтримку досліджень та публікації нових статей на TechOverflow