禁止为 Junos PyEZ 应用程序中的警告引发的 RpcError 异常
总结 对于 Junos PyEZ 应用程序中的某些操作,您可以禁止显示 RpcError 为响应严重性为警告的元素而 <rpc-error> 引发的异常。
Junos PyEZ 使您能够在 Junos 设备上执行操作和配置任务。在 Junos PyEZ 应用程序中,当您调用特定方法或执行按需 RPC 时,Junos PyEZ 会将相应的 RPC 发送到设备以执行操作或检索请求的信息。如果 RPC 回复包含 <rpc-error> 严重性为警告或更高的元素,Junos PyEZ 应用程序将引发 RpcError 异常。
在某些情况下,可能有必要或希望禁止显示RpcError为响应警告而引发的异常。您可以通过在方法调用或 RPC 调用中包含参数来ignore_warning指示 Junos PyEZ 应用程序抑制RpcError为警告引发的异常。该ignore_warning参数采用布尔值、字符串或字符串列表。您可以指示设备忽略所有警告或一个或多个特定警告。
可以在以下jnpr.junos.utils.config.Config类方法中使用该ignore_warning参数:
-
commit() -
diff() -
load() -
pdiff() -
rollback()
在使用 RPC 检索get()配置和状态数据时,也可以使用ignore_warning。
忽略所有警告
若要指示应用程序忽略操作或 RPC 的所有警告,请在ignore_warning=True方法调用或 RPC 调用中包含参数。下面的示例忽略 和load()commit()方法的所有警告:
from jnpr.junos import Device
from jnpr.junos.utils.config import Config
dev = Device(host='router1.example.com')
dev.open()
with Config(dev, mode='exclusive') as cu:
cu.load(path='mx-config.conf', ignore_warning=True)
cu.commit(ignore_warning=True)
data = dev.rpc.get_configuration()
print(etree.tostring(data, encoding='unicode'))
dev.close()
如果包括 ignore_warning=True 并且所有 <rpc-error> 元素的严重性均为警告,则应用程序将忽略所有警告,并且不会引发 RpcError 异常。但是,任何 <rpc-error> 具有较高严重性的元素仍将引发异常。
忽略特定警告
若要指示应用程序忽略特定警告,请将参数设置为 ignore_warning 字符串或包含要忽略的警告的字符串列表。当设置为字符串或字符串列表时 ignore_warning ,字符串将用作不区分大小写的正则表达式。如果字符串仅包含字母数字字符,则会导致不区分大小写的子字符串匹配。但是,您可以包含库支持 re 的任何正则表达式模式以匹配警告。
以下 Junos PyEZ 应用程序在提交操作期间忽略两个特定警告。如果所有元素的<rpc-error>严重性都为警告,并且响应中的每个警告都与一个或多个指定的字符串匹配,则应用程序将RpcError禁止异常。
from jnpr.junos import Device
from jnpr.junos.utils.config import Config
commit_warnings = ['Advertisement-interval is less than four times',
'Chassis configuration for network services has been changed.']
dev = Device(host='router1.example.com')
dev.open()
with Config(dev, mode='exclusive') as cu:
cu.load(path='mx-config.conf')
cu.commit(ignore_warning=commit_warnings)
dev.close()