【问题标题】:Ansible: check if variable equals stringAnsible:检查变量是否等于字符串
【发布时间】:2015-02-04 18:19:08
【问题描述】:

我在命令行中传入了一个 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

【问题讨论】:

    标签: variables conditional ansible ansible-playbook


    【解决方案1】:

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

    【讨论】:

    • 环境有效,但是您所说的环境是在内部使用的,Ansible 在文档中确实说不要使用它。案例很重要:)
    猜你喜欢
    • 2012-09-21
    • 1970-01-01
    • 1970-01-01
    • 2021-12-11
    • 1970-01-01
    • 2014-07-29
    • 2020-01-05
    • 1970-01-01
    • 2016-12-21
    相关资源
    最近更新 更多