gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 22:05:08 24 4
gpt4 key购买 nike

我正在用 Ansible 中的一组变量模板化一个文件。

我的 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'

这个键值对中的一个应该被注入(inject)到我的模板文件 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'"}

如果我删除所有破折号 -,它会工作正常,但这是我不能做的事情,因为我还必须下载这些插件,我需要用破折号 curl 正确的名称。

为什么 jinja 模板会跳过 - 之后的所有内容?

最佳答案

Python 不喜欢在属性名称中使用破折号 -,但您可以使用映射语法:

{{ jenkins_plugins["antisamy-markup-formatter"] }}

如果您有包含破折号的变量名称,您可以使用 vars:

{{ vars["jenkins-plugins"] }}

但是,请注意,如果您尝试定义包含破折号的变量,ansible 将抛出一个错误,指出变量名称不能包含破折号。这仅在使用“默认值”时有效 - 但我猜这是一个错误。

关于Ansible 模板在破折号后跳过字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52396669/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com