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

时间:2016-05-23 21:10:03

标签: ansible ansible-2.x

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

---
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"}

为什么?

1 个答案:

答案 0 :(得分:2)

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