Anotações de metadados YANG para dispositivos Junos
RESUMO Os dispositivos Junos oferecem suporte a extensões YANG que definem anotações de metadados, que você pode usar para realizar operações específicas na configuração do Junos.
Os dispositivos Junos oferecem suporte a extensões YANG para anotar instâncias de nós de dados YANG com metadados. Você pode usar as seguintes extensões em dispositivos com suporte:
-
junos-configuration-metadata— As anotações da Juniper que você pode usar para realizar operações de configuração específicas. -
openconfig-metadata— Anotações definidas pelo grupo de trabalho OpenConfig.
As anotações de metadados YANG e sua codificação JSON e XML correspondentes são definidas em RFC 7952, definindo e usando metadados com YANG. O ietf-yang-metadata módulo define a extensão annotationYANG.
As anotações de metadados YANG não devem ser confundidas com as anotações de configuração do Junos, que são comentários que estão incluídos na configuração, por exemplo, usando o comando de annotate modo de configuração.
Visão geral do módulo junos-configuração-metadados
O módulo da Juniper Networks junos-configuration-metadata define anotações de metadados que permitem que você realize operações específicas na configuração do 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.";
}
}
Os dispositivos que oferecem suporte às junos-configuration-metadata anotações anunciam os seguintes recursos na troca de recursos do 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>
A Tabela 1 descreve as junos-configuration-metadata anotações. As anotações usam o http://yang.juniper.net/junos/jcmd namespace URI e o jcmd prefixo namespace.
| Descrição do | valor | daanotação |
|---|---|---|
active |
|
Desativar a declaração de configuração especificada. A declaração permanece na configuração, mas não afeta a operação do dispositivo. |
true |
Ative a declaração de configuração especificada. Use essa anotação para ativar uma declaração que foi desativada anteriormente. |
|
comment |
string |
Adicione um comentário com informações adicionais sobre a declaração de configuração especificada ou remova um comentário existente configurando o valor em uma string vazia (""). |
protect |
false |
Remova qualquer estado anteriormente aplicado |
true |
Evite modificações futuras na declaração especificada, até que o |
Usando junos-configuration-metadata anotações em dados de configuração
Você pode usar as junos-configuration-metadata anotações em uma sessão NETCONF compatível com YANG para realizar operações de metadados específicas na configuração. As operações com suporte incluem adicionar comentários à configuração, desativar ou ativar hierarquias e declarações de configuração e proteger hierarquias e declarações de configuração, conforme descrito nas seguintes seções:
- Adicione comentários na configuração
- Ativar ou desativar declarações de configuração
- Proteger ou desprotegir declarações de configuração
Você pode aplicar junos-configuration-metadata anotações em um contêiner (hierarquia de declarações), lista leaf, declaração leaf ou um item de lista (declaração com um identificador). Quando você aplica as anotações em declarações da lista leaf, você só pode aplicá-las no nível da lista leaf, não em entradas individuais da lista leaf.
Você pode usar as anotações YANG em dados de configuração JSON ou XML, conforme descrito na Tabela 2. Você pode usar a operação NETCONF <edit-config> para carregar dados de configuração XML, e pode usar a operação de protocolo <load-configuration> Junos XML para carregar dados de configuração JSON ou XML em um dispositivo.
| Exemplo | desintaxe | de codificação |
|---|---|---|
| JSON (objeto de metadados) |
"module-name:annotation" : "value" |
|
| XML (atributos XML) |
|
|
Adicione comentários na configuração
Você pode usar a comment anotação para adicionar comentários a uma declaração de configuração. As seções a seguir descrevem como adicionar um comentário ao carregar dados de configuração JSON ou XML.
JSON
Para adicionar um comentário ao carregar dados de configuração do JSON, inclua a junos-configuration-metadata:comment anotação no objeto de metadados para essa declaração e especifique o comentário como uma string. Para remover um comentário, inclua uma corda vazia ("").
O exemplo a seguir associa um comentário a uma hierarquia, outro comentário com uma entrada de lista que requer um identificador e um terceiro comentário com uma declaração 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 adicionar um comentário ao carregar dados de configuração do XML, inclua a jcmd:comment anotação como atributo XML na tag de abertura desse elemento de configuração e especifique o comentário como uma string. Para remover um comentário, inclua uma corda vazia ("").
O exemplo a seguir associa um comentário a uma hierarquia, outro comentário com uma entrada de lista que requer um identificador e um terceiro comentário com uma declaração 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>
Ativar ou desativar declarações de configuração
Você pode usar a active anotação para desativar uma declaração de configuração ou ativar uma declaração de configuração que foi desativada anteriormente. Para desativar uma declaração, definir active para false. Para ativar uma declaração, definir active para true.
As seções a seguir descrevem como desativar e ativar declarações de configuração em dados de configuração JSON e XML.
JSON
Para desativar ou reativar um objeto de configuração no JSON, inclua a "junos-configuration-metadata:active" : (false | true) anotação no objeto de metadados para essa declaração.
<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 exemplo, o RPC a seguir desativa a [edit protocols isis] hierarquia, ativa a declaração da apply-groups lista leaf e modifica a política de eventos especificada para desativar a ação de script de eventos e reativar a ação 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 desativar ou reativar um objeto de configuração, inclua a jcmd:active="false" ou jcmd:active="true" a anotação, respectivamente, como um atributo XML na tag de abertura desse elemento de configuração.
O RPC a seguir desativa a [edit protocols isis] hierarquia, ativa a declaração da apply-groups lista leaf e modifica a política de eventos especificada para desativar a ação de script de eventos e reativar a ação 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 ou desprotegir declarações de configuração
Você pode proteger as hierarquias e declarações de configuração do Junos selecionados para evitar alterações nessas declarações até que o atributo de proteção seja removido.
As seções a seguir descrevem como proteger ou desprotegir declarações de configuração em dados de configuração JSON e XML.
JSON
Para proteger ou desprotegir um objeto de configuração no JSON, inclua a "junos-configuration-metadata:protect" : (true | false) anotação no objeto de metadados para essa declaração.
<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 exemplo, o RPC a seguir protege o nível de [edit protocols isis] hierarquia, a declaração da apply-groups lista leaf e a declaração leaf host-name , e ele remove o atributo de proteção para a 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 ou desprotegir um objeto de configuração, inclua a jcmd:protect="true" ou jcmd:protect="false" a anotação, respectivamente, como um atributo XML na tag de abertura desse elemento de configuração.
O RPC a seguir protege o nível de [edit protocols isis] hierarquia, a declaração da apply-groups lista leaf e a declaração leaf host-name , e ele remove o atributo de proteção para a 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 Visão geral do módulo
O openconfig-metadata módulo YANG inclui anotações de metadados definidas pelo grupo de trabalho OpenConfig. O módulo define a protobuf-metadata anotação, que permite armazenar metadados sobre a configuração diretamente dentro da configuração para facilitar a referência.
Os dispositivos Junos oferecem suporte à openconfig-metadata:protobuf-metadata anotação com as seguintes restrições:
-
Você pode configurar apenas uma
protobuf-metadataanotação e apenas no nível raiz da hierarquia de configuração. -
Você só pode configurar e visualizar a anotação em dados de configuração do JSON.
-
A anotação é do tipo binário, mas você deve codificar o valor binário no esquema de codificação base64 antes de carregar a anotação no dispositivo.
Os dispositivos Junos suportam a configuração da openconfig-metadata:protobuf-metadata anotação por padrão. No entanto, para permitir que o dispositivo emita o recurso na troca de recursos netconf e emite a anotação nos dados de configuração, você deve configurar o dispositivo da seguinte forma:
-
Exija que o servidor NETCONF anuncie módulos YANG padrão, como módulos OpenConfig, na troca de recursos.
[edit] user@host# set system services netconf hello-message yang-module-capabilities advertise-standard-yang-modules
-
Configure o dispositivo para aplicar sessões NETCONF compatíveis com YANG.
[edit] user@host# set system services netconf yang-compliant
-
(Opcional) Desaprova o esquema OpenConfig, se você pretende visualizar as declarações do OpenConfig, incluindo a anotação, na CLI.
[edit] user@host# set system schema openconfig unhide
-
Confirmar a configuração.
[edit] user@host# commit
Depois de configurar o dispositivo para anunciar módulos YANG padrão na troca de recursos netconf, dispositivos que oferecem suporte openconfig-metadata a anotações anunciam o seguinte recurso na hello mensagem:
<capability>http://openconfig.net/yang/openconfig-metadata?module=openconfig-metadata&revision=2020-08-06</capability>
Você usa a operação gNMI set() para carregar a openconfig-metadata:protobuf-metadata anotação como parte de seus dados de configuração JSON.
{
"configuration" : {
"@" : {
"openconfig-metadata:protobuf-metadata": "dGhpcyBpcyB0ZXN0IGRhdGEK" // base64 encoded string per RFC 7951 encoding rules.
},
// configuration statements
}
}
Quando você solicita dados de configuração do JSON, conforme descrito em Visualizar anotações de metadados em dados de configuração, a saída exibe a configuração OpenConfig, incluindo a anotação, após os dados de configuração do Junos. Por exemplo:
<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>
Veja anotações de metadados em dados de configuração
O dispositivo Junos emite anotações de metadados YANG na configuração do Junos em sessões NETCONF compatíveis com YANG. Quando você configura sessões netconf para ser compatível com YANG e recupera a configuração usando o <get-config/> ou <get-configuration/> RPC, o dispositivo codifica as anotações conforme o RFC 7952, definindo e usando metadados com YANG.
Para ver a configuração com as anotações YANG codificadas de acordo com RFC 7952: