Назад | Перейти на главную страницу

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

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

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

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

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

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

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

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

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

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

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

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