我正在Ansible中用一组变量来模板化文件。
我的 for (j = 32; j < 128; j++) {
FT_Load_Char(i->ftFace, j, FT_LOAD_RENDER);
...
}
文件中的一些条目是:
defaults/main.yaml
此键值对之一应该在我的模板文件jenkins_plugins:
'ant': '1.8'
'antisamy-markup-formatter': '1.5'
'apache-httpcomponents-client-4-api': '4.5.3-2.1'
'kubernetes': '1.3'
的此行中注入:
config.xml.j2
所以基本上我的最终结果应该是:
<markupFormatter class="hudson.markup.RawHtmlMarkupFormatter" plugin="antisamy-markup-formatter@{{ jenkins_plugins.antisamy-markup-formatter }}">
但是当我运行调用此模板文件的剧本时,会收到错误消息:
<markupFormatter class="hudson.markup.RawHtmlMarkupFormatter" plugin="antisamy-markup-formatter@1.5">
如果我删除所有破折号TASK [jenkins : Generate config.xml file.] ****************************************
fatal: [default]: FAILED! => {"changed": false, "msg": "AnsibleUndefinedVariable: 'dict object' has no attribute 'antisamy'"}
,它将很好用,但这是我无法做的事情,因为我还必须下载这些插件,并且需要用破折号来修饰正确的名称。
为什么Jinja打算跳过-
之后的所有内容?
答案 0 :(得分:1)
好极了。但是如果第一部分(jenkins_plugins)破折号 (jenkins插件)吗?
通过@Andreas Wederbrand解决上述问题
在字典上使用.get()来获取密钥。
Cell
答案 1 :(得分:0)
Python在属性名称中不喜欢破折号-
,但是您可以使用地图语法:
{{ jenkins_plugins["antisamy-markup-formatter"] }}
如果您的变量名中包含破折号,则可以使用vars
:
{{ vars["jenkins-plugins"] }}
但是,请注意,如果您尝试定义一个包含破折号的变量,则ansible将抛出错误,指出变量名称不能包含破折号。这仅在使用“默认值”时有效-但我想这是一个错误。
答案 2 :(得分:-1)
较旧的ansible版本不允许在变量中使用-
破折号/连字符。
Ansible 2.8.5似乎允许在变量中使用破折号/连字符。