来自路由器的配置显示为一行需要多行才能用于思科ConParse



网络家伙是Python和编程的新手,他发现了这个ciscoconfparse库,看起来有一些非常有用的功能。 我遇到了一个我确定是基本问题的问题,但还没有弄清楚。 我正在尝试从路由器中提取 snmp 配置以创建一个配置集以删除 v2 配置。 利用网美子抢夺"秀跑|在 SNMP 中"然后解析它。 返回的配置显示为一行。 当使用 ciscoconfparse 语句删除一些行时,它会删除所有内容(假设因为它只有一行(,所以我没有什么可以构建的了。

在所有在线示例中,示例配置如下所示,并且函数像多行一样工作。

conf=[
'access-list dmz_inbound extended deny udp object training-network any4 eq snmp',
'snmp-server host inside 10.10.10.10 poll community ***** version 2c',
'snmp-server host inside 10.20.20.20 poll community ***** version 2c',
'no snmp-server location',
'no snmp-server contact',
'snmp-server community *****',
'!'
]

当我实际从路由器拉取配置时,它看起来像这样,带有换行符,但被解析为 1 行:

'access-list testNada extended permit udp host 10.10.10.10 eq snmp host 10.20.10.10 eq snmp nsnmp-server host inside 10.11.11.11 community ***** version 2cnsnmp-server host inside 10.5.5.5 poll community ***** version 2cnno snmp-server locationnno snmp-server contactnsnmp-server community *****n']

我正在运行的代码片段。 删除行语句删除整个配置截图,而不仅仅是与参数匹配的行。


conf = [ssh.send_command("show run | include snmp")]
parse = CiscoConfParse(conf)
parse.delete_lines('no snmp-server')
parse.delete_lines('access-list')
newConf = (parse.replace_lines('snmp', 'no snmp',excludespec='v3'))
ssh.send_config_set(newConf)

如何直接从路由器中提取配置以显示为多行,以便我可以使用 ciscoconfparse 函数?

您正在将字符串传递给 CiscoConfParse 而不是列表。

请尝试以下操作:

conf = [ssh.send_command("show run | include snmp")]
# this will change your string into a list
formatted_output = conf.splitlines() 
parse = CiscoConfParse(formatted_output)
parse.delete_lines('no snmp-server')
parse.delete_lines('access-list')
newConf = (parse.replace_lines('snmp', 'no snmp',excludespec='v3'))

说明:Netmiko 将返回一个字符串(/n 表示新行,但它仍然是一个字符串(。当你使用分割线时 - 它会将你的字符串转移到一个列表中(每一行都是一个新元素(

能够通过迭代netmiko返回的列表来使其工作,该列表返回了一个"列表中的列表"。 基本上,它是一个具有一个索引的列表,恰好是包含配置的列表。

newConf=[]
for i in conf:
newConf.append(i.split("n"))

返回 [['访问列表测试Nada 扩展许可证 udp 主机 10.10.3.10 eq snmp 主机 10.10.10.10 eq snmp ', '10.4.233.8 社区 ***** 版本 2c 内的 SNMP-服务器主机', ....]]

然后通过索引 0 的解析器运行它。

parse = CiscoConfParse(newConf[0])

这导致了多行,我可以使用 delete_lines 和 replace_lines 函数来生成我想发送回我的设备的否定配置: ['10.4.233.8 社区 ***** 版本 2c 中没有 SNMP 服务器主机', '10.3.25.17 轮询社区 ***** 版本 2c 中没有 SNMP 服务器主机',...]]

最新更新