我正在尝试开发一个Python脚本,该脚本将登录数百台Cisco IOS设备并对其进行配置。我遇到的问题是,我不想在脚本本身中定义设备字典,而是让脚本引用一个文件(YAML?(并在文件中的设备中循环。脚本如下:
from netmiko import ConnectHandler
R1 = {
'device_type': 'cisco_ios',
'ip': '192.168.122.71',
'username': 'admin',
'password': 'cisco'
}
R2 = {
'device_type': 'cisco_ios',
'ip': '192.168.122.82',
'username': 'admin',
'password': 'cisco'
}
with open('snmp_configs.txt') as f:
lines = f.read().splitlines()
print (lines)
all_devices = [R1, R2]
for devices in all_devices:
net_connect = ConnectHandler(**devices)
output = net_connect.send_config_set(lines)
print (output)
正如您所看到的,我使用字典定义了R1和R2,但我不想在脚本中添加数百个设备字典。
您可以使用JSON或YAML格式来存储设备列表并在脚本中加载文件。
要使用JSON格式,请创建一个扩展名为.JSON的文件,例如devices.json
,其内容如下:
[
{
"device_type":"cisco_ios",
"ip":"192.168.122.71",
"username":"admin",
"password":"cisco"
},
{
"device_type":"cisco_ios",
"ip":"192.168.122.82",
"username":"admin",
"password":"cisco"
}
]
要使用YAML,请执行相同的操作,但这次使用了.YAML扩展,例如devices.yaml
,内容如下。要加载此文件,您需要安装PyYAML
包(例如pip-installPyYAML(
- device_type: cisco_ios
ip: 192.168.122.71
username: admin
password: cisco
- device_type: cisco_ios
ip: 192.168.122.82
username: admin
password: cisco
您可以在脚本中加载两个文件,如下所示:
import json
import yaml
# Load the json file
with open("devices.json") as f:
all_devices = json.load(f)
print(all_devices)
# Load the YAML file
with open("devices.yaml") as f:
all_devices = yaml.safe_load(f)
print(all_devices)
for device in all_devices:
print(device)
ConfigParser将完成该工作。与JSON模块一样,它也是标准库的一部分。它使用ini
文件。
.vini
[R1]
device_type = cisco_ios
ip = 192.168.122.71
username = admin
password = cisco
[R2]
device_type = cisco_ios
ip = 192.168.122.82
username admin
password cisco
Python代码:
import configparser
#from netmiko import ConnectHandler
config = configparser.ConfigParser()
config.read('devices.ini')
devices = config.sections()
for device in devices:
if config[device]['device_type'] == 'cisco_ios':
print(device)