给一个字典,声明同一列表中的重复项。
vars.yml
文件:
---
customer_domains:
- name: myBank.org
- name: myBakery.net
- name: mySchool.edu
smtp_username: smtp-school
sender_domains:
- sender1.tld
- name: myRestaurant.net
- name: myHouse.org
smtp_relay_host: smtp-house.org
smtp_relay_port: 25
sender_domains:
- test1.com
- test1.com
- test2.net
- test3.house.net
我们真正想要的是确保每个名称 都没有重复的sender_domain。 相同的sender_domains,但允许使用不同的 name 。
进行一些研究后,我能够创建以下任务,该任务显示了每次执行中sender_domains的值。但是,我们真正想要的是来自每个名称的所有sender_domain的列表,以便以后可以断言重复。
- name: DEBUG VAR=ITEM.1
debug: var=item.1
with_subelements:
- "{{ customer_domains }}"
- sender_domains
有想法吗?
这可用于打印customer_domains var的子元素:
- name: print customer_domains SUBELEMENTS
debug:
msg: "{{ item.1 }}"
with_subelements:
- "{{ scx_customer_domains }}"
- sender_domains
答案 0 :(得分:0)
为什么不呢?
- name: assert unique sender_domains
assert:
that: item.sender_domains == item.sender_domains|uniq
loop: '{{ customer_domains }}'
when: '"sender_domains" in item'
如果您要确保sender_domains在全球范围内是唯一的,则可以
vars:
all_sender_domains: '{{ customer_domains | map(attribute="sender_domains") | list | select("defined") | list | flatten }}'
tasks:
- assert:
that:
- all_sender_domains == all_sender_domains | uniq