2016-03-18 1 views
0

Я пишу книгу для прослушивания Ansible, которая устанавливает системы, где в некоторых конфигурациях некоторые системы могут быть предоставлены другой организацией. Очень простой пример:Ansible: Включая неконфигурированные системы в конфигурацию

Inventory:

  • приложение, сервер
  • БД сервера

Playbook: Настройка вверх оба сервера, а также добавить application.properties файл сервера приложений с IP, порт и пользователь/пропуск сервера db.

Работает до сих пор, но при этом возникает требование, что в некоторых развертываниях сервер БД предоставляется другой организацией, поэтому я не могу включить его в инвентарь, поскольку шаг настройки завершается с ошибкой, но я все же хочу сгенерировать файл свойств для сервера приложений (с информацией сервера db, которую я получаю от других людей).

Что было бы наименее болезненным решением, которое охватывало бы оба сценария (мой собственный сервер db и предоставленный сервер db), учитывая, что существует 6 таких типов серверов, а не только 2 (так что не только 2 разных сценария, есть много перестановок какой сервер предоставлен для меня и который принадлежит мне).

Edit: Чтобы быть более конкретным, то проблема у меня в том, что если я использую ВАР, когда система не моя и факты, когда это мое, то у меня есть проблемы написания application.properties.j2 шаблона, так как факты и вары упоминаются по-разному , Как использовать var в шаблоне, но использовать факт, если var не определен?

ответ

0

Я предполагаю, что у вас есть файл инвентаря для развертывания. Поэтому файл инвентаризация может выглядеть следующим образом:

[app] 
an-app.server 

[db] 
a-db.server 

[deploymentA:children] 
app 
db 

[deploymentA:vars] 
db_ip=foo 
dp_port=foo 
db_user=foo 
db_pass=foo 

deploymentA:vars вы, вероятно, будете хранить в group_vars/deploymentA но для простоты я просто положить его в инвентарь.

Теперь сборник пьес:

- hosts: db 
    roles: 
    - setup-db-server 

- hosts: app 
    roles: 
    - setup-app-server 

При развертывании, когда сервер БД не управляется самостоятельно, вы просто не будет иметь сервер БД, определенный в вашем инвентаре. Группа db будет пуста. В этом случае первая игра будет просто печатать «никакие хосты совпадающие» или что-то в этом роде и перейти к следующей игре.

В развертывании, в котором находится сервер db, будет выполняться роль setup-db-server, и вы можете использовать конфигурацию deploymentA:vars.

В вашем приложение игры у вас есть deploymentA:vars независимо от того, если хозяин ваш или нет, и может раскатать файл application.properties.