我正在尝试使用包含基于{{ ansible_hostname }}
的第四个字符的变量的模板创建配置文件。
什么有效:
剧本:
---
- hosts: spock
roles:
- templaterole
作用
---
- name: testing autofs template on spock
template:
src=autofs
dest=/tmp/autofs
with_items:
- "{{ var_a }}"
when: ('{{ ansible_hostname }}' == "spock")
乏/ main.yml:
var_a:
-
var_1: 'this is var_a1'
var_2: 'this is var_a2'
var_b:
-
var_1: 'this is var_b1'
var_2: 'this is var_b2'
模板:
{{ item.var_1 }}
#
{{ item.var_2 }}
#
这按预期工作,输出在spock主机上生成一个/ tmp / autofs文件,如下所示:
this is var_a1
#
this is var_a2
#
现在,如果我尝试基于尝试拔出{{ ansible_hostname }}
的第4个字符来编写文件,则播放不会在条件上获得匹配并且不会写入文件。我在我的角色中尝试这个条件:
---
- name: testing autofs template on spock
template:
src=autofs
dest=/tmp/autofs
with_items:
- "{{ var_a }}"
when: ('{{ ansible_hostname }} | cut -c4' == "c") or
('{{ ansible_hostname }} | cut -c4' == "k")
由于条件不匹配,播放会跳过此任务。最终我希望能够拉出我们主机名的任何第四个字符,因为它总是可预测的(只能是定义我的环境的4个已知字符之一,并允许我根据这些差异生产环境定义正确的模板变量。)< / p>
任何人都可以帮我重新定义我的when语句,以便我可以做或条件化并从定义的ansible变量中提取字符,例如ansible_hostname?
答案 0 :(得分:0)
请勿在{{1}}语句中使用大括号,它已经是Jinja2语句。
在Jinja2语句中,您使用[[1]]
[1] 1 3 4
[[2]]
[1] 0 2 6
来应用过滤器,但没有when
过滤器可用。
您的陈述应该如下:
|