Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Ansible jinja2 if else语句获得所需的输出_Ansible_Jinja2 - Fatal编程技术网

如何使用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工作得很出色。