Anonymous
Nz будет жить. Поприветствуем!
Dr_Rob0tnik
Добрый день, мне скорей всего не сюда, но вдруг. Есть плейбук одним из тасков которого является проверка кол-ва памяти. При первом запуске он ругнулся (памяти было меньше чем положено). Я добавил в виртуалку память, перезапустил плейбук и получаю такую ошибку fatal: [node-4]: FAILED! => { "assertion": "ansible_memtotal_mb >= minimal_node_memory_mb", "changed": false, "evaluated_to": false, "msg": "Assertion failed" } Данные как-то закешировались?
Dr_Rob0tnik
} ok: [node-2] => { "msg": 2004 } ok: [node-3] => { "msg": 2004 } ok: [node-4] => { "msg": 996 }
Dr_Rob0tnik
хотя должно быть 2004
Alex
хотя должно быть 2004
а /proc/meminfo показывает правильное значение?
Timur
хотя должно быть 2004
Значит, либо кэширование, либо сама операционка еще память не увидела
Gleb
} ok: [node-2] => { "msg": 2004 } ok: [node-3] => { "msg": 2004 } ok: [node-4] => { "msg": 996 }
ansible.cfg посмотри не кешируешь ли ты факты где-нибудь
Dr_Rob0tnik
Всем спасибо, --flush-cache помог ) Так же в ansible.cfg нашел fact_caching = jsonfile fact_caching_connection = /tmp
Отделение Bereke Bank
а можно в конструкции groups[group_name] как-то использовать переменную? ну там типа groups[{{ backends }}] ?
Отделение Bereke Bank
{{ groups[backends] }}
спасибо. туплю чет, конечно. под рукой похожая тема с hostvars, а тут заклинило 😐
Anonymous
Konstantin Alekseev будет жить. Поприветствуем!
Anonymous
а как написать правильно условие when, чтобы таск выполнялся только когда переменная определна
Kirill
У меня вот так написано: - import_playbook: hci-deploy.yml when: deploy == 'yes'
Sergey
а как написать правильно условие when, чтобы таск выполнялся только когда переменная определна
Использовать группы? 😉 Но вообще вот так: when: var_name is defined https://docs.ansible.com/ansible/latest/user_guide/playbooks_conditionals.html
[IPT] Dmitry
и не всегда так нужно, иногда она может быть задана, но пустой
Anonymous
ну что то не взлетает таск такой - name: get vault data uri: url: "examole.com" body_format: json headers: Accept: 'application/json' X-Vault-Token: "{{vault_normalized_access_token}}" method: GET register: key_value with_items: "{{vault.secret}}" when: {{ item }} is defined
Anonymous
ошибка
Anonymous
The offending line appears to be: with_items: "{{vault.secret}}" when: {{ item }} is defined ^ here
Anonymous
понял, правлю
Anonymous
помогло, спасибо
Sergey
помогло, спасибо
Ога, велкам. Но насчёт групп ты всё же подумай.
Anonymous
в каком плане группы ?
Anonymous
это посто доп условия на один из универсальныз конфигов - чтобы не падало, если не определы vault
Sergey
Таски должны назначаться хостам преимущественно через группы.
Sergey
это посто доп условия на один из универсальныз конфигов - чтобы не падало, если не определы vault
Ну это прям забавно: «В машину бензин не залит - ничего страшного, обработаем ситуацию, приделаем сбоку педали».
Anonymous
ну тут да, надо будет разлеоить логику по разным ролями
Timur
with_items и ненужная проверка вместо фильтра
Timur
loop: '{{ vault.secret | select("defined") }}' Вот так сделайте. И никакого when не нужно будет
Anonymous
а в чем принципиальное отличии loop от with_items ?
Anonymous
Окей, перепишу на фильтр
Anonymous
понял, спасибо
Max
в новых версиях увидишь warningи
Pavel
в том, что with_* - deprecated
ну и кроме того в loop много чего прикрутили дополнительного, по сравнению с with_*
Max
loop control был уже давно.
Anonymous
- name: get vault data uri: url: "example.com/{{vault.server}}/{{item.key_name}}" body_format: json headers: Accept: 'application/json' X-Vault-Token: "{{vault_normalized_access_token}}" method: GET register: key_value loop: '{{vault.secret}} | select("defined»)’
Anonymous
{"msg": "'vault' is undefined"}
Anonymous
а понял где ошибка
Anonymous
а в чем принципиальное отличии loop от with_items ?
with_* это набор плагинов. loop реализован внутри "цикла/конвеера" выполнения тасков. поэтому можно использовать loop control... в комбинации с include_tasks иногда упрощает жизнь.
Anonymous
ну и кроме того в loop много чего прикрутили дополнительного, по сравнению с with_*
например, pause добавили в loop_control. побробней, тут https://github.com/ansible/ansible/blob/devel/lib/ansible/executor/task_executor.py#L276
Anonymous
для 2.8 https://docs.ansible.com/ansible/latest/user_guide/playbooks_loops.html#extended-loop-variables
Anonymous
https://github.com/ansible/ansible/pull/42134
Anonymous
думаю, можно это куда то в faq вынести. часто спрашивают: "в чем различие with_* и loop?"
Anonymous
на усмотрение админов
Anonymous
ну я все же внял совету Сергея и пошел по пути разделения ролей
Anonymous
ну я все же внял совету Сергея и пошел по пути разделения ролей
¯\_(ツ)_/¯ , мой ответ был про отличие loop от with_*
Anonymous
ну loop c when взлетел, а вот loop как рекомнедовал Тимур - нет
Anonymous
loop: '{{ vault.secret | select("defined") }}'
Max
loop: '{{ vault.secret | select("defined") }}'
это будет работать, если структура vault подходит. т.е. что есть: vault: secret: defined: - xxxxxx - yyyyyy - zzzzzz я не знаю что там внутри vault у тебя.
Anonymous
Я понимаю. Оно так и работает
Anonymous
Задача была что если vault не определён, таск не выполнять.
Max
а что @tgadiev рекоммендовал?
Anonymous
Сначала рашил костылем через when, потом разнёс
Anonymous
loop: '{{ vault.secret | select("defined") }}' Вот так сделайте. И никакого when не нужно будет
Max
loop: '{{ vault.secret.defined | default([]) }}'
Max
фильтр default будет выплевывать пустой список при активации.
Anonymous
это будет работать если vault определен
Max
это будет работать если vault определен
это будет работать, даже если vault не определен..... или secret, или defined
Anonymous
если переменная vault не определена, то увы
Anonymous
нельзя взять ключ от переменной, которой нету. 2.6
Anonymous
в 2.8 вроде работает, но не проверял
Max
нельзя взять ключ от переменной, которой нету. 2.6
https://github.com/pallets/jinja/blob/8a49e066af3d88d1edb34aa1680b668c959dfcf7/jinja2/filters.py#L284
Max
эти строки меняли посл. раз 7 лет назад...
Anonymous
хм, можно вывод с -vvv
Anonymous
пример
Max
http://dpaste.com/2S4HQ57
Max
-vvvv надо будет чистить.
Max
неохота :)
Anonymous
не вижу ключа