Andrey
А где почитать про лучшие практики? Есть большой схорон знаний. Или все часто?
Vitaliy
Отделение Bereke Bank
Кстати по best practice-ам. Вроде там это не описывается
Насколько хорошая практика хардкодить имя группы в роль?
Например есть роль для раббит кластера. Нужно в конфиг раббита засунуть список хостов группы раббита.
Получается в роли зашивается зависимость от имени группы.
Что-то мне подсказывает что это не очень хорошо.
Как сделать это более грамотно?
Andrey
Спасибо
Vlad
George
Отделение Bereke Bank
zhag
у меня такая странная нужда
zhag
мне нужно таску заранить на хосте который у меня не в инвентори
zhag
Вот спасибо
Max
Alexander
inqfen
Потому что надо лист передавать
Alexander
Да. И?
inqfen
А, и вместо with_items надо использовать loop
Alexander
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
Timur
inqfen
inqfen
Точнее в роли это в defaults делать
inqfen
Потом в случае надобности можно переопределить через инвентори/vars, а так это хардкод
Maksim
Есть плейбук с применением всех бест практикс?
Vitaliy
- name: Install | system packages
apt:
name: "{{ packages }}"
update_cache: yes
vars:
packages:
- "{{ system_packages }}" —> variables
inqfen
а item.state откуда взял?
inqfen
И почему не проще
- name: Install | system packages
apt:
name: "{{ system_packages }}"
update_cache: yes
inqfen
present по дефолту
Vitaliy
ок
Vitaliy
Vitaliy
хотя, дошло.
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
Vitaliy
?
inqfen
Еще есть вот такая штука
https://docs.ansible.com/ansible/latest/user_guide/playbooks_error_handling.html#aborting-the-play
John
John
John
inqfen
zhag
По add_host так и не понял как на нем такску выполнить
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]
Ну то есть он таску пытается выполить на хосте который в инвентори и она не проходит кондишн и скипается
inqfen
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
Alexander
inqfen
Посоны, подскажите как сохранять двойные кавычки при формировании листа