Ansible Использование --extra-vars для условных включений

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

create_server.yml

---
- include: launch_ec2_instance.yml

- include install_postgres.yml
  when {{db}} == "Y"

- include install_redis.yml
  when {{redis}} == "Y"

Вот как я вызываю create_server.yml

ansible-playbook create_server.yml -i local --extra-vars "db=Y redis=N"

Возможно ли это сделать и если да, то как?


person MattM    schedule 19.03.2014    source источник


Ответы (2)


Да. Это возможно. Вам не хватает двоеточия (:) в операторе when.

---
- include: launch_ec2_instance.yml

- include install_postgres.yml
  when: {{ db }} == "Y"

- include install_redis.yml
  when: {{ redis }} == "Y"

Вы также можете опустить фигурные скобки ({{ }}):

---
- include: launch_ec2_instance.yml

- include install_postgres.yml
  when: db == "Y"

- include install_redis.yml
  when: redis == "Y"
person Rico    schedule 21.03.2014
comment
Как ни странно, у меня это не работает ... Даже когда я добавляю недостающее : после включения в ответ. - person Andrew White; 28.04.2015

Ответ @Rico правильный, за исключением того, что он применяется только тогда, когда ваш оператор включения является частью задачи.

Eg.

---
tasks:
  - include install_postgres.yml
    when: db == "Y"

Если ваш playbook - это просто набор включений, как кажется, ваш "create_server.yml", то "когда" не будет работать.

person wimnat    schedule 20.05.2015
comment
Похоже, доступно, начиная с версии 2.0 In versions prior to 2.0 this worked with task includes but not playbook includes. 2.0 allows it to work with both. - person FibreFoX; 30.03.2016