Andrey
А где почитать про лучшие практики? Есть большой схорон знаний. Или все часто?
Отделение Bereke Bank
Кстати по best practice-ам. Вроде там это не описывается Насколько хорошая практика хардкодить имя группы в роль? Например есть роль для раббит кластера. Нужно в конфиг раббита засунуть список хостов группы раббита. Получается в роли зашивается зависимость от имени группы. Что-то мне подсказывает что это не очень хорошо. Как сделать это более грамотно?
Andrey
Спасибо
zhag
у меня такая странная нужда
zhag
мне нужно таску заранить на хосте который у меня не в инвентори
zhag
Вот спасибо
inqfen
Потому что надо лист передавать
Alexander
Да. И?
inqfen
А, и вместо with_items надо использовать loop
Alexander
А, и вместо with_items надо использовать loop
Эээ.... Это не отвечает на мой вопрос )
inqfen
Да. И?
С with items ты запускаешь пакетный менеджер n раз, вместо запуска 1 раз с передачей всех пакетов сразу
stanislav
Да. И?
Loopы для каждого элемента дёргают модуль, если модуль умеет работать со списком, надо этим пользоваться
stanislav
Не все модули это умеют только
inqfen
Это как apt install a apt install b apt install c
inqfen
Вместо apt install a b c
Alexander
А это где-то описано в доках?
Alexander
https://docs.ansible.com/ansible/latest/user_guide/playbooks_loops.html#comparing-loop-and-with Здесь этого не говорят
stanislav
В бестпрактисах вроде.
Alexander
Это как apt install a apt install b apt install c
https://docs.ansible.com/ansible/latest/modules/apt_module.html "When used with a loop: each package will be processed individually, it is much more efficient to pass the list directly to the name option."
Alexander
@inqfen Стоп. Я сравниваю с loop, а ты говоришь о прямой передаче листа. Понял.
Alexander
Не знал.
inqfen
Да, а loop и with_items в общем-то одно и то же, но with_items это старый синтаксис и скоро оно начнёт ругаться, а потом перестанет работать
Alexander
Ну они там пишут, что не скоро...
inqfen
Ну зачем юзать старый синтаксис, если уже есть новый и заранее известно, что старый перестанет работать
inqfen
Меньше передеоываний потом
Alexander
В новых проектах, наверное. Но и сломя голову бежать переделывать старое не факт, что следует.
inqfen
Ну и loop имеет разные плюшки по сравнению с with, это в доках есть
Alexander
Я вижу много дополнительнй ухищрений, вроде |flatten(1)
Timur
В новых проектах, наверное. Но и сломя голову бежать переделывать старое не факт, что следует.
Попробуйте зарелизить на galaxy роль со старым кодом - увидите, что будет
Alexander
Попробуйте зарелизить на galaxy роль со старым кодом - увидите, что будет
Это достаточно странный аргумент ) К тому же, вряд ли кто-то будет выкладывать старый код. Хотя, в galaxy полно треша. Даже если и "приличия" и тренды соблюдены, с архитектурной точки зрения может быть ужас.
Vitaliy
С with items ты запускаешь пакетный менеджер n раз, вместо запуска 1 раз с передачей всех пакетов сразу
Т.е. лучше всё же вот так? - name: Install a list of packages apt: name: "{{ packages }}" vars: packages: - foo - foo-tools
inqfen
Т.е. лучше всё же вот так? - name: Install a list of packages apt: name: "{{ packages }}" vars: packages: - foo - foo-tools
Ну хотя бы так, но лучше это задавать не в таске, а в инвентори
inqfen
Точнее в роли это в defaults делать
inqfen
Потом в случае надобности можно переопределить через инвентори/vars, а так это хардкод
Maksim
Есть плейбук с применением всех бест практикс?
Vitaliy
- name: Install | system packages apt: name: "{{ packages }}" update_cache: yes vars: packages: - "{{ system_packages }}" —> variables
inqfen
а item.state откуда взял?
Vitaliy
Есть плейбук с применением всех бест практикс?
это лишь рекомендации. Следовать им или нет, зависит в общем то от репозитория.
inqfen
И почему не проще - name: Install | system packages apt: name: "{{ system_packages }}" update_cache: yes
Vitaliy
а item.state откуда взял?
забыл. Копировал для примера.
inqfen
present по дефолту
Vitaliy
ок
Vitaliy
хотя, дошло.
inqfen
ну в доке пример такой
Для наглядности, не будут же они там defaults еще рисовать
Vitaliy
ага
John
Есть параметр --forks=1, тогда ансибл будет по одному хосту играть плейбук. А как сделать что бы следующий хост "играл" только если предыдущий завершился без ошибок?
inqfen
serial
inqfen
forks это не то
John
serial
это заставит играть следующий хост только при успешной "игре" на предыдущем?
John
судя по описанию либо вы не правы про "serial", либо я плохо читаю (что не исключено))
inqfen
https://docs.ansible.com/ansible/latest/user_guide/playbooks_delegation.html#maximum-failure-percentage
inqfen
в сериал можно сказать, сколько максимально может упасть
inqfen
Так что видимо таки проблемы с чтением
Vitaliy
?
inqfen
Еще есть вот такая штука https://docs.ansible.com/ansible/latest/user_guide/playbooks_error_handling.html#aborting-the-play
zhag
По add_host так и не понял как на нем такску выполнить
Vitaliy
Да, environment в таск не передастся
круто, кучу строк кода выкинуть ...
zhag
- name: Register packagist add_host: hostname: "packagist" groups: development ansible_ssh_host: "packagist.example.com” ansible_ssh_port: “2222” - name: Witelisting on packagist ufw: rule: allow src: "{{api_ip}}" comment: "{{api_hostname}}" when: inventory_hostname in groups['development’] TASK [api-role : Witelisting on packagist] ******************************************************************************************************************************************************** skipping: [de-fra.staging] Ну то есть он таску пытается выполить на хосте который в инвентори и она не проходит кондишн и скипается
Timur
По add_host так и не понял как на нем такску выполнить
В одном плее делаешь add_host, в другом на эти хосты уже пускаешь таски и роли
inqfen
По add_host так и не понял как на нем такску выполнить
delegate_to или на отдельную группу через hosts
Vitaliy
А как Вам идея использовать модуль package вместо веток для apt для yum, dnf... По доке: Installs, upgrade and removes packages using the underlying OS package manager. Ещё меньше строк кода.
Vitaliy
update_cache правда придётся выкиуть
Vitaliy
https://docs.ansible.com/ansible/latest/modules/package_module.html#package-module
inqfen
Посоны, подскажите как сохранять двойные кавычки при формировании листа