【问题标题】:Need help to understand workflow sequence for Ansible variable execution需要帮助以了解 Ansible 变量执行的工作流程顺序
【发布时间】:2014-07-03 19:45:51
【问题描述】:

需要帮助了解 Ansible 任务或剧本中 Ansible 变量执行的工作流程顺序,

当我们使用所有这些时,最后使用了哪个变量..

1) 变量

2) 组变量

3) 主机变量

4) 额外变量

5) 剧本中的 var_prompt

6) 任务中的 set_fact

7) 剧本 vars_files

8) 剧本变量

8) 角色包含在 vars 目录 - roles/foo/vars/main.yml

9) 角色定义变量 - { 角色: foo, param1: 1000, param2: 2000, tags: [ 'foo', 'bar' ] }

10) 包含的任务 include_vars

11) 基于库存的变量

??????

【问题讨论】:

  • 如果我在所有具有不同值的变量中使用一个相同的键。例如。名称:apache 名称:nginx 名称:lighttpd 名称:tomcat 名称:码头

标签: ansible ansible-playbook


【解决方案1】:

Ansible 文档的Variable Precedence: Where Should I Put A Variable? 部分声明如下:

很多人可能会问变量如何覆盖另一个变量。 归根结底,Ansible 的理念是你最好知道在哪里 放一个变量,然后你必须少考虑它。

避免在47个地方定义变量“x”然后问问题 “哪个 x 被使用”。为什么?因为那不是 Ansible 的禅宗哲学 做事。

只有一栋帝国大厦。一个蒙娜丽莎等图 找出在哪里定义变量,不要让它变得复杂。


如果在不同的地方定义了多个同名的变量 名次,他们按一定的顺序获胜,即:

  • -e 变量总是获胜
  • 然后是“几乎所有其他东西”
  • 然后是库存中定义的变量
  • 然后是关于系统的事实发现
  • 然后是“角色默认值”,这是最“默认”的,并且失去了所有内容的优先级。

上面的文档链接中有很多更具体的示例。

【讨论】:

  • 谢谢我已经有了你提供的网址,但我的问题仍然是'然后是“其他所有东西”'???,我想知道的是非常明确的声明,只针对'谁总是赢''然后是“大多数其他东西”'
  • @RaviBhure 我没有关于所有 11+ 可能性的优先级的信息。但是,欢迎您创建一个能够准确告诉您的场景。
  • 是的@Mxx,我会这样做,因为我在多个阶段使用了具有不同值的单个变量键,这可以节省时间并避免为我的多个操作系统使用不同的变量文件?数据中心/区域/app 环境。
猜你喜欢
  • 2013-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多