首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >嵌套字典上的可抗循环

嵌套字典上的可抗循环
EN

Stack Overflow用户
提问于 2018-11-20 23:05:30
回答 1查看 11K关注 0票数 1

从API调用返回以下数据

代码语言:javascript
复制
"napalm_interfaces_ip": {
    "Vlan5": {
        "ipv4": {
            "10.45.230.250": {
                 "prefix_length": 24
            }
        }
     }
 }

如何调试打印Vlan信息、IP和前缀长度?

这就是我所拥有的

代码语言:javascript
复制
- debug:
     msg: "Interface: {{ item.key }}, IP: {{ item.value.ipv4 }}"
  with_dict:
     - "{{ napalm_interfaces_ip }}"

它生成下面的输出,显示指向另一个字典的IP。

任务validate_device_ips :调试

ok:[] => (item={'value':{u‘IP 4’:{u'10.45.230.250':{u‘前缀_length’:24}},'key':u'Vlan5'}) => { "msg":“接口: Vlan5,IP:{u'10.45.230.250':{u‘前缀_length’:24}”}}

EN

回答 1

Stack Overflow用户

发布于 2018-11-20 23:41:51

dict2items应该会有所帮助:

代码语言:javascript
复制
- debug:
    msg: "IP: {{ item.key }} prefix_length: {{ item.value.prefix_length }}"
  loop: "{{ napalm_interfaces_ip.Vlan5.ipv4 | dict2items }}"

with_dict也能工作

代码语言:javascript
复制
- debug:
    msg: "IP: {{ item.key }} prefix_length: {{ item.value.prefix_length }}"
  with_dict: "{{ napalm_interfaces_ip.Vlan5.ipv4 }}"

下面是如何循环接口的示例

代码语言:javascript
复制
- hosts: localhost
  gather_facts: no
  vars:
    interfaces:
      - Vlan0:
          ipv4:
            10.45.230.250:
              prefix_length: 24
      - Vlan1:
          ipv4:
            10.45.230.251:
              prefix_length: 24
      - Vlan2:
          ipv4:
            10.45.230.252:
              prefix_length: 24
  tasks:
    - name: List selected variables
      vars:
        msg: |
          vlan {{ item|dict2items|json_query('[].key') }}
          ip {{ item|dict2items|json_query('[].value.ipv4|[0]')|dict2items|json_query('[].key') }}
          prefix {{ item|dict2items|json_query('[].value.ipv4|[0]')|dict2items|json_query('[].value.prefix_length') }}
      debug:
        msg: "{{ msg.split('\n') }}"
      loop: "{{ interfaces }}"

一旦你决定让你的生活变得更简单,下面就是一个选择

代码语言:javascript
复制
- hosts: localhost
  vars:
    interfaces:
      - Vlan0:
          ipv4: "10.45.230.250"
          prefix_length: "24"
      - Vlan1:
          ipv4: "10.45.230.251"
          prefix_length: "24"
      - Vlan2:
          ipv4: "10.45.230.252"
          prefix_length: "24"
  tasks:
    - name: List selected variables
      vars:
        msg: |
          vlan {{ item|dict2items|json_query('[].key') }}
          ip {{ item|dict2items|json_query('[].value.ipv4') }}
          prefix {{ item|dict2items|json_query('[].value.prefix_length') }}
      debug:
        msg: "{{ msg.split('\n') }}"
      loop: "{{ interfaces }}"
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53402942

复制
相关文章

相似问题

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