首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在不可用调试或设置事实模块中使用Jinja2获取dict键值格式

如何在不可用调试或设置事实模块中使用Jinja2获取dict键值格式
EN

Stack Overflow用户
提问于 2021-12-15 01:04:23
回答 1查看 107关注 0票数 1

我有以下输出

代码语言:javascript
复制
    TASK [debug] *******************************************************************
    ok: [1.1.1.1] => {
    "msg": [
        {
            "DESCRIP": "server-abc",
            "PORT": "Po3",
            "PROTOCOL": "up",
            "STATUS": "up"
        },
        {
            "DESCRIP": "Leaf-1",
            "PORT": "Po4",
            "PROTOCOL": "up",
            "STATUS": "up"
        },
        {
            "DESCRIP": "server-xyz",
            "PORT": "Po1",
            "PROTOCOL": "up",
            "STATUS": "up"
        },  
        {
            "DESCRIP": "Leaf-2",
            "PORT": "Po2",
            "PROTOCOL": "up",
            "STATUS": "up"
        }             
    ]
}

为了做到这一点,我只想获取/打印描述中包含“叶子”和端口中包含"Po“的块,下面使用jinj2进行调试。

代码语言:javascript
复制
 - debug:
    msg: >-
           {%- for item in output.parsed -%}
           {%- if ('Leaf' in item.DESCRIP) and ('Po' in item.PORT) -%}
             "DESCRIP": {{item.DESCRIP}},
             "PORT": {{item.PORT}}
           {%- endif -%}
           {%- endfor -%}

我正在以单行方式打印所有的输出:

代码语言:javascript
复制
TASK [debug] *******************************************************************
ok: [10.2.4.1] => {
    "msg": "\"DESCRIP\": Leaf-1,\n  \"PORT\": Po4\"\"DESCRIP\": Leaf-2,\n  \"PORT\": Po2"
}

我想要的是切分键值格式/json格式。如下所示:

代码语言:javascript
复制
[{
    "DESCRIP": "Leaf-1",
    "PORT": "Po4",
},
{
    "DESCRIP": "Leaf-2",
    "PORT": "Po2",
} ]

如何/修改我的代码调试msg部分中的内容以获得上面的输出

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-15 06:02:23

实现这一目标的一种方法是使用set_factwhen条件。

在下面的示例中,我们创建一个新变量serv_list (最初为空列表),然后在条件匹配时追加DESCRIPPORT

代码语言:javascript
复制
    - set_fact:
        serv_list: '{{ serv_list | default([]) + [ { "DESCRIP": item.DESCRIP, "PORT": item.PORT } ] }}'
      loop: "{{ output.parsed }}"
      when:
        - item.DESCRIP is search('Leaf')
        - item.PORT is search('Po')

    - debug:
        var: serv_list

生产:

代码语言:javascript
复制
ok: [localhost] => {
    "serv_list": [
        {
            "DESCRIP": "Leaf-1",
            "PORT": "Po4"
        },
        {
            "DESCRIP": "Leaf-2",
            "PORT": "Po2"
        }
    ]
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70357364

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档