在ansible 1.9我有一些角色,我可以在模板中使用未定义的变量(ansible.cfg中的error_on_undefined_vars = False),但没有问题:
template.yml:
{{ var1 }}{{ var2 }}{{ var3 }}
Run Code Online (Sandbox Code Playgroud)
如果没有定义任何这些变量,则不代之.因此,您可以根据需要在您的剧本中指出其中一些变量而不是其他变量.
但是我在升级到ansible 2.2.0.0后发现,如果没有定义任何这些变量,则不会替换任何模板的变量,结果模板为:{{var1}} {{var2}} {{var3} }
例如:
剧本:
- hosts: myhost
vars:
var1=1
var3=3
roles:
- myrole
Run Code Online (Sandbox Code Playgroud)
任务:
- name: copy template
become: true
template: src=test.j2 dest=/tmp/test owner=user group=user
Run Code Online (Sandbox Code Playgroud)
运行此playbook后,使用ansible 1.9运行的结果/ tmp/test运行
13
Run Code Online (Sandbox Code Playgroud)
和ansible 2.2.0.0是
{{ var1 }}{{ var2 }}{{ var3 }}
Run Code Online (Sandbox Code Playgroud)
所以,没有变量被替换.
但如果:
剧本:
- hosts: myhost
vars:
var1=1
var2=2
var3=3
roles:
- myrole
Run Code Online (Sandbox Code Playgroud)
运行此playbook后,使用ansible 1.9/2.2.0.0生成的/ tmp/test运行
123
Run Code Online (Sandbox Code Playgroud)
有没有人以前处理这种行为?
您可以做的事情之一是将变量放入条件检查中,无论它是否已定义。或者放置变量块,如果您需要定义所有变量才能设置。您的模板应如下所示:
{% if var1 is defined and var2 is defined and var3 is defined %}
{{ var1 }}{{ var2 }}{{ var3 }}
{% endif %}
Run Code Online (Sandbox Code Playgroud)
如果定义了所有三个变量,模板将被复制到123内部。即使有一个未定义的变量,也会在没有上述变量块的情况下复制该文件。
| 归档时间: |
|
| 查看次数: |
328 次 |
| 最近记录: |