使用 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>
以下示例说明如何使用配置模式命令定义同一接口。