所以我使用的是基于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:我已经尝试过经验逃脱,逃避花括号,双引号等等。答案 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更新您的问题。