首页 > 解决方案 > ansible的jinja2模板中的条件

问题描述

嗨,我可以知道如何在 jinja2 模板中应用以下条件吗

- if item.value has value

- if item.value is equals "A" 

- if item.value is equals "A" else item.value is equals "B"

- if (item.value is equals "A" and item.value is equals "B" ) or (item.value is equals "A" and item.value is equals "c" )

- if item.value is equals "A" else if item.value is equals "B" else item.value is equals "c"

- if item.value is NOT equal "" or not null 

标签: ansiblejinja2

解决方案


试试这个模板

shell> cat test.j2
{% for item in items %}
item={{ item }}
{% set v = item.value|default("") %}
1) {% if v|length > 0 %}has value{% endif %}<br>
2) {% if v == "A" %}is A{% endif %}<br>
3) {% if v == "A" %}is A{% else %}is B{% endif %}<br>
4) Can never happen<br>
5) {% if v == "A" %}is A{% elif v == "B" %}is B{% elif v == "C" %}is C{% endif %}<br>
6) {% if v|length == 0 %}is empty or null{% endif %}<br>

{% endfor %}

例如,剧本

- hosts: localhost
  vars:
    items:
      - value: ""
      - value: "A"
      - value: "B"
      - value: "C"
      - value: "X"
      - attrib: "Y"

  tasks:
    - template:
        src: test.j2
        dest: test.txt

shell> cat test.txt 
item={'value': ''}
1) <br>
2) <br>
3) is B<br>
4) Can never happen<br>
5) <br>
6) is empty or null<br>

item={'value': 'A'}
1) has value<br>
2) is A<br>
3) is A<br>
4) Can never happen<br>
5) is A<br>
6) <br>

item={'value': 'B'}
1) has value<br>
2) <br>
3) is B<br>
4) Can never happen<br>
5) is B<br>
6) <br>

item={'value': 'C'}
1) has value<br>
2) <br>
3) is B<br>
4) Can never happen<br>
5) is C<br>
6) <br>

item={'value': 'X'}
1) has value<br>
2) <br>
3) is B<br>
4) Can never happen<br>
5) <br>
6) <br>

item={'attrib': 'Y'}
1) <br>
2) <br>
3) is B<br>
4) Can never happen<br>
5) <br>
6) is empty or null<br>

推荐阅读