使用 Paramiko + CiscoConfParse 读取远程配置
Read remote configs using Paramiko + CiscoConfParse
我有一个通过 api 连接到 IPAM 工具的脚本,获取新创建的 vlan,然后通过 paramiko 在远程 rancid 服务器上执行 'device q {vlan}'。从这里我得到了存在 vlan 的设备字典。
这里有函数
def check_rancid_for_vlan():
vlans = get_vlans()
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(rancid_host, username=username, password=password)
results = {}
for i in vlans:
stdin, stdout, stderr = client.exec_command('cd /var/home/configs; device q Vlan{}'.format(i))
for line in stdout:
if "no" not in line:
device = line.split(":")[0]
if i in results:
results[device].append(i)
else:
results[device] = [i]
for key, val in results.iteritems():
for i in val:
print(key,i)
client.close()
这将输出
(u'switch1', 1001)
(u'switch2', 1002)
(u'switch3', 1003)
(u'switch4', 1004)
我想在每个配置中搜索 vlan 并打印出来。 CiscoConfParse 允许使用
搜索接口
parse.find_objects_w_child(r"interface", vlan)
但是有没有办法通过 paramiko 远程执行此操作?或者可能有更好的解决方案?
解决方案是将配置目录从远程复制到本地并在那里执行解析
我有一个通过 api 连接到 IPAM 工具的脚本,获取新创建的 vlan,然后通过 paramiko 在远程 rancid 服务器上执行 'device q {vlan}'。从这里我得到了存在 vlan 的设备字典。
这里有函数
def check_rancid_for_vlan():
vlans = get_vlans()
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(rancid_host, username=username, password=password)
results = {}
for i in vlans:
stdin, stdout, stderr = client.exec_command('cd /var/home/configs; device q Vlan{}'.format(i))
for line in stdout:
if "no" not in line:
device = line.split(":")[0]
if i in results:
results[device].append(i)
else:
results[device] = [i]
for key, val in results.iteritems():
for i in val:
print(key,i)
client.close()
这将输出
(u'switch1', 1001)
(u'switch2', 1002)
(u'switch3', 1003)
(u'switch4', 1004)
我想在每个配置中搜索 vlan 并打印出来。 CiscoConfParse 允许使用
搜索接口parse.find_objects_w_child(r"interface", vlan)
但是有没有办法通过 paramiko 远程执行此操作?或者可能有更好的解决方案?
解决方案是将配置目录从远程复制到本地并在那里执行解析