Ansible:将列表限制为唯一元素
Ansible: restrict list to unique elements
我正在编写一个剧本来管理我们在 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: ???
推荐的操作步骤是什么?我应该创建另一个列表来跟踪已处理的登录还是有更好的方法?
使用 assertion 任务在您的剧本的最开始进行预检:
- name: Safety check
assert:
that: >
users | map(attribute='login') | list | count
==
users | map(attribute='login') | list | unique | count
在这种情况下,我们检查原始登录列表的长度是否与唯一登录列表的长度相同。
我正在编写一个剧本来管理我们在 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: ???
推荐的操作步骤是什么?我应该创建另一个列表来跟踪已处理的登录还是有更好的方法?
使用 assertion 任务在您的剧本的最开始进行预检:
- name: Safety check
assert:
that: >
users | map(attribute='login') | list | count
==
users | map(attribute='login') | list | unique | count
在这种情况下,我们检查原始登录列表的长度是否与唯一登录列表的长度相同。