Meraki API 调用 get.organisation/uplinks 查找失败的连接并将 networkid 转换为网络名称
Meraki API call get.organisation/uplinks find failed connections and translate networkid into a network name
我已经找了几个星期了,但没有找到任何可以帮助我解决这个具体问题的东西。
我从 API 调用 (Meraki) 中获得了大量输出,我希望从列表中提取某些功能。
任务:读取 API 调用的输出,循环输出直到检测到状态 'failed' 并打印该项目的接口和 networkId 将 networkId 转换为预定义列表中的网络名称,并继续打印所有“失败的接口”直到输出结束。
API 调用获取整个组织,我想将 networkid 列表与网络名称相匹配(因为它们没有添加到同一个 API 调用中)所以它可读什么网络有哪个接口失败了。
输出包含大量数据,我不需要所有这些输出值,如 IP、网关、DNS 等
API 调用的输出示例:
{'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 循环筛选输出以找到失败状态,但我无法输出与之相关的整个网络信息,我看过了at 但大多数示例都使用单独的单词或数字的小型预定义列表。
API 调用我使用:
(找到模板并在必要时进行修改以获得我组织中所有网络的总列表)
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())
根据您的示例输出,您似乎只在响应和接口中获得了一次网络 ID,并且多次被视为上行链路属性的一部分,
因此,您可以将 API 响应解析为 Json 对象,并将网络名称 - 网络 ID 映射到字典中,然后执行类似下面的操作以获取失败状态
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'])
@Szabolcs 在另一个 post 中给出的答案:
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",)
是我想要的吗
我已经找了几个星期了,但没有找到任何可以帮助我解决这个具体问题的东西。
我从 API 调用 (Meraki) 中获得了大量输出,我希望从列表中提取某些功能。
任务:读取 API 调用的输出,循环输出直到检测到状态 'failed' 并打印该项目的接口和 networkId 将 networkId 转换为预定义列表中的网络名称,并继续打印所有“失败的接口”直到输出结束。
API 调用获取整个组织,我想将 networkid 列表与网络名称相匹配(因为它们没有添加到同一个 API 调用中)所以它可读什么网络有哪个接口失败了。
输出包含大量数据,我不需要所有这些输出值,如 IP、网关、DNS 等
API 调用的输出示例:
{'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 循环筛选输出以找到失败状态,但我无法输出与之相关的整个网络信息,我看过了at 但大多数示例都使用单独的单词或数字的小型预定义列表。
API 调用我使用: (找到模板并在必要时进行修改以获得我组织中所有网络的总列表)
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())
根据您的示例输出,您似乎只在响应和接口中获得了一次网络 ID,并且多次被视为上行链路属性的一部分, 因此,您可以将 API 响应解析为 Json 对象,并将网络名称 - 网络 ID 映射到字典中,然后执行类似下面的操作以获取失败状态
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'])
@Szabolcs 在另一个 post 中给出的答案:
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",)
是我想要的吗