回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我有一个Ansible解析器,它将一些CLI输出解析为下面的JSON,下面是一个路由器的示例</p>
<pre><code>{
"ansible_facts": {
"bgp_summary_facts": [
{
"65001_10.10.10.1": {
"Data": {
"inq": "0",
"msgrcvd": "638",
"msgsent": "424",
"neighbor": "10.10.10.1",
"uptime": "01:35:54",
"peer_as": "65001",
"state": "2",
"tblver": "0",
"version": "4"
}
}
},
{
"65001_10.10.10.2": {
"Data": {
"inq": "0",
"msgrcvd": "208364",
"msgsent": "424",
"neighbor": "10.10.10.2",
"uptime": "3w1d",
"peer_as": "65001",
"state": "71",
"tblver": "0",
"version": "4"
}
}
},
{
"65002_10.10.20.1": {
"Data": {
"inq": "0",
"msgrcvd": "0",
"msgsent": "1",
"neighbor": "10.10.20.1",
"uptime": "never",
"peer_as": "65002",
"state": "Idle",
"tblver": "0",
"version": "4"
}
}
},
{
"65010": {
"Data": {
"inq": "0",
"msgrcvd": "22611",
"msgsent": "424",
"neighbor": "10.10.30.1",
"uptime": "2d11h",
"peer_as": "65010",
"state": "36",
"tblver": "0",
"version": "4"
}
}
}
]
},
"changed": false,
"included": [
"parsers/ios/show_ip_bgp_summary.yml"
]
}
</code></pre>
<p>现在我绞尽脑汁,搜索并阅读了几天的教程,教我如何提取这些数据进行分析</p>
<p>我的剧本现在以这个结尾,使用一些教程,我想我可以尝试使用JMESPath来实现它,为此我尝试了大量的格式,我也尝试过循环使用字典项,我试图将我的解析器转换为使用字典列表而不是字典字典字典,但令我感到沮丧的是,我什么也得不到。在</p>
<p>我的最终目标是在一个循环中处理每个字典来执行分析,最简单的一个是输出哪个对等点关闭(状态没有整数)</p>
^{pr2}$
<p>最终目标示例:</p>
<pre><code>RTR-01
neighbour 10.10.20.1 is down
RTR-02
neighbour 10.30.20.1 is down
</code></pre>
<p>或者</p>
<p>RTR-01型</p>
<pre><code>| neighbour | bgp as | prefixes | uptime |
|------------|--------|----------|----------|
| 10.10.10.1 | 65001 | 2 | 01:35:54 |
| 10.10.10.2 | 65001 | 2 | 3w1d |
| 10.10.20.1 | 65002 | | never |
</code></pre>
<p>对每个路由器都是如此</p>