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

Jor*_*Ell 26 variables conditional ansible ansible-playbook

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

ansible-playbook -e environment=staging ansible/make_server.yml
Run Code Online (Sandbox Code Playgroud)

我想在我的角色中加载一些变量,这取决于环境的价值.我尝试了很多不同的方法,例如:

- include_vars: staging_vars.yml
  when: environment | staging
Run Code Online (Sandbox Code Playgroud)

- include_vars: staging_vars.yml
  when: "{{environment}} == "staging"
Run Code Online (Sandbox Code Playgroud)

- include_vars: staging_vars.yml
  when: "{{environment}} | match('staging')"
Run Code Online (Sandbox Code Playgroud)

但似乎没什么用.我该怎么做呢?

细节:

  • 我正在使用ansible 1.7.2

Ram*_*nte 35

注意调用的变量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"
Run Code Online (Sandbox Code Playgroud)

但您也可以只包括您的环境:

- include_vars: "{{ stage }}_vars.yml"
Run Code Online (Sandbox Code Playgroud)

或者,使用vars_filesPlaybook级别:

vars_files:
  - vars/{{ stage }}_vars.yml
Run Code Online (Sandbox Code Playgroud)

  • 环境有效,但你所说的环境是在内部使用的,Ansible在文档中说不使用它.案例很重要:) (2认同)