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

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

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

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

2 ответа

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам