Как я могу абстрагироваться от Ansible ролей?

0

У меня есть 2 разных экземпляра базы данных в моей инфраструктуре, каждый из которых используется для сохранения разных данных, каждый работает на разных машинах, и каждому из них требуется разный уровень доступности и безопасности, поэтому оба они используют Postgresql в качестве базы данных, поскольку каждый из них воспроизводит Различная «роль» в моей инфраструктуре. Я написал разные роли в моем коде ANSI для их настройки и готовности к обслуживанию запросов. Давайте назовем их базой данных Aи B.
Для Aменя нужна копия, управляемый repmgr, который запускается на отдельном компьютере, и у меня есть другая роль в моих кодов , который устанавливает точную копию Aс конфигурацией конкретного к A. Поскольку Aи реплики неA являютсявзаимозаменяемы, они не принадлежат к одной и той же группе в файле инвентаризации, и там у меня есть Aгруппа и A_replicaгруппа, явно различающиеся.
Теперь я хочу добавить реплику B, используя то repmgrже самое, что и в реплике A, но я не вижу способа повторно использовать коды, для которых я написал A, так как они отличаются:

  • hosts что задачи playbook сталкиваются,
  • Некоторые переменные, которые используются в templateдирективах для генерации конфигурационных файлов. По умолчанию я определяю их в group_vars, но я не знаю, как определить их в книгах, особенно в книгах, включающих другие (более низкие) книги

Есть ли решение, или я должен буквально копировать и вставлять коды для B?
Большое спасибо.

sazary
источник

Ответы:

0

Во-первых, для hostsцели вы можете установить ее как дополнительные переменные в командной строке (вы можете найти другой пример, используя дополнительные переменные здесь ).

Если вы используете разные переменные в файле шаблона для каждого из этих двух случаев, убедитесь, что перед тем, как продолжить, проверьте, указана ли переменная . Затем используйте host_varsвместо group_vars.

Надеюсь это поможет!

ремесло
источник
0

другая роль в моих кодах, которая устанавливает реплику Aс конфигурацией, специфичной дляA

Для максимального повторного использования извлеките всю конфигурацию, которая может отличаться, в переменные и шаблоны. Первичное / вторичное логическое значение, имена хостов и порты, пользователи и секреты. Обобщать может означать быть более умным, например, использовать операторы if в шаблонах в зависимости от того, нужна ли реплика или нет. Успех в абстракции означает, что вы (или кто-то еще, если вы публикуете на Галактике!) Можете повторно использовать эту роль в других проектах.

По умолчанию я определяю их в group_vars, но я не знаю, как определить их в playbooks, особенно в playbooks, которые включают другие (более низкого уровня) playbooks

Есть много мест для размещения переменных: Приоритет переменной: куда я должен поместить переменную?

Пользователь admin, которого вы всегда создаете, может быть ролью по умолчанию, логическое значение «Я - реплика», вероятно, входит в группу var, имя репликации конкретной базы данных, вероятно, помещается в переменную host. Таким образом, вы можете запустить игру, hosts: A_replica,B_replicaно каждый использует свою уникальную конфигурацию.

Одним из мощных способов создания «подклассифицированных» ролей является использование ролевых зависимостей . Создайте полнофункциональную, но абстрактную роль db. Создайте роли для каждого экземпляра базы данных, db-aи db-bу каждого из них есть зависимости dbв мета. Роли A и B должны содержать только разные переменные, а может быть, задачу или две.

Джон Маховальд
источник