给定字典,则声明同一列表中的重复项。

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_domains。
相同的sender_domains允许使用不同的名称。

经过一些研究,我能够创建以下任务,该任务显示了每次执行中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

最佳答案

为什么不呢?

- 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

07-28 02:45
查看更多