确保Ansible中只有特定的用户列表

我们使用Ansible来创build这个任务的用户:

- name: Create adm users user: name: "{{ item.name }}" group: "{{ common_adm_group }}" createhome: yes password: "!!" update_password: always state: present with_items: "{{ common_adm_users }}" 

而common_adm_users是这样的:

  - name: user1 comment: "First Last" ssh_key: "ssh-rsa AAAAB3Nza..." 

这对于创build用户来说工作正常,但是当有人离开团队时,当我们重新应用包含这个任务的angular色时,从common_adm_users中删除他们的用户并不会导致它从服务器中被删除。

维护用户的确切名单的最佳做法是什么?

你需要在这里做一些额外的任务。

添加所有需要的用户后,抓住现有的用户,例如:

 - shell: 'grep {{ common_adm_group }} /etc/group | cut -d: -f4 | tr "," "\n"' changed_when: false # Make task green register: existing_users 

并删除陈旧的:

 - user: name: "{{ item }}" state: absent with_items: "{{ existing_users.stdout_lines | difference(common_adm_users | map(attribute='name') | list) }}" 

注:代码未经testing,可能包含错别字等

你实际上可以添加一个字段到你现有的任务:

 - name: Create adm users user: name: "{{ item.name }}" group: "{{ common_adm_group }}" createhome: yes password: "!!" update_password: always state: "{{ item.state | default('present') }}" with_items: "{{ common_adm_users }}" 

然后让离开团队成员的数据如下所示:

 - name: user1 comment: "First Last" ssh_key: "ssh-rsa AAAAB3Nza..." state: "absent"