#python #testing #ansible #infrastructure
#python #тестирование #ansible #инфраструктура
Вопрос:
Учитывая словарь, подтвердите наличие дубликатов в том же списке.
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 от каждого имени, чтобы впоследствии мы могли утверждать для дубликатов.
- name: DEBUG VAR=ITEM.1
debug: var=item.1
with_subelements:
- "{{ customer_domains }}"
- sender_domains
Мысли?
Это работает для печати подэлементов переменной customer_domains:
- name: print customer_domains SUBELEMENTS
debug:
msg: "{{ item.1 }}"
with_subelements:
- "{{ scx_customer_domains }}"
- sender_domains
Ответ №1:
почему не это?
- 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
Комментарии:
1. Это работает. Что, если мы хотим, чтобы он утверждал дубликаты во всех списках sender_domains, независимо от списков имен , к которым они принадлежат?