2015-05-28 3 views
7

Вот мой group_vars/все Файл:доступа вложенных переменные переменных в анзибле

app_env: staging 

staging: 
    app_a: 
    db_host: localhost 
    app_b: 
    db_host: localhost 
production: 
    app_a: 
    db_host: app_a-db.example.net 
    app_b: 
    db_host: app_b-db.example.com 

Если app_env среды должна быть производство, я переписать это с помощью инвентаризации переменных. Таким образом, все развертывания выполняются, если вы не сделаете их производство явно.

Так что, когда я хочу, чтобы напечатать переменную в PlayBook, я могу сделать

--- 
    - debug: var={{app_env}}.app_a.db_host 

Это работает!

Но как я могу получить доступ к переменной в другом модуле, то есть в файле lineinfile?

Некоторые примеры, которые не работали из:

- lineinfile: dest=/etc/profile line='export APP_A_DB_HOST="{{ app_env.app_a.db_host }}"' 
- lineinfile: dest=/etc/profile line='export APP_A_DB_HOST="{{ app_env[app_a][db_host] }}"' 
- lineinfile: dest=/etc/profile line='export APP_A_DB_HOST="{{ {{app_env}}.app_a.db_host }}"' 

Рабочие растворы будут с помощью модуля set_fact (двойные линии кода, не очень умный) или включая различные переменные файлы, в зависимости от app_env.

Но я действительно хотел бы знать, если Theres нотация для доступа к вложенным переменным переменных;)

ответ

13

Вы бы сделать вашу жизнь проще с «окружающей Словаре» не будучи в корне, например, так:

app_env: staging 

app_environments: 
    staging: 
    app_a: 
     db_host: localhost 
    app_b: 
     db_host: localhost 
    production: 
    app_a: 
     db_host: app_a-db.example.net 
    app_b: 
     db_host: app_b-db.example.com 

Затем вы должны использовать {{app_environments[app_env].app_a.db_host}} или {{app_environments[app_env]['app_a']['db_host']}} всюду (шаблоны Jinja, задачи).

Остерегайтесь слишком много «прижизненности», хотя!

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