У меня есть 2 разных экземпляра базы данных в моей инфраструктуре, каждый из которых используется для сохранения разных данных, каждый работает на разных машинах, и каждому из них нужен разный уровень доступности и безопасности, поэтому, хотя оба они используют Postgresql в качестве базы данных, поскольку каждый из них играет разные «роли» в моей инфраструктуре, я написал разные роли в своем коде ansible, чтобы они были настроены и были готовы обслуживать запросы. Назовем их базой данных A
и B
.
Для A
Мне нужна реплика, управляемая repmgr
, который выполняется на отдельном компьютере, и у меня есть еще одна роль в моих кодах, которая настраивает реплику A
с конфигурацией, специфичной для A
. поскольку A
и копия A
являются не взаимозаменяемы, они не принадлежат к одной группе в файле инвентаря, и там у меня есть A
группа и A_replica
группа, явно отличная.
Теперь я хочу добавить копию B
, с помощью repmgr
как в реплике A
, но я не вижу возможности повторно использовать коды, которые я написал для A
, поскольку они отличаются:
hosts
что задачи playbook выполняются против,template
директивы для создания файлов конфигурации. По умолчанию я определяю их в group_vars
, но я не знаю, как определить их в плейбуках, в частности плейбуках, которые включают другие (низкоуровневые) плейбукиЕсть ли решение, или я должен буквально скопировать и вставить коды для 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
.
Надеюсь это поможет!