Ansible 从 CSV 创建用户

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' }

感谢您的帮助。

答案1

文档中有一章很好:变量文件分离

定义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 }}"

PS:我还将参数语法改为 YAML,而不是key=value– 相信我,它在复杂的剧本中更加强大。

如果您想在不同的主机上管理不同的用户集,您可能需要使用库存组/主机变量而不是播放级变量文件。

答案2

从 Ansible 2.8 版开始,有一个名为读取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 }}'

相关内容