Timur
По нему луп делать бессмысленно
Timur
И да - перестаньте использовать with_items наконец!
Ilya
Может имеет смысл описать исходную задачу?
Вполне. необходимо создать группы виртуальных машин в облаке. Имена групп и их количество описывается в файле instance.yml . Например: --- instance: - a1 - a2 - a3 - a4 В каждой группе создается некоторе количество виртуалок, с параметрами, описывемых в фалах vm-infra... ( имя темплейта, память, диски, параметрыы инициализации и .т.д.) . Например: --- vm_infrastructure_options: ipa: description: "Сервер IPA" vm_name: "Name1" vm_type: "server" vm_hdd: "25" vm_hdd_provisioning: "preallocated" vm_ram: "2048" vm_cpu: "1" vm_cores: "2"
Ilya
И да - перестаньте использовать with_items наконец!
буду благодарен, если подскажете что использовать и как.
Denis
То есть instance это список имен групп, без самих переменных?
Ilya
да
Denis
With the release of Ansible 2.5, the recommended way to perform loops is the use the new loop keyword instead of with_X style loops.
Denis
https://docs.ansible.com/ansible/latest/user_guide/playbooks_loops.html?highlight=loop#migrating-to-loop
Denis
А все переменные лежат в подключаемых через include_vars файлах?
Ilya
А, т.е. переменные нужно считывать не из списка, о котором вы говорили, а из файлов по определенным путям?
они в первом таске загружаются из файлов . путь формируется по списку.
Ilya
Нет. Но будет правильнее)
- name: show dict debug: msg: - "{{ item.network_params }}" loop: '{{ instance|flatten(levels=1) }}'
Ilya
"The task includes an option with an undefined variable.
Ilya
В каком таске?
- name: Include_vars include_vars: dir: './group_vars/{{item}}' name: '{{ item }}' with_items: "{{ instance }}" да, сорри за итемс )) счас переделаю
Sergey
Коллеги, добрый день!
Denis
"The task includes an option with an undefined variable.
Если в списке только имена групп, врядли получится извлечь из них переменные групп
Denis
item в этом цикле это просто строка
Sergey
Подскажите пожалуйста как можно обернуть в jinja следующую конструкцию , чтобы проверить наличие элементов в списке location.proxy_set_header {% if location.proxy_params is not defined or location.proxy_params is sameas false %} {% for header in location.proxy_set_header recursive -%} proxy_set_header {{ header }}; {% endfor %}
Ilya
Просто дебаг item сделайте в цикле
- name: show dict debug: msg: - "{{ item }}" loop: '{{ instance|flatten(levels=1) }}'
Ilya
TASK [show dict] ************************************************************************************************************************************************************ ok: [localhost] => (item=a1) => { "msg": [ "a1" ] } ok: [localhost] => (item=a2) => { "msg": [ "a2" ] } ok: [localhost] => (item=a3) => { "msg": [ "a3" ] } ok: [localhost] => (item=a4) => { "msg": [ "a4" ] }
Timur
Смотрите правильность путей и имён
Timur
А, не
Timur
Стоп
Ilya
Смотрите правильность путей и имён
нет, все считалось ok: [localhost] => (item=a4) => {"ansible_facts": {"a4": {"network_params":
Timur
Через лукап надо смотреть
Ilya
Через лукап надо смотреть
подскажите плиз как.
Timur
lookup(‘vars’, item)
Timur
В цикле
Timur
Вместо item
Антон
коллеги, подскажите пожалуйста с blockinfile по описанию он может заменить один кусок текста на другой но я в упор никак не могу понять где выставить что на что менять параметр block описывает что вставить, но вопрос в том как ему сказать вместо чего
Антон
есть блок текса А, его нужно заменить на блок текста Б
Антон
куда вписывать блок Б - понятно, в block
Антон
а вот куда писать блок текста А?
Timur
Антон
да
Антон
2 раза
Антон
примеры тоже посмотрел
Timur
да
И что там непонятного?
Антон
непонятно вот это: есть блок текса А, его нужно заменить на блок текста Б куда вписывать блок Б - понятно, в block а вот куда писать блок текста А?
Timur
Обратите внимание на параметры marker
Антон
да, я читал про них
Антон
добавляют инфу что тут вставлен кусок текста ансиблом
Ilya
lookup(‘vars’, item)
не понимаю.
Denis
не понимаю.
Это способ обратиться к переменной с именем, хранящемся в переменной item
Ilya
Это способ обратиться к переменной с именем, хранящемся в переменной item
- name: show dict debug: msg="{{ lookup(‘vars’, item) }}" loop: '{{ instance|flatten(levels=1) }}' наверное, так?
Timur
Только flatten можно убрать
Ilya
Только flatten можно убрать
не работает. я уже потерял связь с реальностью ))
Ilya
{"msg": "template error while templating string: unexpected char u'\\u2018' at 10. String: {{ lookup(‘vars’, item) }}"}
Ilya
Очевидно жи - юникод-символ вместо латиницы
Unicode Character 'LEFT SINGLE QUOTATION MARK' (U+2018) - это? но где,....
Ilya
lookup(‘vars’, item) - вот первая ' ? на нее и ругается
Timur
Кавычки поставьте нормальные
Timur
Тут телеграм мог не те символы вставить
Timur
Обычные одинарные кавычки поставьте
Ilya
Обычные одинарные кавычки поставьте
ого! ошибки нет. спасибо парни! это победили. но нужно теперь сконструировать {{ item }}.network_params
Timur
И смотрите что получается
Ilya
и вот даже спросить боюсь: а перебрать все словари, подставляя в loop значения этого item ? шизофренией не попахивет?
Ilya
И смотрите что получается
вот просто с items TASK [show dict] ************************************************************************************************************************************************************ ok: [localhost] => (item=a1) => { "msg": { "network_params": { "NTP": "10.10.10.1", "description": "network1", "domain": "network1.local", "gateway": "10.10.10.1", "label": "network1", "netmask": "255.255.255.0", "subnet": "10.10.10.0" }, - name: show dict debug: msg='{{ lookup('vars', item.network_params) }}' loop: "{{ instance | flatten(levels=1) }}" "msg": "The task includes an option with an undefined variable
Ilya
да, попробую утром. спасибо за помощь!
Vitaly
/help@ansible_ru_bot
Anonymous
@Kvagalex будет жить. Поприветствуем!
Ilya
TASK [show dict] ************** ok: [localhost] => (item=a1) => { "msg": { "NTP": "10.10.10.1", "description": "network1", "domain": "network1.local", "gateway": "10.10.10.1", "label": "network1", "netmask": "255.255.255.0", "subnet": "10.10.10.0" } ok: [localhost] => (item=a2) => { "msg": { "NTP": " и так далее...
Ilya
и самое страшное : теперь я получаю содержимое справочника с опциями виртуалок. теперь нужно перебрать по каждому серверу. я так понимаю что это nested loop?
Ilya
ok: [localhost] => (item=a1) => { "msg": { "ipa": { "cluster_name": "cluster", "description": "Сервер IPA", "storage": "stor", }, "ipa-replica": { "cluster_name": "virt", "description": "ipa-реплика", "storage": "stor", },
Ilya
вот вывод одного item/