如何使用Ansible jinja2 if else语句获得所需的输出
以下是任务:如何使用Ansible jinja2 if else语句获得所需的输出,ansible,jinja2,Ansible,Jinja2,以下是任务: - name: primary slot on active debug: msg={{slotid.stdout_lines}} register: slotidoutput 产出1: TASK [primary slot on active] ************************************************************************* ok:
- name: primary slot on active
debug: msg={{slotid.stdout_lines}}
register: slotidoutput
产出1:
TASK [primary slot on active] *************************************************************************
ok: [1.1.1.1] => {
"msg": [
[
"Primary Slot ID 1"
]
]
}
某些设备没有主插槽ID,因此此时输出如下:
输出2:
TASK [primary slot on active] ***********************************************************************
ok: [2.2.2.2] => {
"msg": []
}
所以我正在开发一个jinja2模板
{% if 'Primary Slot ID' in slotidoutput %}
{{slotidoutput.msg[0][0]}}
{% else %}
Single Slot
{% endif %}
我总是以“单插槽”的形式获得价值,即使我在多插槽设备上运行,该设备具有输出1
Single Slot
设备1.1.1.1的期望打印值为:
Primary Slot ID 1
设备2.2.2.2的期望打印值为:
Single Slot
我确信我在jinja if else声明中犯了一些错误。有人可以检查一下并让我知道。我们需要解决一些条件才能使模板正常工作
- 有时,
是一个嵌套列表slotid.stdout\u行
- 在某些情况下,它是一个空列表
[]
- 在中使用
的条件检查将对列表项执行精确匹配,并对字符串执行搜索匹配
寄存器
似乎没有必要,因为它与slotid.stdout\u行
具有相同的数据结构
因此,以下任务和模板应解决上述问题:
任务:
#将嵌套列表展平到单个级别
-设定事实:
slotidout:{{slotid.stdout_行|展平}”
#为模板使用随机名称
-模板:
src:testtemplate.j2
dest:/tmp/testtemplate
模板testtemplate.j2
:
{% if slotidout[0] is defined %}
{% if "Primary" in slotidout[0] %}
{{ slotidout[0] }}
{% endif %}
{% else %}
Single slot
{% endif %}
这将根据条件创建具有适当值的文件。您可以根据自己的要求调整条件。谢谢您,seshadri_c工作得很出色。