Как обеспечить порядок с dict в Ansible?
у меня есть словарь-тип данных, которые я хочу перебрать и сохранить порядок важно:
with_dict_test:
one: 1
two: 2
three: 3
four: 4
five: 5
six: 6
Теперь, когда я пишу задачу для печати ключей и значений, они печатаются в кажущемся случайном порядке (6, 3, 1, 4, 5, 2).
---
- name: with_dict test
debug: msg="{{item.key}} --> {{item.value}}"
with_dict: with_dict_test
как я могу применить Ansible для итерации в данном порядке? Или есть что-нибудь лучше, чем with_dict
? Мне действительно нужен как ключ, так и значение во время выполнения задачи...
2 ответов
Я не вижу простого способа использовать дикты, поскольку они определяют там порядок из порядка его хэшированных ключей.
Вы можете сделать следующее:
with_dict_test:
- { key: 'one', value: 1 }
- { key: 'two', value: 2 }
- { key: 'three', value: 3 }
- { key: 'four', value: 4 }
- { key: 'five', value: 5 }
- { key: 'six', value: 6 }
и в playbook просто заменить with_dict
С with_items
:
---
- name: with_dict test
debug: msg="{{item.key}} --> {{item.value}}"
with_items: with_dict_test
если вы найдете это решение (объявление переменной) уродливым, вы можете сделать следующее:
key: ['one', 'two', 'three', 'four', 'five', 'six']
values: [1, 2, 3, 4, 5, 6]
и в playbook
---
- name: with_dict test
debug: msg="{{item.0}} --> {{item.1}}"
with_together:
- key
- value
Я не совсем уверен, но, возможно, это поможет вам по пути:
- hosts: localhost
vars:
dict:
one: 1
two: 2
three: 3
sorted: "{{ dict|dictsort(false,'value') }}"
tasks:
- debug:
var: sorted
- debug:
msg: "good {{item.1}}"
with_items: sorted
Я предполагаю,что вы можете использовать фильтр Jinja для сортировки сложных значений. Еще одна вещь, которую вы можете проверить, - это объединение dict.values()|list
и with_sequence
, но все, что вы доите из этого камня, не будет точно кричать "ремонтопригодно"."