首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何提取xml数据并打印调试消息

如何提取xml数据并打印调试消息
EN

Stack Overflow用户
提问于 2019-10-30 18:36:45
回答 1查看 107关注 0票数 0

我试图通过xpath提取两个元素(l2-mac-addressl2-mac-logical-interface),并将它们打印为“mac地址:接口”。

XML:

代码语言:javascript
运行
复制
    <l2ald-rtb-macdb>
    <l2ald-mac-entry junos:style="brief-rtb">
        <l2-mac-routing-instance>lab-ppp</l2-mac-routing-instance>
        <l2-mac-bridging-domain>__lab-ppp__</l2-mac-bridging-domain>
        <l2-bridge-vlan>none</l2-bridge-vlan>
        <l2-mac-entry>
            <l2-mac-address>28:c0:da:6c:43:38</l2-mac-address>
            <l2-mac-flags>D</l2-mac-flags>
            <l2-mac-logical-interface>ge-11/2/2.698</l2-mac-logical-interface>
        </l2-mac-entry>
        <l2-mac-entry>
            <l2-mac-address>60:03:47:07:c8:96</l2-mac-address>
            <l2-mac-flags>D</l2-mac-flags>
            <l2-mac-logical-interface>xe-70/0/0.698</l2-mac-logical-interface>
        </l2-mac-entry>
        <l2-mac-entry>
            <l2-mac-address>60:03:47:09:6b:51</l2-mac-address>
            <l2-mac-flags>D</l2-mac-flags>
            <l2-mac-logical-interface>xe-70/0/0.698</l2-mac-logical-interface>
        </l2-mac-entry>
        <l2-mac-entry>
            <l2-mac-address>60:03:47:17:fb:c7</l2-mac-address>
            <l2-mac-flags>D</l2-mac-flags>
            <l2-mac-logical-interface>xe-70/0/1.698</l2-mac-logical-interface>
        </l2-mac-entry>
    </l2ald-mac-entry>
</l2ald-rtb-macdb>

剧本:

代码语言:javascript
运行
复制
  tasks:
- name: RUN RPC Command
  juniper_junos_rpc:
    rpcs:
      - get-vpls-mac-table
    kwargs:
      instance: lab-ppp
    provider: "{{ credentials }}"
  register: vpls_info

- name: query mac info
  xml:
    xmlstring: "{{ vpls_info.stdout }}"
    xpath: //l2-mac-entry/l2-mac-address | //l2-mac-entry/l2-mac-logical-interface
    content: text
  register: vpls_macs

- name: show results
  debug:
    var: vpls_macs.matches

目前的结果:

代码语言:javascript
运行
复制
"vpls_macs.matches": [
{
    "l2-mac-address": "28:c0:da:6c:43:38"
}, 
{
    "l2-mac-logical-interface": "ge-11/2/2.698"
}, 
{
    "l2-mac-address": "60:03:47:07:c8:96"
}, 
{
    "l2-mac-logical-interface": "xe-70/0/0.698"
}
]

如何获得mac地址和它的接口,以显示在同一个debug: msg中?

编辑:

如何将mac和接口字符串列表放入变量?我试着把它添加到剧本中:

代码语言:javascript
运行
复制
    - name: Build List
  set_fact:
    mac_list: "{{ mac_list|default([]) }} + [ '{{item[0]['l2-mac-address'] }}: {{ item[1]['l2-mac-logical-interface'] }}' ]"
  loop: "{{ vpls_mac_address.matches | zip(vpls_mac_interface.matches) | list }}"

- name: Show Results
  debug:
    var: mac_list

但是只将最后一个mac和接口添加到变量中:

代码语言:javascript
运行
复制
    TASK [Show Results] *************
ok: [lab960.ftc] => {
    "mac_list": [
        "60:03:47:17:fb:c7: xe-70/0/1.698"
    ]
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-31 04:26:11

我稍微修改了你的剧本,引入了不同的任务来提取mac地址和界面。通过这种方式,您将得到两个列表,它们可以被压缩以获得所需的输出。

代码语言:javascript
运行
复制
  tasks:
- name: RUN RPC Command
  juniper_junos_rpc:
    rpcs:
      - get-vpls-mac-table
    kwargs:
      instance: lab-ppp
    provider: "{{ credentials }}"
  register: vpls_info

- name: query mac address info
  xml:
    xmlstring: "{{ vpls_info.stdout }}"
    xpath: //l2-mac-entry/l2-mac-address
    content: text
  register: vpls_mac_address

- name: query mac interface info
  xml:
    xmlstring: "{{ vpls_info.stdout }}"
    xpath: //l2-mac-entry/l2-mac-logical-interface
    content: text
  register: vpls_mac_interface

- name: debug
  debug:
    msg: "{{ item[0]['l2-mac-address'] }}: {{ item[1]['l2-mac-logical-interface'] }}"
  loop: "{{ vpls_mac_address.matches | zip(vpls_mac_interface.matches) | list }}"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58631789

复制
相关文章

相似问题

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