在问题:1
感谢有人能给我进一步的建议。我想使用python脚本和netmiko模块通过ssh连接到我的设备。我通过api请求获取ssh详细信息(json文件),并使用这些数据来运行脚本。但是我在下面得到了错误。我希望有人能给我指点迷津。在
我错过了一些东西,但我不知道怎么解决它。拜托纠正并引导我。谢谢。在
json文件创建为下面的片段response = requests.post(url,data=data,headers=headers,verify=False)
dictionary_info = response.json()
with open('devices.json', 'w') as fp:
json.dump(dictionary_info, fp, indent=4, sort_keys=True)
在设备.json归档如下:
^{pr2}$
当我运行下面的脚本(snippet)时,它将返回下面的错误File "devices.py", line 18, in
print('Connecting to device:',device['ip'])
TypeError: string indices must be integers
for device in devices:
try:
print('~' * 79)
print('Connecting to device:',device['ip'])
connection = netmiko.ConnectHandler(**device)
print(connection.send_command('show interface'))
connection.disconnect()
except netmiko_exceptions as e:
print('Failed to ', device['ip'], e)
我应该能够根据json文件提供的ssh详细信息对每个设备运行脚本和ssh。不知怎么回事,代码需要进一步修改,只是我不知道怎么修改。请帮帮我。谢谢
我编辑的内容设备.json…我删除了花括号{},对象名'device'和'status',只保留列表[],如下所示[
{
"username": "scnpa",
"ip": "10.10.10.1",
"password": "123",
"device_type": "cisco_ios"
},
{
"username": "scnpa",
"ip": "10.10.10.2",
"password": "123",
"device_type": "cisco_ios"
},
{
"username": "scnpa",
"ip": "10.10.10.3",
"password": "123",
"device_type": "cisco_ios"
},
{
"username": "scnpa",
"ip": "10.10.10.4",
"password": "123",
"device_type": "cisco_ios"
}
]
今天,我只需尝试nerror…然后运行脚本,它就可以工作了..使用上面的可编辑json文件。。。我知道这不是最终的解决方案,我会得到我之前共享的json文件(用花括号{}等),或者有没有办法,我可以得到上面的格式[{},{},{},{}]?从JSONAPI响应创建文件,只获取{{},{}.{},{}]内容。。。?在
或者保持原样。。。在
可能需要在for循环部分修改python脚本。我试着移除设备,却得到了不同的错误。。将“device”更改为其他名称,并仍然给出错误“TypeError:string index must be integers”。
不知道。。。在for device in devices:
try:
print('~' * 79)
print('Connecting to device:',device['ip'])
connection = netmiko.ConnectHandler(**device)
print(connection.send_command('show interface'))
connection.disconnect()
问题:2 I创建单独的帖子
关于从API读取响应json文件(string)查询,我还有另外一个问题。例如,json响应如下{
"status": "SUCCESS",
"device": [
{
"model":"XXXX-A",
"username": "scnpa1",
"ip": "10.10.10.1",
"password": "123",
"device_type": "cisco_ios"
},
{
"model":"XXXX-A",
"username": "scnpa2",
"ip": "10.10.10.2",
"password": "456",
"device_type": "cisco_ios"
}
]
}
如何确保只有特定的键/值,如名称和密码,并且能够将文件打印并创建为json文件(列表),该文件可以作为python脚本的输入读取。希望它会像下面这样{
"status": "SUCCESS",
"device": [
{
"username": "scnpa1",
"ip": "10.10.10.1",
"password": "123"
},
{
"username": "scnpa2",
"ip": "10.10.10.2",
"password": "456"
}
]
}
但是我将使用下面的json参数来创建它response = requests.post(url,data=data,headers=headers,verify=False)
dictionary_info = response.json()
with open('devices.json', 'w') as fp:
json.dump(dictionary_info, fp, indent=4, sort_keys=True)
请告诉我。谢谢