使用 Junos XML 协议合并配置数据中的元素
默认情况下,Junos XML 协议服务器会根据以下规则将加载的配置数据 合并 到候选配置中。(规则也适用于配置的私有副本或临时配置数据库的开放实例,但为了简化,以下讨论仅指候选配置。)
候选但未在加载配置中存在的配置元素(层次结构级别或配置对象)保持不变。
报考者中包含在加载配置中但不存在于候选配置中的配置元素。
如果两种配置中都存在配置元素,语义如下:
如果候选配置元素(由儿童标记元素表示)的儿童语句存在,但未在加载配置中,则保持不变。
如果已加载配置中存在儿童语句,但不在报考者中,则会将其添加到报考者中。
如果两种配置中都存在儿童语句,则加载配置中的值将替换候选配置中的值。
合并模式是新配置元素的默认模式,因此应用程序只需在标记元素中<rpc>
发出<load-configuration>
标记元素:
<rpc> <!-- For a file --> <load-configuration url="file" [format="format"]/> <!-- For a data stream --> <load-configuration [format="format"]> <!-- configuration data --> </load-configuration> </rpc>
有关和属性的url
详细信息,请参阅 Junos XML 协议会话中上传和格式化配置数据。format
要明确指定使用 Junos XML 元素、格式化 ASCII 文本或 JSON 格式的配置数据的合并模式,应用程序可在标记中<load-configuration>
包含action="merge"
属性,如本节末尾示例中所示。
当使用 Junos XML 标记元素表示要合并到配置的元素时,应用程序包含 使用 Junos XML 协议创建、修改或删除配置元素中介绍的基本标记元素。该元素的容器标记中不包含任何属性。如果添加或更改儿童元素的值,应用程序将包含该元素的标记元素。如果孩子保持不变,则不必将其包含在加载配置中。在以下部分中,标识符标记元素称为 <name>
:
<configuration> <!-- opening tag for each parent of the element --> <container-tag> <name>identifier</name> <!-- if the element has an identifier --> <!-- tag elements for other children, if any --> </container-tag> <!-- closing tag for each parent of the element --> </configuration>
使用格式化 ASCII 文本时,应用程序包含 使用 Junos XML 协议创建、修改或删除配置元素中所述的语句路径。它不包括前面的操作员,但包含该元素的标识符(如果有)。如果添加或更改儿童元素的值,应用程序将包含该元素的标记元素。如果孩子保持不变,则不必将其包含在加载配置中。
<configuration-text> /* statements for parent levels of the element */ element identifier { /* child statements if any */ } /* closing braces for parent levels of the element */ </configuration-text>
从 Junos OS 版本 16.1 开始,您可以在设备上使用 JavaScript 对象符号 (JSON) 加载格式的配置数据。使用 JSON 表示要合并到配置中的元素时,应用程序包含 使用 Junos XML 协议创建、修改或删除配置元素中介绍的基本 JSON 数据。它不需要在 JSON 配置数据中包含任何特定操作属性,即可合并新的或更改的元素。如果添加或更改儿童元素的值,应用程序将包含 JSON 数据或儿童对象。如果孩子保持不变,则不必将其包含在加载配置中。在以下示例中,指定元素标识符的 JSON 成员具有字段名称“名称”:
<configuration-json> { "configuration" : { /* JSON objects for parent levels of the element */ "container-tag" : { "object" : [ { "name" : "identifier", "statement-name" : "statement-value", # if any /* additional data and child objects */ # if any } ], /* data and child objects */ # if any } /* closing braces for parent levels of the element */ } } </configuration-json>
当使用配置模式命令合并新元素时,应用程序在标记中<load-configuration>
包含action="set"
和format="text"
属性,如本节末尾示例中所示。应用程序包括set
命令、到元素的语句路径以及元素的标识符(如果有的话)。如果添加或更改儿童元素的价值,应用程序将包含命令中的儿童元素或语句。如果儿童保持不变,则不需要包括它。
<configuration-set> set statement-path-to-element element identifier child-statements </configuration-set>
以下示例说明如何在配置的层次结构级别上合并在称为 so-3/0/0 [edit interfaces]
的新接口中。此信息作为 Junos XML 标记元素(默认)提供。
以下示例说明如何使用格式化的 ASCII 文本定义相同的新 接口。
以下示例说明如何使用 JSON 配置数据定义同一接口。
<rpc> <load-configuration format="json"> <configuration-json> { "configuration" : { "interfaces" : { "interface" : [ { "name" : "so-3/0/0", "unit" : [ { "name" : 0, "family" : { "inet" : { "address" : [ { "name" : "10.0.0.1/8" } ] } } } ] } ] } } } </configuration-json> </load-configuration> </rpc> <rpc-reply xmlns:junos="http://xml.juniper.net/junos/16.2R2/junos"> <load-configuration-results> <load-success/> </load-configuration-results> </rpc-reply>
以下示例说明如何使用配置模式命令定义同一接口。