Назад | Перейти на главную страницу

Ansible: создание пользователей из CSV

Я только начал использовать Ansible. Есть ли лучшие практики при управлении несколькими учетными записями пользователей с помощью Ansible; (например, создание, отключение и удаление учетных записей пользователей). Думал, управление учетными записями из csv файла будет раньше. Мне не удалось найти никаких ссылок или примеров.
Я создал следующий тест ниже. Но для удобства использования, кажется, было бы проще запустить это с файлом csv, и вам не приходилось каждый раз редактировать файл yml.

    - hosts: servers
      remote_user: root
      tasks:
        - name: adding several users
          user:
             name={{ item.name }}
             state=present
             comment={{ item.comment }}
             password=$1$*)^%$CeUUJM&v#0pQhHjqjpqX1
             update_password=on_create
             createhome=yes
             groups={{ item.groups }}
          with_items:
             - { name: 'testuser3', comment: 'testuser3', groups: 'wheel' }
             - { name: 'testuser4', comment: 'testuser4', groups: 'users' }

Спасибо за помощь.

В документации есть хорошая глава: Разделение файлов переменных.

Определить users.yml:

users:
  - name: testuser3
    comment: testuser3
    groups: wheel
  - name: testuser4
    comment: testuser4
    groups: users

И в вашей пьесе:

- hosts: servers
  remote_user: root
  vars_files:
    - /vars/users.yml
  tasks:
    - name: adding several users
      user:
        name: "{{ item.name }}"
        state: present
        comment: "{{ item.comment }}"
        password: "$1$*)^%$CeUUJM&v#0pQhHjqjpqX1"
        update_password: on_create
        createhome: yes
        groups: "{{ item.groups }}"
      with_items: "{{ users }}"

P.S. Я также изменил синтаксис аргументов на YAML вместо key=value - поверьте мне, он более надежен в сложных пьесах.

А если вы хотите управлять разными наборами пользователей на разных хостах, вы можете использовать переменные группы / хоста инвентаря вместо файлов переменных уровня воспроизведения.

Начиная с версии Ansible 2.8 существует модуль под названием read_csv.

# Example CSV file with header
#
#   name,uid,gid
#   dag,500,500
#   jeroen,501,500

# Read a CSV file and access the first item
- name: Read users from CSV file and return a list
  read_csv:
    path: users.csv
  register: users
  delegate_to: localhost

- debug:
    msg: 'User {{ users.list.1.name }} has UID {{ users.list.1.uid }} and GID {{ users.list.1.gid }}'