2016-09-01 3 views
1

Прежде чем начать, позвольте мне дать немного подробнее на моей анзибль структуре каталогованзибль Условная переменная

  • среды
    • производство # инвентаризации файл для производственных серверов
      • group_vars
      • host_vars
      • хосты
    • постановка файл # инвентарь для промежуточной среды
      • group_vars
      • host_vars
      • хостов
  • роли
    • Nginx
    • MySQL
    • и т.д.
  • deploy_app.yml

так прямо сейчас, если я хочу, чтобы развернуть один приложений в постановке, я могу просто запустить эту команду PlayBook:

ansible-playbook -i environments/staging/hosts deploy-app.yml 
Например,

, я определил путь для моего каталога app1 на этапе/group_vars/webserver на «/var/www/staging.app1.com». но мне также нужно развернуть на тот же сервер для приложения2, но с другим каталогом. Можно ли использовать условную переменную в group_vars?

Так что, если я бег:

ansible-playbook -i environments/staging/hosts deploy-app.yml --extra-vars "app_name=app1" 

будет развернуть на постановку сервера на /var/www/staging.app1.com и:

ansible-playbook -i environments/staging/hosts deploy-app.yml --extra-vars "app_name=app2" 

будет развернуть на постановку сервера на /var/www/staging.app2.com

Я знаю, что самый простой способ может просто определить переменную app_dir при запуске playbook, но, если возможно, я предпочитаю определять имя приложения, тогда app_dir будет используется на основе указанного имени приложения.

if app_name = app1, then app_dir = /var/www/staging.app1.com 

elif app_name = app2, then app_dir = /var/www/staging.app2.com 

Пожалуйста, сообщите пожалуйста

ответ

1

Вы можете шаблон app_dir в вашей группе вары:

app_dir: '/var/www/staging.{{ app_name }}.com' 

Если у вас есть приложение-зависимые переменные, и они не являются templatable, вы можете использовать apps Dict в ваши переменные файлы:

apps: 
    app1: 
    dir: '/var/www/app1' 
    key: 'klg23sdkjfsdf' 
    db_host: '127.0.0.1' 
    app2: 
    dir: '/opt/apps/app2' 
    key: 'askjh233423444' 
    db_host: '127.0.1.1' 

и использовать apps[app_name].dir, когда вам нужно app_dir и так далее.

+0

это может сработать, но другая проблема заключается в том, что у меня также есть другая переменная, которая должна иметь условные параметры, такие как база данных ip, ключ приложения и другая переменная, которая отличается между этими двумя приложениями. Кажется, что наиболее приемлемым решением на данный момент является разделение двух приложений на собственный хост и group_vars – AlamHo

+0

Я обновил ответ. Обратите внимание, что вы, как правило, получите более релевантные ответы, если вы укажете все детали в вопросе. –

+0

Спасибо. это именно то, что я ищу. Сначала я уже пытаюсь использовать ваше первое решение, тогда я понял, что есть какая-то переменная, которая отличается от каждого приложения – AlamHo

Смежные вопросы