MyTetra Share
Делитесь знаниями!
Как в Ansible проверить, что все элементы словаря содержат одинаковые значения
Время создания: 31.05.2023 13:51
Текстовые метки: ansible, python, jinja2, dict, dictionary, словарь, элементы, одинаковые, равные, содержат, содержатся
Раздел: Компьютер - Linux - Оркестрация - Ansible
Запись: xintrea/mytetra_syncro/master/base/1685530296tso3r80ib9/text.html на raw.github.com

Проверить что в элементах словаря содержатся только одинаковые значения, можно стандартными методами и фильтрами, без написания самодельных. Например, если имеется словарь anyDict, то из него можно получать следующие данные:



{{ anyDict.keys() | list }} - список ключей


{{ anyDict.values() | list }} - список значений


{{ anyDict.values() | list | unique }} - список из одних только уникальных значений


{{ anyDict.values() | list | unique | length }} - количество уникальных значений в словаре



Если в словаре количество уникальных значений равно 1, значит все элементы словаря содержали одинаковые значения. Элементарная логика.


Следует только помнить, что Jinja-шаблоны возвращают строки. Поэтому при использовании числового значения, полученного из вышеуказанного выражения, надо применять фильтры приведения типа, например int. При этом фильтр приведения типа надо использовать непосредственно в самом выражении вычисления значения:



- set_fact:

unicalCount: "{{ anyDict.values() | list | unique | length }}


- debug:

msg: "Словарь содержит неуникальные значения"

when: "(unicalCount | int) > 1"



Необходимо понимать, что стандартными преобразованиями словарей и списков, пользуясь заодно теорией множеств, можно вытянуть из данных достаточно много информации и различных метрик.


Так же в этом разделе:
 
MyTetra Share v.0.65
Яндекс индекс цитирования