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 annotationYANG.
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-metadataanotació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: