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

41

我有一个 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个回答

61

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

或者,在playbook级别上使用vars_files

vars_files:
  - vars/{{ stage }}_vars.yml

4
环境变量是有效的,但像你说的那样,环境变量主要在内部使用。Ansible文档中建议不要使用它。请注意大小写敏感 :) - keba

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接