Junos 디바이스에 대한 YANG 메타데이터 주석
요약 Junos 디바이스는 메타데이터 주석을 정의하는 YANG 확장을 지원합니다.
Junos 디바이스는 메타데이터가 포함된 YANG 데이터 노드의 주석 인스턴스에 대한 YANG 확장을 지원합니다. 지원되는 디바이스에서 다음 확장을 사용할 수 있습니다.
-
junos-configuration-metadata
—특정 구성 작업을 수행하는 데 사용할 수 있는 주니퍼 주석. -
openconfig-metadata
—OpenConfig 작업 그룹에서 정의한 주석.
YANG 메타데이터 주석과 해당 JSON 및 XML 인코딩은 RFC 7952에서 YANG에서 메타데이터를 정의하고 사용하는 것으로 정의됩니다. 이 모듈은 ietf-yang-metadata
YANG 확장을 annotation
정의합니다.
YANG 메타데이터 주석은 예를 들어 구성 모드 명령을 사용하여 annotate
구성에 포함된 주석인 Junos 구성 주석과 혼동해서는 안 됩니다.
junos-configuration-metadata Module 개요
주니퍼 네트웍스 junos-configuration-metadata
모듈은 Junos 구성에서 특정 작업을 수행할 수 있도록 메타데이터 주석을 정의합니다.
user@host> show system schema module junos-configuration-metadata output-directory /var/tmp user@host> file show /var/tmp/junos-configuration-metadata.yang /* * junos-configuration-metadata.yang -- Defines annotations (RFC 7952) for * Junos configuration metadata operations. * * Copyright (c) 2021, Juniper Networks, Inc. * All rights reserved. */ module junos-configuration-metadata { namespace "http://yang.juniper.net/junos/jcmd"; prefix "jcmd"; import ietf-yang-metadata { prefix "md"; } organization "Juniper Networks, Inc."; contact "yang-support@juniper.net"; description "This Yang module defines annotations (RFC 7951) for Junos configuration metadata operations."; revision 2021-09-01 { description "Initial version."; } md:annotation active { type boolean; description "This annotation can be used in configuration XML/JSON to deactivate/activate a configuration element. Specifying the value 'false' deactivates the configuration element. Specifying the value 'true' activates the configuration element. When the configuration element is deactivated and committed, the element remains in the configuration, but the element does not affect the functioning of the device."; } md:annotation protect { type boolean; description "This annotation can be used in configuration XML/JSON to protect/unprotect the configuration hierarchies and statements. Specifying the value 'true' protects the configuration hierarchy/statement. Specifying the value 'false' unprotects the configuration hiearchy/statement. The protect operation prevents changes to selected (protected) configuration hierarchies and statements."; } md:annotation comment { type string; description "This annotation must be used in configuration XML/JSON to add comments to a configuration element. To remove the existing comment, empty string has to be supplied as a value for this annotation."; } }
주석을 junos-configuration-metadata
지원하는 장비는 NETCONF 기능 교환에서 다음과 같은 기능을 광고합니다.
<capability>http://yang.juniper.net/junos/jcmd?module=junos-configuration-metadata&revision=2021-09-01</capability> <capability>urn:ietf:params:xml:ns:yang:ietf-yang-metadata?module=ietf-yang-metadata&revision=2016-08-05</capability>
표 1 은 주석을 junos-configuration-metadata
개략적으로 설명합니다. 주석은 네임스페이 http://yang.juniper.net/junos/jcmd
스 URI와 네임스페이스 접두사( jcmd
namespace prefix)를 사용합니다.
주석 | 값 | 설명 |
---|---|---|
active |
|
지정된 구성 명령문을 비활성화합니다. 명령문은 구성에 유지되지만 디바이스 작동에 영향을 미치지 않습니다. |
true |
지정된 구성 명령문을 활성화합니다. 이 주석을 사용하여 이전에 비활성화된 문을 활성화합니다. |
|
comment |
string |
지정된 구성 문에 대한 추가 정보가 포함된 주석을 추가하거나 빈 문자열로 값을 설정하여 기존 주석을 제거합니다("). |
protect |
false |
지정된 구성 명령문에서 이전에 적용 |
true |
상태가 제거될 때까지 지정된 명령문에 대한 향후 수정을 |
구성 데이터 주석 사용 junos-configuration-metadata
YANG 호환 NETCONF 세션의 주석을 사용하여 junos-configuration-metadata
구성에서 특정 메타데이터 작업을 수행할 수 있습니다. 지원되는 작업에는 다음 섹션에서 설명한 대로 구성에 대한 설명 추가, 구성 계층 및 명령문 비활성화 또는 활성화, 구성 계층 및 명령문 보호 등이 포함됩니다.
컨테이너(명령문 계층), 리프 목록, 리프 명령문 또는 목록 항목(식별자가 있는 명령문)에 주석을 적용 junos-configuration-metadata
할 수 있습니다. 리프 목록 문에 주석을 적용할 경우 개별 리프 목록 항목이 아닌 리프-리스트 수준에서만 적용할 수 있습니다.
표 2에 설명된 대로 JSON 또는 XML 구성 데이터에서 YANG 주석을 사용할 수 있습니다. NETCONF <edit-config>
연산을 사용하여 XML 구성 데이터를 로드하고 Junos XML 프로토콜 <load-configuration>
작업을 사용하여 디바이스에서 JSON 또는 XML 구성 데이터를 로드할 수 있습니다.
인코딩 | 구문 | 예 |
---|---|---|
JSON(메타데이터 객체) |
"module-name:annotation" : "value" |
|
XML(XML 속성) |
|
|
구성에 주석 추가
주석을 comment
사용하여 구성 문에 주석을 추가할 수 있습니다. 다음 섹션에서는 JSON 또는 XML 구성 데이터를 로드할 때 주석을 추가하는 방법을 개략적으로 설명합니다.
Json
JSON 구성 데이터를 로드할 때 주석을 추가하려면 해당 명령문에 대한 메타데이터 개체에 주석을 포함하고 junos-configuration-metadata:comment
주석을 문자열로 지정합니다. 주석을 제거하려면 빈 문자열("")을 포함합니다.
다음 예에서는 하나의 의견과 계층, 식별자가 필요한 목록 항목이 포함된 다른 설명, 기존 리프 명령문이 있는 세 번째 주석과 관련됩니다.
<rpc> <load-configuration format="json"> <configuration-json> { "configuration" : { "protocols" : { "ospf" : { "@" : { "junos-configuration-metadata:comment" : "/* OSPF comment */" }, "area" : [ { "name" : "0.0.0.0", "interface" : [ { "@" : { "junos-configuration-metadata:comment" : "/* From jnpr1 \n to jnpr2 */" }, "name" : "et-0/0/1.0", "@hello-interval" : { "junos-configuration-metadata:comment" : "# set by admin" } } ] } ] } } } } </configuration-json> </load-configuration> </rpc> ]]>]]>
Xml
XML 구성 데이터를 로드할 때 주석을 추가하려면 해당 구성 요소의 오프닝 태그에 XML 속성으로 주석을 포함하고 jcmd:comment
주석을 문자열로 지정합니다. 주석을 제거하려면 빈 문자열("")을 포함합니다.
다음 예에서는 하나의 의견과 계층, 식별자가 필요한 목록 항목이 있는 다른 설명, 리프 명령문이 있는 세 번째 주석과 관련됩니다.
<rpc> <edit-config> <target> <candidate/> </target> <config> <configuration> <protocols> <ospf xmlns:jcmd="http://yang.juniper.net/junos/jcmd" jcmd:comment="/* OSPF comment */"> <area> <name>0.0.0.0</name> <interface xmlns:jcmd="http://yang.juniper.net/junos/jcmd" jcmd:comment="/* From jnpr1 \n to jnpr2 */"> <name>et-0/0/1.0</name> <hello-interval xmlns:jcmd="http://yang.juniper.net/junos/jcmd" jcmd:comment="# set by admin">5</hello-interval> </interface> </area> </ospf> </protocols> </configuration> </config> </edit-config> </rpc>
구성 명령문 활성화 또는 비활성화
주석을 active
사용하여 구성 명령문을 비활성화하거나 이전에 비활성화된 구성 문을 활성화할 수 있습니다. 명령문을 비활성화하려면 으로 설정합니다 active
false
. 명령문을 활성화하려면 으로 true
설정합니다active
.
다음 섹션에서는 JSON 및 XML 구성 데이터에서 구성 명령문을 비활성화하고 활성화하는 방법을 설명합니다.
Json
JSON에서 구성 객체를 비활성화하거나 활성화하려면 해당 명령문에 대한 메타데이터 객체에 주석을 포함합니다 "junos-configuration-metadata:active" : (false | true)
.
<configuration-json> { "configuration" : { /* JSON objects for parent levels */ "@leaf-list-statement-name" : { "junos-configuration-metadata:comment" : "/* activate or deactivate a leaf-list */", "junos-configuration-metadata:active" : (false | true) }, "level-or-container" : { "@" : { "junos-configuration-metadata:comment" : "/* activate or deactivate a hierarchy */", "junos-configuration-metadata:active" : (false | true) }, "object" : [ { "@" : { "junos-configuration-metadata:comment" : "/* activate or deactivate an object with an identifier */", "junos-configuration-metadata:active" : (false | true) }, "name" : "identifier", "@statement-name" : { "junos-configuration-metadata:comment" : "/* activate or deactivate a statement */", "junos-configuration-metadata:active" : (false | true) } } ] } /* closing braces for parent levels */ } } </configuration-json>
예를 들어, 다음 RPC는 계층을 비활성화 [edit protocols isis]
하고, leaf-list 명령문을 활성화 apply-groups
하며, 지정된 이벤트 정책을 수정하여 이벤트 스크립트 작업을 비활성화하고 올리기 트랩 작업을 다시 활성화합니다.
<rpc> <load-configuration format="json"> <configuration-json> { "configuration" : { "@apply-groups" : { "junos-configuration-metadata:active" : true }, "protocols" : { "isis" : { "@" : { "junos-configuration-metadata:active" : false } } }, "event-options" : { "policy" : [ { "name" : "raise-trap-on-ospf-nbrdown", "then" : { "event-script" : [ { "@" : { "junos-configuration-metadata:active" : false }, "name" : "ospf.xsl" } ], "@raise-trap" : { "junos-configuration-metadata:active" : true } } } ] } } } </configuration-json> </load-configuration> </rpc>
Xml
구성 객체를 비활성화하거나 다시 활성화하려면 해당 구성 요소의 jcmd:active="false"
오프닝 태그에 XML 속성으로 각각 또는 jcmd:active="true"
주석을 포함합니다.
다음 RPC는 계층을 비활성화 [edit protocols isis]
하고, leaf-list 명령문을 활성화 apply-groups
하고, 지정된 이벤트 정책을 수정하여 이벤트 스크립트 작업을 비활성화하고 올리기 트랩 작업을 다시 활성화합니다.
<rpc> <edit-config> <target> <candidate/> </target> <config> <configuration> <apply-groups xmlns:jcmd="http://yang.juniper.net/junos/jcmd" jcmd:active="true"/> <protocols> <isis xmlns:jcmd="http://yang.juniper.net/junos/jcmd" jcmd:active="false"/> </protocols> <event-options> <policy> <name>raise-trap-on-ospf-nbrdown</name> <then> <event-script xmlns:jcmd="http://yang.juniper.net/junos/jcmd" jcmd:active="false"> <name>ospf.xsl</name> </event-script> <raise-trap xmlns:jcmd="http://yang.juniper.net/junos/jcmd" jcmd:active="true"/> </then> </policy> </event-options> </configuration> </config> </edit-config> </rpc>
구성 명령문 보호 또는 보호 해제
선택한 Junos 구성 계층 및 명령문을 보호하여 보호 속성이 제거될 때까지 해당 명령문의 변경을 방지할 수 있습니다.
다음 섹션에서는 JSON 및 XML 구성 데이터에서 구성 명령문을 보호하거나 보호하는 방법에 대해 간략하게 설명합니다.
Json
JSON에서 구성 객체를 보호하거나 보호 해제하려면 해당 명령문에 대한 메타데이터 개체에 주석을 포함합니다 "junos-configuration-metadata:protect" : (true | false)
.
<configuration-json> { "configuration" : { /* JSON objects for parent hierarchies */ "@leaf-list-statement-name" : { "junos-configuration-metadata:comment" : "/* protect a leaf-list */", "junos-configuration-metadata:protect" : (false | true) }, "hierarchy" : { "@" : { "junos-configuration-metadata:comment" : "/* protect a hierarchy */", "junos-configuration-metadata:protect" : (false | true) }, "object" : [ { "@" : { "junos-configuration-metadata:comment" : "/* protect an object with an identifier */", "junos-configuration-metadata:protect" : (false | true) }, "name" : "identifier", "@statement-name" : { "junos-configuration-metadata:comment" : "/* protect a statement */", "junos-configuration-metadata:protect" : (false | true) } } ] } /* closing braces for parent hierarchies */ } } </configuration-json>
예를 들어, 다음 RPC는 계층 수준, apply-groups
리프 목록 명령문 및 host-name
리프 명령문을 보호 [edit protocols isis]
하며 지정된 이벤트 정책에 대한 보호 속성을 제거합니다.
<rpc> <load-configuration format="json"> <configuration-json> { "configuration" : { "@apply-groups" : { "junos-configuration-metadata:protect" : true }, "system" : { "@host-name" : { "junos-configuration-metadata:protect" : true } }, "event-options" : { "policy" : [ { "@" : { "junos-configuration-metadata:protect" : false }, "name" : "raise-trap-on-ospf-nbrdown" } ] }, "protocols" : { "isis" : { "@" : { "junos-configuration-metadata:protect" : true } } } } } </configuration-json> </load-configuration> </rpc>
Xml
구성 객체를 보호하거나 보호 해제하려면 해당 구성 요소의 jcmd:protect="true"
오프닝 태그에 XML 속성으로 각각 또는 jcmd:protect="false"
주석을 포함합니다.
다음 RPC는 계층 수준, apply-groups
리프 목록 명령문 및 host-name
리프 명령문을 보호 [edit protocols isis]
하며 지정된 이벤트 정책에 대한 보호 속성을 제거합니다.
<rpc> <edit-config> <target> <candidate/> </target> <config> <configuration> <apply-groups xmlns:jcmd="http://yang.juniper.net/junos/jcmd" jcmd:protect="true"/> <system> <host-name xmlns:jcmd="http://yang.juniper.net/junos/jcmd" jcmd:protect="true"/> </system> <protocols> <isis xmlns:jcmd="http://yang.juniper.net/junos/jcmd" jcmd:protect="true"/> </protocols> <event-options> <policy xmlns:jcmd="http://yang.juniper.net/junos/jcmd" jcmd:protect="false"> <name>raise-trap-on-ospf-nbrdown</name> </policy> </event-options> </configuration> </config> </edit-config> </rpc>
openconfig-metadata
모듈 개요
YANG 모듈에는 openconfig-metadata
OpenConfig 작업 그룹이 정의한 메타데이터 주석이 포함되어 있습니다. 이 모듈은 주석을 protobuf-metadata
정의하여 손쉬운 참조를 위해 구성 내에서 직접 구성에 대한 메타데이터를 저장할 수 있도록 지원합니다.
Junos 장치는 openconfig-metadata:protobuf-metadata
다음과 같은 제약 조건을 가진 주석을 지원합니다.
-
단일
protobuf-metadata
주석만 구성하고 구성 계층의 루트 수준에서만 구성할 수 있습니다. -
JSON 구성 데이터의 주석만 구성하고 볼 수 있습니다.
-
주석은 유형 바이너리이지만 디바이스에 주석을 로드하기 전에 base64 인코딩 체계의 바이너리 값을 인코딩해야 합니다.
Junos 장치는 기본적으로 주석 구성 openconfig-metadata:protobuf-metadata
을 지원합니다. 그러나 장비가 NETCONF 기능 교환에서 기능을 방출하고 구성 데이터에 주석을 내미도록 하려면 다음과 같이 디바이스를 구성해야 합니다.
-
NETCONF 서버가 기능 교환에서 OpenConfig 모듈과 같은 표준 YANG 모듈을 광고하도록 요구합니다.
[edit] user@host# set system services netconf hello-message yang-module-capabilities advertise-standard-yang-modules
-
YANG 호환 NETCONF 세션을 적용하도록 디바이스를 구성합니다.
[edit] user@host# set system services netconf yang-compliant
-
(선택사항) CLI에서 주석을 포함한 OpenConfig 명령문을 보려는 경우 OpenConfig 스키마를 해제합니다.
[edit] user@host# set system schema openconfig unhide
-
구성을 커밋합니다.
[edit] user@host# commit
NETCONF 기능 교환에서 표준 YANG 모듈을 광고하도록 장비를 구성한 후 주석을 지원하는 openconfig-metadata
디바이스는 메시지에 다음 기능을 hello
광고합니다.
<capability>http://openconfig.net/yang/openconfig-metadata?module=openconfig-metadata&revision=2020-08-06</capability>
gNMI set()
연산을 사용하여 JSON 구성 데이터의 일부로 주석을 로드 openconfig-metadata:protobuf-metadata
합니다.
{ "configuration" : { "@" : { "openconfig-metadata:protobuf-metadata": "dGhpcyBpcyB0ZXN0IGRhdGEK" // base64 encoded string per RFC 7951 encoding rules. }, // configuration statements } }
구성 데이터의 메타데이터 주석 보기에 설명된 대로 JSON 구성 데이터를 요청할 때 출력은 Junos 구성 데이터 이후 주석을 포함한 OpenConfig 구성을 표시합니다. 예를 들어:
<rpc><get-configuration format="json"/></rpc> <rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:junos="http://xml.juniper.net/junos/22.3R1/junos"> { "configuration" : { "@" : { "xmlns" : "http://xml.juniper.net/xnm/1.1/xnm", "junos:changed-seconds" : "1658526284", "junos:changed-localtime" : "2022-07-22 14:44:44 PDT" }, "version" : "22.3R1-EVO", ... }, "@" : { "openconfig-metadata:protobuf-metadata" : "dGhpcyBpcyB0ZXN0IGRhdGEK" }, "openconfig-interfaces:interfaces" : { "interface" : [ { "name" : "et-1/0/1", "config" : { "type" : "IF_ETHERNET", "description" : "CE1" } } ] } } </rpc-reply>
구성 데이터에서 메타데이터 주석 보기
Junos 디바이스는 YANG 호환 NETCONF 세션 내에서 Junos 구성에서 YANG 메타데이터 주석을 내보냄 NETCONF 세션을 YANG 호환으로 구성하고 또는 <get-configuration/>
RPC를 사용하여 <get-config/>
구성을 검색하면 디바이스는 RFC 7952에 따라 주석을 인코딩하여 YANG로 메타데이터를 정의하고 사용합니다.
RFC 7952에 따라 인코딩된 YANG 주석을 사용하여 구성을 보려면: