История изменений
Исправление slovazap, (текущая версия) :
Каждый сервис - отдельная роль, желательно с параметрами для гибкости. Для каждой группы хостов набор сервисов определяется подключенными ролями в плейбуке для этой группы хостов. Все плейбуки сводятся в одну в общей site.yml.
Да, так и сделано, я просто немного подзабыл уже терминологию. Проблема в том, что каждый хост при такой схеме определяется своим плейбуком, потому что групп у меня нет - все хосты разные, но набор сервисов пересекается. Т.е. сейчас так:
- hosts: hosta
roles
- s1
- s2
- s3
- hosts: hostb
roles
- s2
- s3
- s4
- hosts: hostc
roles
- s1
- s4
- s5
Не устраивает то что это не наглядно и исполняется последовательно (сначала hosta, потом hostb, потом hostc), а хотелось бы параллельно и так чтобы результаты по s1 для hosta и hostc показались рядом.
Можно сделать так:
- hosts: hosta hostc # или сделать группу типа servers-that-run-s1
roles:
- s1
- hosts: hosta hostb
roles:
- s2
- hosts: hosta hostb
roles:
- s3
- hosts: hostb hostc
roles:
- s4
- hosts: hostc
roles:
- s5
Это нагляднее и исполняется примерно как я хочу, но в такой ситуации неудобно работать с зависимостями (если s1 зависит от s2, то s2 будет применено два раза - в первой playbook как зависимость s1 и во второй самостоятельно), а также для каждой playbook соединение и опрос всех хостов выполняется заново, это медленно.
А можно сделать так (синтаксис наизусть не помню, пишу примерно):
- hosts: hosta hostb hostc
roles:
- s1 { when $hostname in $servers-that-run-s1 }
- s2 { when $hostname in $servers-that-run-s2 }
- s3 { when $hostname in $servers-that-run-s3 }
- s4 { when $hostname in $servers-that-run-s4 }
- s5 { when $hostname in $servers-that-run-s5 }
Но это костыльно, куча skipped в выхлопе и кажется были ещё какие-то проблемы, возможно также с зависимостями.
В общем у каждого способа свои минусы, а хочется не иметь их вообще.
Исправление slovazap, :
Каждый сервис - отдельная роль, желательно с параметрами для гибкости. Для каждой группы хостов набор сервисов определяется подключенными ролями в плейбуке для этой группы хостов. Все плейбуки сводятся в одну в общей site.yml.
Да, так и сделано, я просто немного подзабыл уже терминологию. Проблема в том, что каждый хост при такой схеме определяется своим плейбуком, потому что групп у меня нет - все хосты разные, но набор сервисов пересекается. Т.е. сейчас так:
- hosts: hosta
roles
- s1
- s2
- s3
- hosts: hostb
roles
- s2
- s3
- s4
- hosts: hostc
roles
- s1
- s4
- s5
Не устраивает то что это не наглядно и исполняется последовательно (сначала hosta, потом hostb, потом hostc), а хотелось бы параллельно и так чтобы результаты по s1 для hosta и hostc показались рядом.
Можно сделать так:
- hosts: hosta hostc # или сделать группу типа servers-that-run-s1
roles:
- s1
- hosts: hosta hostb
roles:
- s2
- hosts: hosta hostb
roles:
- s3
- hosts: hostb hostc
roles:
- s4
- hosts: hostc
roles:
- s5
Это нагляднее и исполняется примерно как я хочу, но в такой ситуации неудобно работать с зависимостями (если s1 зависит от s2, то s2 будет применено два раза - в первой playbook как зависимость s1 и во второй самостоятельно), а также для каждой playbook соединение и опрос всех хостов выполняется заново, это медленно.
А можно сделать так (синтаксис наизусть не помню, пишу примерно):
- hosts: hosta hostb hostc
roles:
- s1 { when $hostname in $servers-that-run-s1 }
- s2 { when $hostname in $servers-that-run-s2 }
- s3 { when $hostname in $servers-that-run-s3 }
- s4 { when $hostname in $servers-that-run-s4 }
- s5 { when $hostname in $servers-that-run-s5 }
Но это костыльно и куча skipped в выхлопе.
Вот примерно так. А хотелось бы серебряную пулю.
Исходная версия slovazap, :
Каждый сервис - отдельная роль, желательно с параметрами для гибкости. Для каждой группы хостов набор сервисов определяется подключенными ролями в плейбуке для этой группы хостов. Все плейбуки сводятся в одну в общей site.yml.
Да, так и сделано, я просто немного подзабыл уже терминологию. Проблема в том, что каждый хост при такой схеме определяется своим плейбуком, потому что групп у меня нет - все хосты разные, но набор сервисов пересекается. Т.е. сейчас так:
- hosts: hosta
roles
- s1
- s2
- s3
- hosts: hostb
roles
- s2
- s3
- s4
- hosts: hostc
roles
- s1
- s4
- s5
Не устраивает то что это не наглядно и исполняется последовательно (сначала hosta, потом hostb, потом hostc), а хотелось бы параллельно и так чтобы результаты по s1 для hosta и hostc показались рядом.
Можно сделать так:
- hosts: hosta hostc # или сделать группу типа s1-servers
roles:
- s1
- hosts: hosta hostb
roles:
- s2
- hosts: hosta hostb
roles:
- s3
- hosts: hostb hostc
roles:
- s4
- hosts: hostc
roles:
- s5
Это нагляднее и исполняется примерно как я хочу, но в такой ситуации неудобно работать с зависимостями (если s1 зависит от s2, то s2 будет применено два раза - в первой playbook как зависимость s1 и во второй самостоятельно), а также для каждой playbook соединение и опрос всех хостов выполняется заново, это медленно.
А можно сделать так (синтаксис наизусть не помню, пишу примерно):
- hosts: hosta hostb hostc
roles:
- s1 { when $hostname in $s1-hosts }
- s2 { when $hostname in $s2-hosts }
- s3 { when $hostname in $s3-hosts }
- s4 { when $hostname in $s4-hosts }
- s5 { when $hostname in $s5-hosts }
Но это костыльно и куча skipped в выхлопе.
Вот примерно так. А хотелось бы серебряную пулю.