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