gpt4 book ai didi

ansible 2 : cannot use undef vars in templates

转载 作者:行者123 更新时间:2023-12-04 15:40:41 24 4
gpt4 key购买 nike

在 ansible 1.9 中,我有一些角色可以在模板中使用 undefined variable (ansible.cfg 中的 error_on_undefined_vars = False)而没有任何问题:

模板.yml:

{{ var1 }}{{ var2 }}{{ var3 }}

如果这些变量中的任何一个未定义,则不会被替换。因此,您可以根据需要在您的剧本中指出其中一些变量而不是其他变量。

但我发现,在升级到 ansible 2.2.0.0 后,如果这些变量中的任何一个未定义,则模板的变量都不会被替换,结果模板为:
{{ var1 }}{{ var2 }}{{ var3 }}

例如。:

剧本:
- hosts: myhost
vars:
var1=1
var3=3
roles:
- myrole

任务:
- name: copy template
become: true
template: src=test.j2 dest=/tmp/test owner=user group=user

运行此剧本后,使用 ansible 1.9 运行的结果/tmp/test 是
13

和 ansible 2.2.0.0 是
{{ var1 }}{{ var2 }}{{ var3 }}

所以,没有变量被替换。

但如果:

剧本:
- hosts: myhost
vars:
var1=1
var2=2
var3=3
roles:
- myrole

运行此剧本后,生成的/tmp/test 运行 ansible 1.9/2.2.0.0 是
123

有没有人处理过这种行为?

最佳答案

Jinja 过滤器可用于在 undefined variable 时提供帮助。

您可以尝试使用 default过滤器设置未定义时设置值

{{ var1 }}{{ var2 | default(None) }}{{ var3 }}

这将设置 var2""如果 var 2 未定义。这就是我处理大多数可能不需要为特定主机定义的变量的方式。

您还可以使用 omit 进行测试。 Jinja 过滤器只会忽略使用的变量。
{{ var1 }}{{ var2 | default(omit) }}{{ var3 }}

有关 Jinja 过滤器的完整列表,请参阅 https://docs.ansible.com/ansible/latest/user_guide/playbooks_filters.html

关于ansible 2 : cannot use undef vars in templates,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42387878/

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