我们使用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"