为什么ansible认为这个变量是未定义的?

Why does ansible think this variable is undefined?

我在 /group_vars/ 下的 all.yml 中有以下变量:

---
global__:

  app_user: root
  app_group: root

  maven_repo:  http://my.endpoint.a
  package_repo:  http://my.endpoint.b

  java:
    sourceUrl: "{{package_repo}}/java/"
    version: 1.8.0_25

但是,当我执行第一个扩展此 var 文件的任务时,我得到以下输出:

 FAILED! => {"failed": true, "msg": "ERROR! ERROR! 'package_repo' is undefined"}

为什么?

package_repoglobal__ 字典中定义。因此,您需要将其引用为 {{ global__.package_repo }},但由于您是从同一词典中引用的,因此您将收到错误 recursive loop detected in template string。您不能从同一数据结构中引用,但是从另一个数据结构中引用应该可以。

所以你需要在另一个结构中定义 package_repo 以便在 global__.java.sourceUrl 变量中引用它,例如以下将起作用:

package_repo:  http://my.endpoint.b

global__:

  app_user: root
  app_group: root

  maven_repo:  http://my.endpoint.a

  java:
    sourceUrl: "{{package_repo}}/java/"
    version: 1.8.0_25

other_map:
  package_repo:  http://my.endpoint.b

global__:

  app_user: root
  app_group: root

  maven_repo:  http://my.endpoint.a

  java:
    sourceUrl: "{{other_map.package_repo}}/java/"
    version: 1.8.0_25