Ansible:检查变量是否等于字符串

时间:2014-12-06 18:54:18

标签: variables conditional ansible ansible-playbook

我在命令行中传递了一个ansible变量:

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

但似乎没有任何效果。我该怎么做?

详细说明:

  • 我使用的是ansible 1.7.2

1 个答案:

答案 0 :(得分:29)

小心使用名为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