George
дикт смержить с диктом можешь? да
George
пробежаться по внешнему дикту можешь и отинтепретировать каждое его значение (dict - это key-value) как dict можешь? можешь
Andor
George
так jinja и есть пихтон
George
{% for key,value in dict_blablabla.iteritems() %}
{{ key }}:
- command: {{ value[key] | default(get_value_from_dict(dict, key)) }}
{% endfor %}
Timur
George
вот это ясно?
Andor
Timur
George
а почему нет?
Timur
а почему нет?
Потому что не нужно привлекать лишние сложности без необходимости
Andor
George
согласен
George
Andor
George
в крайнейм случае ему всегда можно сделать | to_json() или как оно там
Andor
from :)
Timur
Andor
я уже объяснил задачу, которую хочу решить и @gecube даже понял, что мне надо
George
@tgadiev хватит
George
даже мне ясно о чем идет речь. Хватит прикидываться дурачком
George
решите в общем случае, @Andorka достаточно вменяем, чтобы это перенести на свой кейс
Andor
мне очень не нравится идея это делать через from_json/whatever
Andor
ну то есть через сериализацию/десериализацию
George
ну сделай как-нибудь. потом можно оптимзировать, когда есть готовое решение, кмк
Timur
В общем случае все просто:
- name: Combine
set_fact:
res: '{{ default_dict | combine(custom_dict) }}'
George
а теперь проитерируйте по внешнему дикту
George
который содержит элементы типа custom_dict
Andor
хмм, а сет-факт можно итерировать?
Andor
а то то ли include_role, то ли import_role нельзя
George
key будет, например, название сайта, а custom_dict - это кастомизированные значения
George
Andor
item.value вроде
George
только зачем тут dict2items?
Timur
Я ж не вижу, что у вас внутри там
Andor
это не у меня там, это в доке https://docs.ansible.com/ansible/latest/user_guide/playbooks_loops.html#iterating-over-a-dictionary
Andor
если используешь dict2items, то у тебя внутри будут item.key и item.value
Timur
Andor
ага
Andor
спасибо, щас попробую
Andor
ну то есть через set_fact так или иначе
Timur
И никакой жинжи не нужно
George
это еще вопрос, что проще и доступнее для понимания 😊
Andor
Andor
лично для меня не очевидно что set_fact это всего лишь назначение глобальной переменной
Andor
но видимо просто надо привыкнуть
Timur
Timur
В рамках хоста
Timur
А что вы думали делает set_fact?
Andor
ну да, всё верно
Andor
просто нет конструкции чтобы вычислить что-либо и сделать register, потому что оно по-сути будет то же самое
Timur
Andor
сложно в общем
Andor
Timur
Если пытаться на нем программировать, то да - будет сложно
Timur
А для решения задач по автоматизации без программирования он очень прост
Andor
"прост" и "намеренно ограничен и примитивен" - не одно и то же
Timur
Timur
Любой инструмент можно счесть примитивным, если использовать его не по назначению
Andor
предлагаю прекратить это бессмысленное обсуждение
George
🤦♂️
Timur
Например, микроскоп довольно хреново забивает гвозди
George
любой инстурмент можно счесть довольно сложным, если использовать его не по назначению
Timur
Andor
- name: combine with defaults
set_fact:
my_nginx_http_template: "{{ { item.key: my_nginx_sites_defaults | combine(item.value) } }}"
loop: "{{ my_nginx_sites | dict2items }}"не знаю как будет работать если будет больше одного элемента в исходном дикте, но пока и так норм
Andor
спасибо
George
Выглядит достаточно мозголомно, но, в целом, терпимо
Andor
я придумал как сделать чтобы можно было несколько
Andor
по аналогии с вот этим https://stackoverflow.com/questions/43631390/ansible-set-fact-array-and-populate-it-from-in-loop/43633611 но через combine потому что хеш
Andor
- name: combine with defaults
set_fact:
my_nginx_http_template: >
{{ my_nginx_http_template | default({}) | combine({ item.key: my_nginx_sites_defaults | combine(item.value) }) }}
loop: "{{ my_nginx_sites | dict2items }}"вы все этого ждали
Sheridan
action
а если это ansible 2.2 ?