我有一个Ansible解析器,它将一些CLI输出解析为下面的JSON,下面是一个路由器的示例
{
"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"
]
}
现在我绞尽脑汁,搜索并阅读了几天的教程,教我如何提取这些数据进行分析
我的剧本现在以这个结尾,使用一些教程,我想我可以尝试使用JMESPath来实现它,为此我尝试了大量的格式,我也尝试过循环使用字典项,我试图将我的解析器转换为使用字典列表而不是字典字典字典,但令我感到沮丧的是,我什么也得不到。在
我的最终目标是在一个循环中处理每个字典来执行分析,最简单的一个是输出哪个对等点关闭(状态没有整数)
^{pr2}$最终目标示例:
RTR-01
neighbour 10.10.20.1 is down
RTR-02
neighbour 10.30.20.1 is down
或者
RTR-01型
| 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 |
对每个路由器都是如此
我已经为上面创建了一个jinja2模板。输出是相似的,但我对条件有一些困惑,但我想在这里分享。在
如果你能举例说明就好了。在
行动手册:
模板
^{pr2}$输出
如果我的需求是正确的,这里有一种方法来解析var并得到您列出的“决策”。在
PB,测试变量包括:
为了方便起见,我写了2个任务。如果您想像您的示例一样生成一个表,那么您可能应该使用jinja模板任务。在
结果:
^{pr2}$希望有帮助
相关问题 更多 >
编程相关推荐