配置符合 RFC 的 NETCONF 会话
使用 NETCONF 管理 Junos 设备时,您可以要求 NETCONF 服务器在 NETCONF 会话期间实施符合 RFC 4741( NETCONF 配置协议 )的某些行为。要实施 RFC 合规性,请在 rfc-compliant
层次结构级别配置语句 [edit system services netconf]
。配置语句 rfc-compliant
会影响 NETCONF 会话的以下几个方面:
-
NETCONF 服务器回复中发出的命名空间
-
在 RPC 回复中返回的
<get>
元素,<get-config>
如果没有要返回的配置数据,则要执行的操作 -
NETCONF 服务器将同时返回具有
<ok/>
严重警告级别的元素和<rpc-error>
元素的回复 - NETCONF 服务器回复
<commit>
和<validate>
操作。
以下各节将详细介绍这些差异。
命名 空间
默认情况下,NETCONF 服务器在服务器的回复的开始标记中将默认命名空间设置为 NETCONF 命名空间,而 NETCONF 标记名称没有限制。例如:
<hello xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> <capabilities> <capability>urn:ietf:params:netconf:base:1.0</capability> ... </capabilities> <session-id>27700</session-id> <hello> <rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:junos="http://xml.juniper.net/junos/15.1R1/junos">
配置 rfc-compliant
语句时,NETCONF 服务器不会在其回复中定义默认命名空间。相反,服务器会为 NETCONF 命名空间提供一个命名空间声明,该声明绑定到 nc
前缀,并在其回复中使用前缀限制所有 NETCONF 标记。如果在 RPC 请求中将默认命名空间设置为 NETCONF 命名空间,服务器将丢弃默认命名空间,并仅使用绑定到 nc
前缀的已声明命名空间发出其回复。
以下示例输出显示配置语句时 rfc-compliant
NETCONF 服务器<hello>
的消息和功能交换。标记<hello>
包含xmlns:nc
声明,所有 NETCONF 标记均包含nc
前缀。
<nc:hello xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0"> <nc:capabilities> <nc:capability>urn:ietf:params:netconf:base:1.0</nc:capability> ... </nc:capabilities> <nc:session-id>27703</nc:session-id> </nc:hello>
以下输出显示配置语句时 rfc-compliant
的示例 RPC 回复:
<nc:rpc-reply xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:junos="http://xml.juniper.net/junos/15.1R1/junos"> <nc:data> <configuration xmlns="http://xml.juniper.net/xnm/1.1/xnm" junos:changed-seconds="1417554471" junos:changed-localtime="2014-12-02 13:07:51 PST"> <!--configuration data--> </configuration> <database-status-information> <database-status> <user>root</user> <terminal></terminal> <pid>47868</pid> <start-time junos:seconds="1417560303">2014-12-02 14:45:03 PST</start-time> <edit-path></edit-path> </database-status> </database-status-information> </nc:data> </nc:rpc-reply>
从 Junos OS 17.2R1 版开始,当您在 NETCONF 会话中配置 rfc-compliant
语句并请求配置数据时,服务器会将该元素的默认命名空间 <configuration>
设置为与相应 YANG 模型中的同一命名空间。
<rpc> <get-config> <source> <running/> </source> </get-config> </rpc> ]]>]]> <nc:rpc-reply xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:junos="http://xml.juniper.net/junos/17.2R1/junos"> <nc:data> <configuration xmlns="http://yang.juniper.net/yang/1.1/jc/configuration/junos/17.2R1.13" junos:commit-seconds="1493761452" junos:commit-localtime="2017-05-02 14:44:12 PDT" junos:commit-user="user"> ... </configuration> </nc:data> </nc:rpc-reply> ]]>]]>
<get> 和 <get-config> 操作的更改
如果没有要返回的配置数据,语句rfc-compliant
会影响<get>
<get-config>
和服务器回复。例如,当您应用过滤器以返回配置的子集且配置的那部分为空时,可能会发生这种情况。
如果执行<get>
或<get-config>
操作,并且请求的层次结构中没有配置数据,则rfc-compliant
如果未配置语句,则 RPC 回复将在<data>
元素中包含一个空<configuration>
元素。
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:junos="http://xml.juniper.net/junos/15.1D0/junos"> <data> <configuration> </configuration> </data> </rpc-reply>
如果执行 <get>
或 <get-config>
操作,并且请求的层次结构中没有配置数据,则 rfc-compliant
如果配置了语句,RPC 回复将返回空 <data>
元素,并省略该 <configuration>
元素。
<nc:rpc-reply xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:junos="http://xml.juniper.net/junos/15.1R1/junos"> <nc:data> </nc:data> </nc:rpc-reply>
<rpc 错误> RPC 回复中具有严重级别警告的元素
从 Junos OS 17.4R3、18.2R2、18.3R2 和 18.4R1 版开始,配置语句时rfc-compliant
,NETCONF 服务器无法返回同时<rpc-error>
包含元素和元素的 <ok/>
RPC 回复。如果操作成功,但服务器回复除了该元素外<ok/>
,还会包含一个或多个<rpc-error>
具有严重级别警告的元素,则省略警告。此外,从 Junos OS 21.2R1 版开始,操作期间<commit>
省略的任何警告将被重定向到系统日志文件进行跟踪。
在早期版本中,或者未配置语句时 rfc-compliant
,NETCONF 服务器可能会发出 RPC 回复,其中包含 <rpc-error>
具有严重级别警告的元素和 <ok/>
元素。例如,提交操作可能成功,但会返回警告,如以下 NETCONF 服务器回复中所示:
<nc:rpc-reply xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:junos="http://xml.juniper.net/junos/17.4R1/junos"> <nc:rpc-error> <nc:error-severity>warning</nc:error-severity> <nc:error-message> uid changed for jadmin (2001->2014) </nc:error-message> </nc:rpc-error> <nc:ok/> </nc:rpc-reply> ]]>]]>
如果配置语句 rfc-compliant
,则省略警告。
<nc:rpc-reply xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:junos="http://xml.juniper.net/junos/18.4R1/junos"> <nc:ok/> </nc:rpc-reply> ]]>]]>
NETCONF 服务器对<承诺>和<验证的响应>运维
从 Junos OS 21.2R1 版开始,配置语句时 rfc-compliant
,NETCONF 服务器对 <commit>
操作的响应包括以下更改:
-
如果一个成功的
<commit>
操作返回了包含一个或多个警告的响应,除了在响应中省略之外,警告将被重定向到系统日志文件。 -
NETCONF 服务器响应将
<source-daemon>
元素作为元素的子元素<error-info>
发出,而非元素<rpc-error>
。 -
如果同时在
[edit system services netconf]
层次结构级别配置flatten-commit-results
语句,NETCONF 服务器只会在其响应中发出<ok/>
或<rpc-error>
元素,并抑制任何<commit-results>
XML 子树。
从 Junos OS 23.2R1 版开始,当您配置 rfc-compliant
语句时,NETCONF 服务器仅发出一个 <ok/>
或 <rpc-error>
元素来 <validate>
响应操作。在早期版本中,RPC 回复还包括该 <commit-results>
元素。
rfc-compliant
语句时,NETCONF 服务器仅发出一个
<ok/>
或
<rpc-error>
元素来
<validate>
响应操作。在早期版本中,RPC 回复还包括该
<commit-results>
元素。
rfc-compliant
,NETCONF 服务器对
<commit>
操作的响应将得到修改。
rfc-compliant
,NETCONF 服务器无法返回同时
<rpc-error>
包含元素和元素的
<ok/>
RPC 回复。