2017-05-18 49 views
1

我一直试图通过下面的程序运行下面的命令,但它们是获取整个配置文件而不是匹配命令的结果。 PYEZ不支持匹配功能吗?PYEZ - 显示集|匹配命令

显示配置|显示集|匹配RI- 显示配置|显示集|匹配POOL- 显示配置|显示集|匹配SERVICE-

我的目的是获取匹配RI命令的设置命令行,将设置替换为删除和加载到设备。

请帮忙。

尝试: log.debug( “收集路由器配置”)

now = datetime.datetime.now() 
    datets = str(now.year) + str(now.month) + str(now.day) + "_" + str(now.hour) + str(now.minute) + str(now.second) 
    log.debug("timestamp set to " + str(datets)) 

    if (format == "cnf"): 
     cnf = dev.cli("show configuration", warning=False) 
     FileName = rtName + "." + datets + ".cnf" 
     log.debug("The configuration will be stored in filename as %s", FileName) 

     # saving the configuration into a CNF file 
     f = open(FileName, 'w+') 
     f.write(cnf) 
     f.close 
     return FileName 

    elif (format == "set"): 
     cnf = dev.cli("show configuration | display set | match pool-", warning=False) 
     FileName = rtName + "." + datets + ".txt" 
     log.debug("The configuration will be stored in filename as %s", FileName) 
     # saving the configuration into a Text file 
     f = open(FileName, 'w+') 
     f.write(cnf) 
     f.close 
     return FileName 

    else: # defaults to XML 
     cnf = dev.rpc.get_config() 
     FileName = rtName + "." + datets + ".xml" 
     log.warn("The configuration will be stored in filename as %s", FileName) 

     # saving the configuration into a XML file 
     f = open(FileName, 'w+') 
     f.write(etree.tostring(cnf)) 
     f.close 
     return FileName 

except Exception as e: 
    log.error("could not collect the router configuration via RPC") 
    log.error(e.message) 
    return None 


# if the execution gets here, the return will be None 
return FileName 

回答

2

正如警告说,该dev.cli()方法仅用于调试目的。它不支持任何| match修饰符。这是因为它不是在CLI提示符下实际执行命令,而是通过NETCONF会话发送<command> RPC,并且存在Junos限制,即<command> RPC不支持| match修饰符。

对你而言,我建议你使用dev.rpc.get_config()来检索配置。您可以指定filter_xml参数来检索配置的子集。 http://junos-pyez.readthedocs.io/en/2.1.2/jnpr.junos.html#jnpr.junos.rpcmeta._RpcMetaExec.get_config

例如,要检索设定的格式全部[edit routing-instances]配置,你可以这样做:

>>> rsp = dev.rpc.get_config(filter_xml='<routing-instances/>', options={'format':'set'}) 
>>> print rsp.text 

set routing-instances bar instance-type virtual-router 
set routing-instances foo instance-type virtual-router 

您可以使用filter_xml参数只能指定一个配置层次结构。您无法匹配特定的文字模式。但是,您可以始终下载配置层次结构,然后使用普通的Python字符串方法对响应进行字符串匹配。

--Stacy