George
дикт смержить с диктом можешь? да
George
пробежаться по внешнему дикту можешь и отинтепретировать каждое его значение (dict - это key-value) как dict можешь? можешь
Andor
for sitename, innerdict in dictofdict.items(): innerdict.update(defaultdict); newdictofdict[sitename] = innerdict
на питоне я эту задачу легко сделаю в две строки как ты описал
George
так jinja и есть пихтон
George
{% for key,value in dict_blablabla.iteritems() %} {{ key }}: - command: {{ value[key] | default(get_value_from_dict(dict, key)) }} {% endfor %}
Timur
for sitename, innerdict in dictofdict.items(): innerdict.update(defaultdict); newdictofdict[sitename] = innerdict
Блин, вот зачем программирование на пустом месте втыкать, а?
George
вот это ясно?
George
а почему нет?
Timur
а почему нет?
Потому что не нужно привлекать лишние сложности без необходимости
Andor
{% for key,value in dict_blablabla.iteritems() %} {{ key }}: - command: {{ value[key] | default(get_value_from_dict(dict, key)) }} {% endfor %}
погоди, я могу жынжей вернуть строку содержащую ямль и оно будет интерпретировано как дикт что ли?
George
согласен
George
в крайнейм случае ему всегда можно сделать | to_json() или как оно там
Andor
from :)
Timur
программирование это не сложно
Ну, так, программируйте на питоне или еще на чем-то. Зачем вам в ансибле это?
Andor
Ну, так, программируйте на питоне или еще на чем-то. Зачем вам в ансибле это?
да я бы на инструменте который оффтоп в этом чяте уже неделю назад всё сделал бы, но решил попробовать ансиблем решить задачу
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 - это кастомизированные значения
Timur
а теперь проитерируйте по внешнему дикту
- name: Combine set_fact: res: '{{ default_dict | combine(item) }}' loop: '{{ ext_dict|dict2items }}'
Andor
item.value вроде
George
только зачем тут dict2items?
Timur
item.value вроде
Ну, как вариант
Timur
Я ж не вижу, что у вас внутри там
Andor
это не у меня там, это в доке https://docs.ansible.com/ansible/latest/user_guide/playbooks_loops.html#iterating-over-a-dictionary
Timur
только зачем тут dict2items?
Потому что loop работает только со списками
Andor
если используешь dict2items, то у тебя внутри будут item.key и item.value
Andor
ага
Andor
спасибо, щас попробую
Andor
ну то есть через set_fact так или иначе
Timur
И никакой жинжи не нужно
George
это еще вопрос, что проще и доступнее для понимания 😊
Timur
это еще вопрос, что проще и доступнее для понимания 😊
Ну, ансибловый синтаксис явно лаконичнее в большинстве случаев
Andor
лично для меня не очевидно что set_fact это всего лишь назначение глобальной переменной
Andor
но видимо просто надо привыкнуть
Timur
В рамках хоста
Timur
А что вы думали делает set_fact?
Andor
ну да, всё верно
Andor
просто нет конструкции чтобы вычислить что-либо и сделать register, потому что оно по-сути будет то же самое
Andor
сложно в общем
Timur
сложно в общем
Ансибл - это не язык программирования
Andor
???
забей
Timur
Если пытаться на нем программировать, то да - будет сложно
Andor
Ансибл - это не язык программирования
могу снова про это поспорить, но не буду
Timur
А для решения задач по автоматизации без программирования он очень прост
Andor
"прост" и "намеренно ограничен и примитивен" - не одно и то же
Timur
Любой инструмент можно счесть примитивным, если использовать его не по назначению
Andor
предлагаю прекратить это бессмысленное обсуждение
George
🤦‍♂️
Timur
Например, микроскоп довольно хреново забивает гвозди
George
любой инстурмент можно счесть довольно сложным, если использовать его не по назначению
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 ?
Gleb
хочу весь выхлоп ansible отправлять в спланк(не оень важно куда на смом деле), подключил колбек - splunk указал параметры - урл и токен - ругается на то что ssl серт самоподписный. В код посмотрел дейставительно без нормального https сейчас работать не умеет. при запуске говорит WARNING]: Failure using method (v2_runner_on_skipped) in callback plugin (<ansible.plugins.callback./usr/local/lib/python2.7/dist- packages/ansible/plugins/callback/splunk.CallbackModule object at 0x7fa495bcbc90>): Failed to validate the SSL certificate for splunk.test.com:8088. Make sure your managed systems have a valid CA certificate installed. You can use validate_certs=False if you do not need to confirm the servers identity but this is unsafe and not recommended. Paths checked for this platform: /etc/ssl/certs, /etc/pki/ca- trust/extracted/pem, /etc/pki/tls/certs, /usr/share/ca-certificates/cacert.org, /etc/ansible. The exception msg was: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:661) причем я локально серт положил и он как бы должен как доверенный быть. но почему то нет. Так вот где предлагаемую опцию заюзать можно validate_certs=False ?