Управление пользователями с помощью Ansible

Я хочу добиться следующего управления пользователями через Ansible: у меня есть пользователи с именами user[1-3], группы пользователей с именами admin и developer. И у меня есть куча серверов, где в зависимости от их группы пользователей пользователи должны быть добавлены ИЛИ удалены.

Что работает до сих пор, так это добавление одной отдельной группы пользователей к пользователю и добавление всех пользователей в этой группе пользователей к определенной группе серверов.

Вот мои файлы:

users.yml:

---
os_groups:
  - name: sudo
    system: yes

os_users:
  - name: userone
    comment: 'Test User'
    usergroups:
      - developer
      - admin
    authorized_keys:
      - key: 'ssh-rsa ...'

  - name: usertwo
    comment: 'Test User 2'
    usergroups:
      - developer
    state: present
    authorized_keys:
      - key: 'ssh-rsa ...'

  - name: userthree
    usergroups:
      - admin
    comment: 'Test User 3'
    authorized_keys:
      - key: 'ssh-rsa ...'

пособие

---
- hosts: testhosts1
  sudo: yes
  vars_files:
    - users.yml

  roles:
    - role: configure-os_users
      usergroup:
        - admin

- hosts: testhosts2
  sudo: yes
  vars_files:
    - users.yml

  roles:
    - role: configure-os_users
      usergroup:
        - admin
        - usergroup1

задачи

- name: Ensure users present
  sudo: yes
  user: >-
    'name={{ item.name }}'
    {% if item.append is defined %}
    'append={{ item.append }}'
    {% endif %}
    {% if item.comment is defined %}
    'comment={{ item.comment }}'
    {% endif %}
    {% if item.createhome is defined %}
    'createhome={{ item.createhome }}'
    {% endif %}
    {% if item.force is defined %}
    'force={{ item.force }}'
    {% endif %}
    {% if item.generate_ssh_key is defined %}
    'generate_ssh_key={{ item.generate_ssh_key }}'
    {% endif %}
    {% if item.group is defined %}
    'group={{ item.group }}'
    {% endif %}
    {% if item.groups is defined %}
    'groups={{ item.groups }}'
    {% else %}
    'groups=sudo'
    {% endif %}
    {% if item.home is defined %}
    'home={{ item.home }}'
    {% endif %}
    {% if item.login_class is defined %}
    'login_class={{ item.login_class }}'
    {% endif %}
    {% if item.move_home is defined %}
    'move_home={{ item.move_home }}'
    {% endif %}
    {% if item.non_unique is defined %}
    'non_unique={{ item.non_unique }}'
    {% endif %}
    {% if item.password is defined %}
    'password={{ item.password }}'
    {% else %}
    'password=XXXXX'
    {% endif %}
    {% if item.remove is defined %}
    'remove={{ item.remove }}'
    {% endif %}
    {% if item.shell is defined %}
    'shell={{ item.shell }}'
    {% else %}
    'shell=/bin/bash'
    {% endif %}
    {% if item.ssh_key_bits is defined %}
    'ssh_key_bits={{ item.ssh_key_bits }}'
    {% endif %}
    {% if item.ssh_key_comment is defined %}
    'ssh_key_comment={{ item.ssh_key_comment }}'
    {% endif %}
    {% if item.ssh_key_file is defined %}
    'ssh_key_file={{ item.ssh_key_file }}'
    {% endif %}
    {% if item.ssh_key_passphrase is defined %}
    'ssh_key_passphrase={{ item.ssh_key_passphrase }}'
    {% endif %}
    {% if item.ssh_key_type is defined %}
    'ssh_key_type={{ item.ssh_key_type }}'
    {% endif %}
    {% if item.state is defined %}
    'state={{ item.state }}'
    {% endif %}
    {% if item.system is defined %}
    'system={{ item.system }}'
    {% endif %}
    {% if item.uid is defined %}
    'uid={{ item.uid }}'
    {% endif %}
    {% if item.update_password is defined %}
    'update_password={{ item.update_password }}'
    {% else %}
    'update_password=on_create'
    {% endif %}
  with_items: os_users
  when: usergroup in item.usergroups

Я хочу иметь возможность использовать несколько групп пользователей для каждого пользователя, и когда я удаляю группу пользователей из этого пользователя, пользователь также должен быть удален с сервера.

Я искал в Интернете и Ansible Galaxy вперед и назад, но не нашел ничего подходящего.

У вас есть идея, как я могу действовать? Особенно об удалении пользователя при удалении из группы пользователей?

Я также открыт для идей, если есть что-то, что не является Ansible, но может выполнять эту работу.

спасибо,


person user3515524    schedule 19.01.2016    source источник


Ответы (1)


Что ж, в большинстве мест вам скажут использовать LDAP, но если вы хотите сделать это через Ansible, лучше всего построить свои переменные в виде списков подэлементов с условными флагами. Поэтому, когда вы добавляете «Джон Доу» с «Группа: Команда 1», «Группа: Разработка» и «Группа: Специальные разрешения», это свяжет соответствующие группы на серверах.

http://docs.ansible.com/ansible/playbooks_loops.html

Проблема в том, что это не очень удобно с точки зрения учебника. Возможно, вы захотите взглянуть на LinOTP, если у вас еще нет учетных записей домена.

person jdspringr07    schedule 22.03.2016