2014-03-19 76 views
11

我正在使用Ansible來部署可能具有分佈式服務的環境。我想根據我傳遞給劇本的論據有條件地包含劇本。Ansible使用--extra-vars for conditional包含

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" 

是否有可能做到這一點,如果是的話,怎麼樣?

回答

13

是的。這是可能的。您在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" 
+2

這個答案應該被接受。 – asymmetric

+1

奇怪的是它不適用於我...即使在答案中包含後面添加了缺少的「:」。 –

4

@波多黎各的答案是除非你有說法是任務的一部分,它僅適用正確。

例如,

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

如果你的劇本只是一堆包括爲你的「create_server.yml」似乎是再「何時」不會工作。

+2

似乎是[2.0版本後可用](http://docs.ansible.com/ansible/playbooks_conditionals.html#applying-when-to-roles-and-includes)'在2.0之前的版本中,這個任務包含任務但不包括手冊。 2.0允許它與兩者一起工作 – FibreFoX