首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Meraki API调用get.组织/上行链路查找失败的连接并将networkid转换为网络名称

Meraki API调用get.组织/上行链路查找失败的连接并将networkid转换为网络名称
EN

Stack Overflow用户
提问于 2021-10-25 12:00:10
回答 2查看 76关注 0票数 1

我已经寻找了几个星期,但我没有找到任何可以帮助我解决这个特定问题的东西。

我从一个API调用(Meraki)中得到了大量的输出,我希望从列表中提取某些特征。

任务:从API调用中读取输出,循环输出,直到检测到状态'failed‘,并打印该项的接口和networkId,将networkId从预定义列表中转换为网络名称,并继续打印所有失败的接口,直到输出结束。

API调用获取整个组织,我希望将networkid的列表与网络名称(因为它们不是添加在同一API调用中)进行匹配,这样就可以读取哪个网络有哪个接口发生了故障。

输出包含大量数据,我不需要IP、网关、DNS等所有这些输出值。

API调用的输出示例如下:

代码语言:javascript
复制
{'networkId': 'A_1234567890', 'serial': 'A1B2-C3D4-E5F6', 'model': 'MX64', 'lastReportedAt': '2021-01-01T10:00:00Z', 'uplinks': [{'interface': 'wan1', 'status': 'active', 'ip': '192.168.1.2', 'gateway': '192.168.1.1', 'publicIp': '192.168.1.3', 'primaryDns': '8.8.8.8', 'secondaryDns': '8.8.4.4', 'ipAssignedBy': 'static'}, {'interface': 'wan2', 'status': 'ready', 'ip': '172.16.1.2', 'gateway': '172.16.1.1', 'publicIp': '172.16.1.3', 'primaryDns': '8.8.8.8', 'secondaryDns': '8.8.4.4', 'ipAssignedBy': 'static'}]}

这是一个我想要检查其状态的组织中有50个网络的网络。

我是Python的新手,我尝试过使用while循环来筛选输出,以找到失败的状态,但我无法输出连接到它的整个网络的信息,我已经看过了,但大多数示例都是使用单独的单词或数字的小预定义列表。

API调用im使用:(找到了模板,并在必要时进行了修改,以获得我组织中所有网络的总列表)

代码语言:javascript
复制
import requests

url = "https://api.meraki.com/api/v1/organizations/{ORG_ID}/uplinks/statuses"

payload = None

headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Cisco-Meraki-API-Key": "API_KEY"
}

response = requests.request('GET', url, headers=headers, data = payload)

pprint(response.json())
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-10-28 12:32:48

在另一个帖子中,@Szabolcs给出了答案:

代码语言:javascript
复制
net_names = {"A_1234567890": "Name"}
for network_data in json_data:
  network_id = network_data.get("networkId")
  for uplink_data in network_data.get("uplinks", []):
    if uplink_data["status"] == "failed":
      print(
        "network ID:",
        network_id, ""
        "Network:",
        net_names.get(network_id, "n/a"),
        "- Interface:",
        uplink_data["interface"],
        "- failed",)

做我想做的一切。

票数 0
EN

Stack Overflow用户

发布于 2021-10-25 13:07:26

根据您的示例输出,您似乎只在响应和接口中获得了一次网络ID,并且多次被视为Uplink属性的一部分,因此,您可以将API响应解析为Json对象,并将网络名称-网络ID映射到字典中,然后执行类似下面的操作来获取失败状态

代码语言:javascript
复制
net_names = {'A_1234567890':'abc', 'b':'xyz'}
network_id =response_json.get('networkId')
for item in response_json['uplinks']:
    if item['status'] == "failed":
        print('network ID:', network_id,'network_name:',net_names.get(network_id), 'Interface:',item['interface'])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69707701

复制
相关文章

相似问题

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