一个网络新手,他刚接触Python和编程,发现这个ciscoconfparse库看起来有一些非常有用的特性。我遇到了一个问题,我确信这是一些基本的东西,但还没有弄清楚。我正在尝试从路由器拉取snmp配置,以创建一个配置集来删除v2配置。使用netmiko获取"show run | in 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 2c\nsnmp-server host inside 10.5.5.5 poll community ***** version 2c\nno snmp-server location\nno snmp-server contact\nsnmp-server community *****\n']我正在运行的代码片段。delete line语句删除整个配置片段,而不仅仅是与arg匹配的行。
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函数?
发布于 2020-06-13 06:07:51
您要将字符串而不是列表传递给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表示换行,但它仍然是一个字符串)。当你使用拆分时-它会把你的字符串转换成一个列表(每一行都是一个新的元素)
发布于 2020-06-17 20:54:59
我能够通过迭代netmiko返回的列表来使其工作,netmiko返回了一个“列表中的列表”。基本上,它是一个列表,它有一个索引,恰好是包含配置的列表。
newConf=[]
for i in conf:
newConf.append(i.split("\n"))返回['access-list testNada extended permit udp host 10.10.3.10 eq snmp host 10.10.10.10 eq snmp ','snmp-server host inside 10.4.233.8 community * version 2c',....]
然后通过索引0的解析器运行它。
parse = CiscoConfParse(newConf[0])这导致了多行,我可以使用delete_lines和replace_lines函数来生成我想要发送回我的设备的否定配置:'no snmp-server host in 10.4.233.8 community *version2c‘,'no snmp-server host inside 10.3.25.17轮询社区*version2c’,...]
https://stackoverflow.com/questions/62352053
复制相似问题