LINUX.ORG.RU

История изменений

Исправление 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 в выхлопе.

Вот примерно так. А хотелось бы серебряную пулю.