2014-12-06 3 views
14

У меня есть анзибль переменного, переданные в командной строке, как например:анзибля: проверить, если переменная равна строки

ansible-playbook -e environment=staging ansible/make_server.yml 

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

- include_vars: staging_vars.yml 
    when: environment | staging 

и

- include_vars: staging_vars.yml 
    when: "{{environment}} == "staging" 

и

- include_vars: staging_vars.yml 
    when: "{{environment}} | match('staging')" 

, но ничего не похоже на работу. Как мне это сделать?

Детали:

  • Я использую анзибль 1.7.2

ответ

21

Будьте осторожны с переменной под названием environment, это может вызвать проблемы, потому что анзибль использует его внутренне. Я не могу вспомнить, если это в документации, но вот список рассылки нить:

https://groups.google.com/forum/#!topic/ansible-project/fP0hX2Za4I0

Мы используем переменную stage.

Похоже, вы в конечном итоге с кучей из них подряд:

- include_vars: testing_vars.yml 
    when: stage == "testing" 
- include_vars: staging_vars.yml 
    when: stage == "staging" 
- include_vars: production_vars.yml 
    when: stage == "production" 

Но вы также можете просто включить свое окружение:

- include_vars: "{{ stage }}_vars.yml" 

Или использовать vars_files на уровень загружаемой книги:

vars_files: 
    - vars/{{ stage }}_vars.yml 
+2

Окружающая среда работает, но окружающая среда, как вы говорите, используется внутренне, а Ansible do say in the docs не использовать его. Дело важно :) – PhillipHolmes

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