1

所以我正在使用基于 group_vars 的剧本,它用于为各种网站提供 IIS 设置。

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

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

这与 group_vars 完美配合,引用由 Ansible 中的 jinja2 引擎解析。但是当涉及到动态清单时,当从第一个 dict 引用 vars 时,整个 dict 是未设置的。

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

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

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

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

但是,jinja2 部分被正确解析和执行,因为这会起作用。

动态库存输入:

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

调试模块返回:

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

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

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

PS:我已经尝试了很多经验转义,转义花括号,双引号等。

4

1 回答 1

1

为我工作:

./inventory/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更新您的问题。

于 2017-03-06T11:39:03.020 回答