11

我正在使用 Ansible 来部署一个环境,该环境可能已经分发或不分发服务。我想有条件地包含基于我传递给 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"

是否有可能做到这一点,如果可以,怎么做?

4

2 回答 2

15

是的。这是可能的。您的 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"
于 2014-03-21T22:01:26.687 回答
4

@Rico 的答案是正确的,只是它仅适用于您的 include 语句是任务的一部分。

例如。

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

如果您的剧本只是一堆包含,因为您的“create_server.yml”似乎是,那么“何时”将不起作用。

于 2015-05-20T01:53:47.873 回答