Anotaciones de metadatos YANG para dispositivos Junos
RESUMEN Los dispositivos Junos admiten extensiones YANG que definen anotaciones de metadatos.
Los dispositivos Junos admiten extensiones yang para anotar instancias de nodos de datos YANG con metadatos. Puede usar las siguientes extensiones en dispositivos compatibles:
-
junos-configuration-metadata
— Anotaciones de Juniper que puede usar para realizar operaciones de configuración específicas. -
openconfig-metadata
—Anotaciones definidas por el grupo de trabajo OpenConfig.
Las anotaciones de metadatos YANG y su codificación JSON y XML correspondientes se definen en RFC 7952, Definiendo y usando metadatos con YANG. El ietf-yang-metadata
módulo define la extensión annotation
YANG.
Las anotaciones de metadatos YANG no se deben confundir con las anotaciones de configuración de Junos, que son comentarios que se incluyen en la configuración, por ejemplo, mediante el comando del annotate
modo de configuración.
Descripción general del módulo de junos-configuration-metadata
El módulo Juniper Networks junos-configuration-metadata
define anotaciones de metadatos que le permiten realizar operaciones específicas en la configuración de 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."; } }
Los dispositivos que admiten las junos-configuration-metadata
anotaciones anuncian las siguientes capacidades en el intercambio de capacidades de 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>
En la tabla 1 se describen las junos-configuration-metadata
anotaciones. Las anotaciones usan el URI del http://yang.juniper.net/junos/jcmd
espacio de nombres y el prefijo del jcmd
espacio de nombres.
Descripción | del valor | de anotación |
---|---|---|
active |
|
Desactive la instrucción de configuración especificada. La instrucción permanece en la configuración, pero no afecta al funcionamiento del dispositivo. |
true |
Active la instrucción de configuración especificada. Utilice esta anotación para activar una instrucción que se desactivó anteriormente. |
|
comment |
string |
Agregue un comentario con información adicional sobre la instrucción de configuración especificada o elimine un comentario existente estableciendo el valor en una cadena vacía (""). |
protect |
false |
Quite cualquier estado aplicado |
true |
Evite futuras modificaciones en la instrucción especificada hasta que |
Uso de junos-configuration-metadata
anotaciones en datos de configuración
Puede usar las junos-configuration-metadata
anotaciones en una sesión NETCONF compatible con YANG para realizar operaciones de metadatos específicas en la configuración. Las operaciones compatibles incluyen agregar comentarios a la configuración, desactivar o activar jerarquías y instrucciones de configuración, y proteger las jerarquías y instrucciones de configuración, como se describe en las siguientes secciones:
- Agregar comentarios en la configuración
- Activar o desactivar instrucciones de configuración
- Proteger o desproteger las instrucciones de configuración
Puede aplicar junos-configuration-metadata
anotaciones en un contenedor (jerarquía de instrucción), una lista leaf, una instrucción leaf o un elemento de lista (instrucción con un identificador). Cuando aplica las anotaciones en instrucciones de lista de hojas, solo puede aplicarlas en el nivel de la lista de hojas, no en entradas de lista leaf individuales.
Puede usar las anotaciones yang en datos de configuración JSON o XML, como se describe en la tabla 2. Puede usar la operación NETCONF <edit-config>
para cargar datos de configuración XML y la operación de protocolo <load-configuration>
XML de Junos para cargar datos de configuración JSON o XML en un dispositivo.
Ejemplo | de sintaxis de codificación | |
---|---|---|
JSON (objeto de metadatos) |
"module-name:annotation" : "value" |
|
XML (atributos XML) |
|
|
Agregar comentarios en la configuración
Puede usar la comment
anotación para agregar comentarios a una instrucción de configuración. En las siguientes secciones, se describe cómo agregar un comentario al cargar datos de configuración JSON o XML.
JSON
Para agregar un comentario al cargar datos de configuración JSON, incluya la junos-configuration-metadata:comment
anotación en el objeto de metadatos de esa instrucción y especifique el comentario como una cadena. Para eliminar un comentario, incluya una cadena vacía ("").
En el ejemplo siguiente se asocia un comentario con una jerarquía, otro comentario con una entrada de lista que requiere un identificador y un tercer comentario con una instrucción leaf existente.
<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
Para agregar un comentario al cargar datos de configuración XML, incluya la jcmd:comment
anotación como un atributo XML en la etiqueta de apertura de ese elemento de configuración y especifique el comentario como una cadena. Para eliminar un comentario, incluya una cadena vacía ("").
En el ejemplo siguiente se asocia un comentario con una jerarquía, otro comentario con una entrada de lista que requiere un identificador y un tercer comentario con una instrucción leaf.
<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>
Activar o desactivar instrucciones de configuración
Puede usar la active
anotación para desactivar una instrucción de configuración o para activar una instrucción de configuración que se desactivó anteriormente. Para desactivar una instrucción, establezca en active
false
. Para activar una instrucción, establezca en active
true
.
En las siguientes secciones, se describe cómo desactivar y activar instrucciones de configuración en datos de configuración JSON y XML.
JSON
Para desactivar o reactivar un objeto de configuración en JSON, incluya la "junos-configuration-metadata:active" : (false | true)
anotación en el objeto de metadatos de esa instrucción.
<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>
Por ejemplo, la siguiente RPC desactiva la [edit protocols isis]
jerarquía, activa la instrucción leaf-list y modifica la apply-groups
política de eventos especificada para desactivar la acción event-script y reactivar la acción raise-trap.
<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
Para desactivar o reactivar un objeto de configuración, incluya el jcmd:active="false"
o jcmd:active="true"
anotación, respectivamente, como un atributo XML en la etiqueta de apertura de ese elemento de configuración.
La siguiente RPC desactiva la [edit protocols isis]
jerarquía, activa la apply-groups
instrucción leaf-list y modifica la política de eventos especificada para desactivar la acción de secuencia de comandos de eventos y reactivar la acción raise-trap.
<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>
Proteger o desproteger las instrucciones de configuración
Puede proteger las jerarquías y instrucciones de configuración seleccionadas de Junos para evitar cambios en esas instrucciones hasta que se elimine el atributo protect.
En las siguientes secciones, se describe cómo proteger o desproteger instrucciones de configuración en datos de configuración JSON y XML.
JSON
Para proteger o desproteger un objeto de configuración en JSON, incluya la "junos-configuration-metadata:protect" : (true | false)
anotación en el objeto de metadatos de esa instrucción.
<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>
Por ejemplo, la siguiente RPC protege el [edit protocols isis]
nivel de jerarquía, la apply-groups
instrucción leaf-list y la host-name
instrucción leaf, y quita el atributo protect para la política de eventos especificada.
<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
Para proteger o desproteger un objeto de configuración, incluya el jcmd:protect="true"
o jcmd:protect="false"
anotación, respectivamente, como un atributo XML en la etiqueta de apertura de ese elemento de configuración.
La siguiente RPC protege el [edit protocols isis]
nivel de jerarquía, la apply-groups
instrucción leaf-list y la host-name
instrucción leaf, y quita el atributo protect de la política de eventos especificada.
<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
Descripción general del módulo
El openconfig-metadata
módulo YANG incluye anotaciones de metadatos definidas por el grupo de trabajo de OpenConfig. El módulo define la protobuf-metadata
anotación, lo que le permite almacenar metadatos sobre la configuración directamente dentro de la configuración para facilitar la consulta.
Los dispositivos Junos admiten la openconfig-metadata:protobuf-metadata
anotación con las siguientes restricciones:
-
Puede configurar solo una
protobuf-metadata
anotación y solo en el nivel raíz de la jerarquía de configuración. -
Solo puede configurar y ver la anotación en los datos de configuración JSON.
-
La anotación es de tipo binario, pero debe codificar el valor binario en el esquema de codificación base64 antes de cargar la anotación en el dispositivo.
Los dispositivos Junos admiten la configuración de la openconfig-metadata:protobuf-metadata
anotación de forma predeterminada. Sin embargo, para permitir que el dispositivo emita la capacidad en el intercambio de capacidades NETCONF y emita la anotación en los datos de configuración, debe configurar el dispositivo de la siguiente manera:
-
Requerir que el servidor NETCONF anuncie módulos YANG estándar, como los módulos OpenConfig, en el intercambio de capacidades.
[edit] user@host# set system services netconf hello-message yang-module-capabilities advertise-standard-yang-modules
-
Configure el dispositivo para que se apliquen las sesiones NETCONF que cumplen con YANG.
[edit] user@host# set system services netconf yang-compliant
-
(Opcional) Desenfunde el esquema OpenConfig si tiene la intención de ver instrucciones OpenConfig, incluida la anotación, en la CLI.
[edit] user@host# set system schema openconfig unhide
-
Confirme la configuración.
[edit] user@host# commit
Después de configurar el dispositivo para anunciar módulos yang estándar en el intercambio de capacidades netCONF, los dispositivos que admiten openconfig-metadata
anotaciones anuncian la siguiente capacidad en el hello
mensaje:
<capability>http://openconfig.net/yang/openconfig-metadata?module=openconfig-metadata&revision=2020-08-06</capability>
Utilice la operación gNMI set()
para cargar la openconfig-metadata:protobuf-metadata
anotación como parte de los datos de configuración JSON.
{ "configuration" : { "@" : { "openconfig-metadata:protobuf-metadata": "dGhpcyBpcyB0ZXN0IGRhdGEK" // base64 encoded string per RFC 7951 encoding rules. }, // configuration statements } }
Cuando solicita datos de configuración JSON, como se describe en Ver anotaciones de metadatos en datos de configuración, el resultado muestra la configuración de OpenConfig, incluida la anotación, después de los datos de configuración de Junos. Por ejemplo:
<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>
Ver anotaciones de metadatos en datos de configuración
El dispositivo Junos emite anotaciones de metadatos YANG en la configuración de Junos dentro de sesiones NETCONF compatibles con YANG. Cuando configura sesiones NETCONF para que cumplan con YANG y recupera la configuración mediante <get-config/>
o <get-configuration/>
RPC, el dispositivo codifica las anotaciones según RFC 7952, Definición y uso de metadatos con YANG.
Para ver la configuración con las anotaciones yang codificadas según RFC 7952: