Как я могу абстрагироваться от 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 должны содержать только разные переменные, а может быть, задачу или две.