使用 Junos XML 协议对配置数据中的元素重新排序
对于大多数配置对象,对象及其子对象的创建顺序并不显著,因为 Junos OS 配置管理软件在配置层次结构中预先确定的位置存储和显示配置对象。但是,某些配置对象(如路由策略和防火墙过滤器)由必须按顺序处理和分析以产生预期的路由行为的元素组成。当客户端应用程序使用 Junos XML 管理协议将新元素添加至有序集时,元素将附加至现有元素列表。随后,客户端应用程序可以酌情对元素重新排序。
在使用 Junos OS 运行 Junos OS 设备的 Junos XML 协议会话中,要更改有序设置中的配置元素顺序,客户端应用程序首先包含使用 Junos XML协议创建、修改或删除配置元素中所述的标签元素。如果使用 Junos XML 标记元素,应用程序将发出表示已排序集的容器标记元素,并包含要移动的配置元素的每个标识符的标记元素。在下面的示例中,标识符标记元素称为 <name>
。
要将现有元素移动到订单集的第一个位置,应用程序应包含该元素的开放 insert="first"
容器标记中的属性。
<configuration> <!-- opening tag for each parent of the set --> <ordered-set insert="first"> <name>identifier-for-moving-object</name> </ordered-set> <!-- closing tag for each parent of the set --> </configuration>
将现有元素移动到相对于另一元素的位置,应用程序在开放容器标记中包含 或 属性,以指示移动元素相对于集合中另一个参考元素的新 insert="before"
insert="after"
位置。要识别参考元素,它将每个参考元素的标识符作为已排序集的开放容器标记中的一个属性。
在下面的示例中,该集合中的元素具有一个标识符,称为 <name>
:
<configuration> <!-- opening tag for each parent of the set --> <ordered-set insert="(before | after)" name="referent-value"> <name>identifier-for-moving-object</name> </ordered-set> <!-- closing tag for each parent of the set --> </configuration>
在下面的示例中,集的每个元素都有两个标识符。开口标记仅以两行显示,但仅表示清晰性:
<configuration> <!-- opening tag for each parent of the set --> <ordered-set insert="(before | after)" identifier1="referent-value" identifier2="referent-value"> <identifier1>value-for-moving-object</identifier1> <identifier2>value-for-moving-object</identifier2> </ordered-set> <!-- closing tag for each parent of the set --> </configuration>
属性可以与 或 属性组合在一起,在重新排序时停用或 insert
inactive
重新激活 active
配置元素。有关详细信息,请参阅 使用 Junos XML协议同时更改配置元素的激活状态。
使用配置模式命令对元素重新排序时,应用程序指定相当于 CLI insert
模式命令的命令。
<configuration-set> insert statement-path-to-object identifier-for-moving-object (before | after) referent-value </configuration-set>
属性 insert="first"
在配置模式命令CLI同等功能。
当格式化的 ASCII 文本或 JSON 用于表示配置数据时,重新排序操作不可用。
以下示例显示如何移动称为 (在 层次结构级别定义的)防火墙过滤器,以及如何将其放在另一个称为使用 Junos older-filter
[edit firewall filter]
XML 标记元素 newer-filter
的过滤器之后。此操作等同于以下配置模式命令:
[edit] user@host# insert firewall family inet filter older-filter after filter newer-filter

以下示例显示如何移动在层次结构级别定义的防火墙过滤器(称为 )并移动到另一个使用配置模式命令 older-filter
[edit firewall filter]
称为 newer-filter
的过滤器之后:
<rpc> <load-configuration action="set" format="text"> <configuration-set> insert firewall family inet filter older-filter after filter newer-filter </configuration-set> </load-configuration> </rpc>
以下示例显示如何移动在层次结构OSPF定义的虚拟 [edit protocols ospf area area]
链路。带标识符的链路 neighbor-id 192.168.0.3
, transit-area 10.10.10.1
并移动到带标识符 和 neighbor-id 192.168.0.5
的链路之前 transit-area 10.10.10.2
。此操作等同于以下配置模式命令:
[edit protocols ospf area area] user@host# insert virtual-link neighbor-id 192.168.0.3 transit-area 10.10.10.1 before virtual-link neighbor-id 192.168.0.5 transit-area 10.10.10.2
客户端应用程序
<rpc> <load-configuration> <configuration> <protocols> <ospf> <area> <name>area</name> <virtual-link insert="before" neighbor-id="192.168.0.5" transit-area="10.10.10.2"> <neighbor-id>192.168.0.3</neighbor-id> <transit-area>10.10.10.1</transit-area> </virtual-link> </area> </ospf> </protocols> </configuration> </load-configuration> </rpc>
Junos XML 协议服务器
<rpc-reply xmlns:junos="URL"> <load-configuration-results> <load-success/> </load-configuration-results> </rpc-reply>