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

时间:2018-02-15 14:21:47

标签: 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: 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: ???

建议的行动方案是什么?我应该创建另一个列表来跟踪已经处理过的登录还是有更好的方法?

1 个答案:

答案 0 :(得分:6)

使用assertion任务在游戏手册的最开始进行预检检查:

  - name: Safety check
    assert:
      that: >
            users | map(attribute='login') | list | count
            ==
            users | map(attribute='login') | list | unique | count

在这种情况下,我们检查原始登录列表的长度是否与具有唯一登录的列表的长度相同。