【问题标题】:Ansible - Global VariablesAnsible - 全局变量
【发布时间】:2016-07-25 17:57:26
【问题描述】:

Ansible 中是否存在“全局”变量(也就是说跨多个主机)?如果我们遇到该错误状态,我想设置一个错误标志然后调用一个特定的单独剧本。我的结构如下:

- hosts: localhost
  connection: local
  gather_facts: no
  roles:
    - role1 <-- some error flag is set here
    - role2
- include: teardown.yml
  when: error_flag is defined and error_flag == true

我尝试在group_vars 中设置一个变量,但在我看来,在运行时也没有真正的方法来更改变量值。

Set_fact 不起作用,因为用于拆解的when 不在本地主机中。即使我尝试访问hostvars['localhost']['error_flag],这也不起作用,因为您似乎不能在when 子句中使用Jinja 模板。

【问题讨论】:

  • 主机变量hostvars.localhost.error_flag 应该可以在没有Jinja2 模板的when 子句中访问。也就是说,写出不带{{ }} Jinja2 分隔符的表达式。

标签: ansible jinja2 ansible-playbook


【解决方案1】:

正如 Chin Huang 上面所说,我弄乱了有关使用 when 子句的语法。因此,通过修复它,when 子句显然有效。似乎没有在 Ansible 中声明动态“全局”变量的好方法,因此在 hostvars 对象中使用每个主机的变量似乎是最实用的方法。

其他来源也提到了使用文件和从文件中读取数据,但这似乎非常低效。所以我一直在通过将东西保存到localhost来完成。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-12
    • 2019-07-24
    相关资源
    最近更新 更多