Asgoret
Откуда трансформировать-то? Выше конструкция {{ tags | dict2items }} - это значит, что нужно взять словарь из переменной tags и обработать его фильтрм dict2items
убрал лишние переменные: - hosts: localhost tasks: - name: Find all config files find: paths: "/Users/user/Documents/GitLab/deploy/roles/test/configs/server" patterns: '*.env' register: env - name: Create output vars: contents: "{{ lookup('file', item.path ) }}" debug: msg: "{{ contents | dict2items }}" loop: "{{ env.files }}"
Timur
ТЫ НЕ ПОВЕРИШь {{ ansible_hostname | lower }}
Рекомендую читать дальше
Asgoret
Asgoret
И как теперь? Работает?
есть варианты решения?
Timur
есть варианты решения?
Вот так попробуйте: - hosts: localhost tasks: - name: Find all config files find: paths: "/Users/user/Documents/GitLab/deploy/roles/test/configs/server" patterns: '*.env' register: env - name: Create output include_vars: file: "{{ item.path }}" name: contents loop: "{{ env.files }}" - name: Output debug debug: msg: "{{ contents | dict2items }}"
Timur
еее! спасибо) заработало) тогда вопрос: что было не так в прошлый раз? или это уже лонгрид?
В прошлый раз вы считывали не переменные из файла, а просто файл как текст
Timur
А потом пытались обработать его как словарь, которым он не является
Asgoret
В прошлый раз вы считывали не переменные из файла, а просто файл как текст
понял, а фишка как в items2dict(key_name='key', value_name='value') }} чтобы задать кастомные ключ/значение не завезли или это надо как-то через пайп задать?
Asgoret
а я тебя не понял. в твоем сообщении скрыт ответ.
я попробовал сделать по аналогиии с items2dict и получил template error while templating string: expected token ',', got ':'. String: {{ contents | dict2items(name:'key', value:'value') }}"}
Asgoret
Что хотите получить-то в итоге?
dict2items возврщает key:key, value:value. Хочу заменить key на name
Asgoret
ну и в файлик писать не монострокой) но это дальше и не должно вызвать проблем надеюсь
Timur
dict2items возврщает key:key, value:value. Хочу заменить key на name
Так у вас же изначально в файле словарь был. Что именно вы там поменять хотите?
Timur
Сначала спрашиваете, как в список превратить, а теперь хотите обратно в словарь?
Timur
Было: key:value Стало: key: key value: value Надо: name: key value: value
Луп с комбайном в помощь. Например, как здесь: https://stackoverflow.com/questions/48825583/in-ansible-how-do-you-change-a-existing-dictionary-hash-values-using-a-variable
Timur
Но лучше сразу описать на более высоком уровне - что вы хотите сделать
Timur
Чаще всего более простой путь лежит чуть в стороне от выбранного вами
Asgoret
Но лучше сразу описать на более высоком уровне - что вы хотите сделать
на более высоком не уверен, что получится тк это потом встраивается в более большой плейбук, как часть роли и последующие деплой
Timur
Может, попробуете все-таки? Что за данные вы хотите взять и для чего они вам нужны именно в таком виде?
Max
hrenak, hrenak и в продакшон.
Max
вау, кау сердешно смотрит бабуля-то!
Asgoret
Деплоймент конфига
Max
ну и....
Timur
ну и....
Присоединяюсь
Timur
Деталей добавьте
Asgoret
Возможно
Asgoret
@rulev возможно
Asgoret
А за что удалили?)
Александр
emergy@MacBook-Pro-Emergy:~$ cat test.yml - hosts: localhost gather_facts: no vars: itemz: - key: value tasks: - debug: msg: "{{ itemz | json_query('[*].{name: key}') }}" emergy@MacBook-Pro-Emergy:~$ ap test.yml PLAY [localhost] *************************************************************************************************************************************************************** TASK [debug] ******************************************************************************************************************************************************************* ok: [localhost] => { "msg": [ { "name": "value" } ] } PLAY RECAP ********************************************************************************************************************************************************************* localhost : ok=1 changed=0 unreachable=0 failed=0
Александр
http://jmespath.org/ - отлаживать здесь удобно
George
Если тут есть jinja-ninja, вот "интересная" задача. Я не сумел решить без include'ов, а вы сумеете? https://stackoverflow.com/questions/54766922/iterate-over-list-of-dictionaries-with-nested-list-in-ansible
George
Решается через макросы джинджи рекурсивные.
Рекурсивные макросы jinja? Без простыни template'ов?
Sergey
Да.
Timur
Решается через макросы джинджи рекурсивные.
Да и без них можно, скорее всего
Sergey
Да и без них можно, скорее всего
Ну я просто вспомнил то, что точно видел живьём.
George
Всё, спасибо. subelement сработал, хотя его вывод потом расковыривать то ещё удовольствие. {{ example|subelements("inner_list") }}, и потом '{{ item.0.mykey }}, {{item.1}}
Timur
Всё, спасибо. subelement сработал, хотя его вывод потом расковыривать то ещё удовольствие. {{ example|subelements("inner_list") }}, и потом '{{ item.0.mykey }}, {{item.1}}
У меня вот так работает: - name: Out nested debug: msg: '{{ item.0.mykey }} with {{ item.1 }}' loop: "{{ (example | subelements('fields', skip_missing=True)) + (example | subelements('inner_list', skip_missing=True)) }}"
George
Ой, мои кривые руки. Оно inner_list в обоих случаях.
George
(не поправил продакшен-имена)
Timur
Ну, тогда вообще все просто
George
Ага, вот итоговое (вместе с тем, что я знал как сделать): --- - hosts: localhost tasks: - set_fact: cq_res: '{{ cq_res|d([]) + [cq_name] }}' loop: '{{ all_rate_cq }}' vars: cq_name: '{{ rp }}_{{ measurement }}_{{ field }}' rp: '{{ item.2 }}' measurement: '{{ item.0.measurement }}' field: '{{ item.1 }}' all_rate_cq: '{{ lookup("cartesian", extracted_values, policies) }}' extracted_values: '{{ example|subelements("fields") }}' - debug: var=item when: ("std31" not in item) loop: '{{ cq_res }}' vars: policies: - std2 - std7 - std31 - stdinf example: - measurement: ceph fields: - read - wrire - measurement: osd_stats fields: - recovery_r - recovery_w
Timur
- name: Out nested debug: msg: '{{ item.0.mykey }} with {{ item.1 }}' loop: "{{ example | subelements('inner_list', skip_missing=True) }}"
George
Мне стыдно и гордо одновременно.
George
Всего лишь тройная вложенность с ветвлением внутри линейного списка. А главное, читающий это человек даже не будет подозревать как опасно близко он подошёл к трясине...
Ждун
Народ, а как вы думаете, нужен ли в windows среде ansible, если есть Active Directory и Group Policy?
Oleksandr
Народ, а как вы думаете, нужен ли в windows среде ansible, если есть Active Directory и Group Policy?
нужен, потому что CI/CD никто не будет учить дергать групповые политики и остальное виндовозно-специфическое
Ждун
CI/CD энсибл не нужен, там свое есть
Ждун
вот это я пытаюсь и выяснить
Anonymous
Кейс какой?
Ждун
:D от того, что вопрос переформулировать, ответ на него не поменяется
Anonymous
Сам могу себе ансибл не нужен) он решает определенные задачи. Вопрос: какие именно задачи есть необходимость решить?
Timur
Нужно понять задачу
Timur
Если задача - запустить баш-скрипт на удаленном хосте, набрав в консоли ansible, то нафиг не нужен
Ждун
для этого есть Powershell remoting
Timur
Вот и я о том же
Timur
Так что смотрите вопрос выше
дед Максим
Привеет)
дед Максим
Тут я с асниблом все маюсь) Нужна помосч) Может чего не понимаю. https://paste.ubuntu.com/p/Vq4fBZqB4z/
Timur
Какой тип авторизации?
дед Максим
Какой тип авторизации?
https://paste.ubuntu.com/p/VqsnxPcgVb/
дед Максим
ия не помимаю, почему он ломится под логином root, когда в файле у меня написано ansible_user=ansible , а не root
дед Максим
причем, если выполнить питоновский скрипт from winrm.protocol import Protocol p = Protocol( endpoint='http://10.0.13.104:5985/wsman', transport='ntlm', username=r'administrator', password='secret', server_cert_validation='ignore') shell_id = p.open_shell() command_id = p.run_command(shell_id, 'ipconfig', ['/all']) std_out, std_err, status_code = p.get_command_output(shell_id, command_id) p.cleanup_command(shell_id, command_id) print(std_out, status_code) p.close_shell(shell_id) то он отрабатывает и я вижу коннект.
дед Максим
ntlm
Timur
А, стоп
Timur
Вы пытаетесь модуль setup вызвать?
дед Максим
угу