Ansible条件模板变量替换

时间:2017-08-28 20:58:17

标签: ansible ansible-2.x

我正在尝试使用包含基于{{ 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?

1 个答案:

答案 0 :(得分:0)

请勿在{{1​​}}语句中使用大括号,它已经是Jinja2语句。
在Jinja2语句中,您使用[[1]] [1] 1 3 4 [[2]] [1] 0 2 6 来应用过滤器,但没有when过滤器可用。

您的陈述应该如下:

|