Ansible:Jinja参考动态库存

时间:2017-03-06 09:51:31

标签: ansible jinja2 ansible-inventory

所以我使用的是基于group_vars的playbook,用于为各种各样的网站提供IIS设置。

group_vars由2个主要词组组成(其中一个包含dicts列表的复杂列表。)

复杂的一个引用了Jinja2中firstdict的变量(例如{{firstdic.sitename}})

这与group_vars完美配合,引用由Ansible中的jinja2引擎解析。 但是当谈到动态库存时,从第一个字典引用变量时,整个字典都没有设置。

这里有一些JSON(来自我的动态库存):

"firstdict": { "sitename": "mysitename" }

"complexdict": {"someotherdict": {"sitepath": "{{ firstdict.sitename }}"}}

使用此JSON时,调试模块会发现未定义complexdict。

然而,jinja2部分被正确解析并执行,因为它可以工作。

动态广告资源输入:

"complexdict": {"someotherdict": {"sitepath": "{{ \"foo\" }}"}}

调试模块返回:

  "complexdict": {
        "someotherdict": {
            "sitepath": "foo"
        }
    }

是否存在变量优先级问题?还有什么我应该知道为什么它不能像这样工作?

感谢您的帮助,Ansible大师:)

PS:我已经尝试过经验逃脱,逃避花括号,双引号等等。

1 个答案:

答案 0 :(得分:1)

适合我:

./库存/ test.sh:

#!/bin/bash

cat << EndOfJSON
{
    "test"   : {
    "hosts"  : [ "localhost" ],
    "vars"   : {
      "firstdict": { "sitename": "mysitename" },
      "complexdict": {"someotherdict": {"sitepath": "{{ firstdict.sitename }}"}}
        }
    }
}
EndOfJSON

./ playbook.yml

---
- hosts: test
  connection: local
  gather_facts: no
  tasks:
    - debug:
        var: complexdict

输出:

TASK [debug] *******************************************************************
ok: [localhost] => {
    "complexdict": {
        "someotherdict": {
            "sitepath": "mysitename"
        }
    }
}

如果不是这种情况,请使用完整 MCVE更新您的问题。