Ansible: проверьте, равна ли переменная string

У меня есть переменная, которая передается в командной строке как таковая:

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

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

- 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')"

но ничего не работает. Как это сделать?

Подробнее:

  • Я использую unsible 1.7.2

Ответы

Ответ 1

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

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