抑制在 Junos PyEZ 应用程序中为警告引发的 RpcError 异常
对于某些 Junos PyEZ 操作,您可以抑制 RpcError 为响应严重性级别为警告的元素而 <rpc-error> 引发的异常。
您可以通过 Junos PyEZ 在运行 Junos OS 的设备和运行 Junos OS 演化版的设备上执行操作和配置任务。当 Junos PyEZ 应用程序调用特定方法或执行按需 RPC 时,Junos PyEZ 会向设备发送相应的 RPC 以执行操作或检索请求的信息。如果 RPC 回复包含 <rpc-error> 严重性级别为“警告”或更高的元素,则 Junos PyEZ 将 RpcError 引发异常。
在某些情况下,可能有必要或希望抑制RpcError为响应警告而引发的异常。Junos PyEZ 应用程序可以通过在方法调用或 RPC 调用中包含ignore_warning参数来抑制这些RpcError异常。ignore_warning参数采用布尔值、字符串或字符串列表。您可以指示设备忽略所有警告或一个或多个特定警告。
在以下情况下,您可以包含 ignore_warning 参数:
-
使用
get()RPC 检索配置或状态数据。 -
调用以下
jnpr.junos.utils.config.Config类方法:-
commit() -
diff() -
load() -
pdiff() -
rollback()
-
忽略所有警告
若要指示应用程序忽略操作或 RPC 的所有警告,请在方法调用或 RPC 调用中包含 ignore_warning=True 该参数。以下示例忽略 and load() commit() 方法的所有警告:
from jnpr.junos import Device
from jnpr.junos.utils.config import Config
from lxml import etree
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()