Ansible: Добавить группу Unix к пользователю, только если группа существует
Я использую Ansible для добавления пользователя на различные серверы. На некоторых серверах определены различные группы UNIX. Я хотел бы найти способ для Ansible проверить наличие группы, которую я указываю, и если эта группа существует, добавьте ее в список вторичных групп пользователя (но проигнорируйте инструкцию, если группа не существует).
есть мысли о том, как я мог бы сделать это с Ansible?
вот мое начало точка.
команда
ansible-playbook -i 'localhost,' -c local ansible_user.yml
ansible_user.в формате YML
---
- hosts: all
user: root
become: yes
vars:
password: "!"
user: testa
tasks:
- name: add user
user: name="{{user}}"
state=present
password="{{password}}"
shell=/bin/bash
append=yes
comment="test User"
обновление: основываясь на решении, предложенном @udondan, я смог заставить это работать со следующими дополнительными задачами.
- name: Check if user exists
shell: /usr/bin/getent group | awk -F":" '{print }'
register: etc_groups
- name: Add secondary Groups to user
user: name="{{user}}" groups="{{item}}" append=yes
when: '"{{item}}" in etc_groups.stdout_lines'
with_items:
- sudo
- wheel
2 ответов
у вас есть что-нибудь, чтобы идентифицировать эти разные типы хостов?
Если нет, вам сначала нужно проверить, какие группы существуют на этом хосте. Вы можете сделать это с помощью команды groups | tr -s " " "2"
который выведет одну группу на строку.
вы можете использовать это как отдельную задачу вот так:
- shell: groups | tr -s " " "2"
register: unix_groups
зарегистрированного результат может быть использован позже, когда вы хотите добавить группы пользователей
- user: ...
when: "some_group" in unix_groups.stdout_lines
на getent модуль можно использовать для чтения /etc / group
- name: Determine available groups
getent:
database: group
- name: Add additional groups to user
user: name="{{user}}" groups="{{item}}" append=yes
when: item in ansible_facts.getent_group
with_items:
- sudo
- wheel