Ansible:将列表限制为唯一元素

Ansible:将列表限制为唯一元素,ansible,unique,user-management,Ansible,Unique,User Management,我正在编写一个剧本,以管理users.yml中定义的服务器上的用户: --- users: - login: ab full_login: abcdef name: Aaaa Bbbb,,, admin_on: server1, server2 regular_on: server3 active: yes 我想包括一些保护措施,防止两个不同的用户定义了相同的登录名。剧本如下所示: --- - name: Provision users on servers hosts

我正在编写一个剧本,以管理users.yml中定义的服务器上的用户:

---
users:
- login: ab
  full_login: abcdef
  name: Aaaa Bbbb,,,
  admin_on: server1, server2
  regular_on: server3
  active: yes
我想包括一些保护措施,防止两个不同的用户定义了相同的登录名。剧本如下所示:

---
- name: Provision users on servers
  hosts: all
  remote_user: morty
  become: yes
  vars_files: 
    - users.yml

  tasks:
  - name: Create users
    user:
      name: "{{ item.login }}"
      comment: "{{ item.name }}"
      update_password: on_create
    with_items:
      - "{{ users }}"
    when: ???
建议采取什么行动?我应该创建另一个列表来跟踪已处理的登录,还是有更好的方法?

在游戏手册的最开始使用task进行飞行前检查:

  - name: Safety check
    assert:
      that: >
            users | map(attribute='login') | list | count
            ==
            users | map(attribute='login') | list | unique | count
在这种情况下,我们检查原始登录列表的长度是否与具有唯一登录的列表的长度相同