Ansible模板在破折号后跳过字符串

时间:2018-09-19 01:21:48

标签: ansible jinja2

我正在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打算跳过-之后的所有内容?

3 个答案:

答案 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似乎允许在变量中使用破折号/连字符。