Cree RPCs personalizadas en YANG para dispositivos que ejecutan Junos OS
Juniper Networks proporciona módulos YANG que definen las llamadas de procedimiento remoto (RPC) para los comandos operativos de Junos OS. A partir de Junos OS versión 16.1R3, también puede crear modelos de datos YANG que definen RPCs personalizadas para dispositivos compatibles que ejecutan Junos OS. La creación de RPCs personalizadas le permite definir con precisión los parámetros y las operaciones de entrada y los campos de salida y el formato para sus tareas operativas específicas en esos dispositivos. Cuando se extiende la jerarquía de comandos operativos con una RPC YANG personalizada, también debe proporcionar una secuencia de comandos de acción que sirva como controlador para la RPC. La definición RPC hace referencia a la secuencia de comandos de acción, que se invoca cuando se ejecuta la RPC.
En este tema se describen los pasos generales para crear un módulo YANG que define una RPC personalizada para dispositivos que ejecutan Junos OS. Para obtener información acerca de cómo crear una secuencia de comandos de acción RPC y personalizar la salida de cli de RPC, consulte Crear scripts de acción para RPCs YANG en dispositivos que ejecutan Junos OS y Descripción de extensiones YANG de Junos OS para formatear la salida RPC.
Esta sección presenta una plantilla genérica para un módulo YANG que define una RPC para dispositivos que ejecutan Junos OS. La plantilla va seguida de una explicación detallada de las diferentes secciones e instrucciones de la plantilla.
module module-name {
namespace "namespace";
prefix prefix;
import junos-extension {
prefix junos;
}
import junos-extension-odl {
prefix junos-odl;
}
organization
"organization";
description
"module-description";
rpc rpc-name {
description "RPC-description";
junos:command "cli-command" {
junos:action-execute {
junos:script "action-script-filename";
}
}
input {
leaf input-param1 {
type type;
description description;
}
leaf input-param2 {
type type;
description description;
}
// additional leaf definitions
}
output {
container output-container-name {
container container-name {
leaf output-param1 {
type type;
description description;
// optional formatting statements
}
// additional leaf definitions
junos-odl:format container-name-format {
// CLI formatting for the parent container
}
}
// Additional containers
}
}
}
}
Las RPCs se definen dentro de los módulos. El nombre del módulo debe ser descriptivo e indicar el propósito general de las RPCs que se incluyen en ese módulo, y el espacio de nombres del módulo debe ser único.
module module-name {
namespace "namespace";
prefix prefix;
}
Según RFC 6020, YANG - Un lenguaje de modelado de datos para el protocolo de configuración de red (NETCONF), el nombre del módulo y el nombre base del archivo en el que reside el módulo deben ser idénticos. Por ejemplo, si el nombre del módulo es get-if-info, el nombre de archivo del módulo debe ser get-if-info.yang.
El módulo debe importar el módulo de extensiones DDL de Junos OS y definir un prefijo. El módulo de extensiones incluye extensiones YANG que se requieren en la definición de RPCs ejecutadas en dispositivos que ejecutan Junos OS.
import junos-extension {
prefix junos;
}
A partir de la versión 17.4R1 de Junos OS, los módulos YANG de Junos OS utilizan una nueva convención de nomenclatura para el nombre, el nombre del nombre del módulo y el espacio de nombres del módulo.
Si alguna de las RPCs del módulo representa la salida ASCII con formato, el módulo debe importar el módulo de extensiones ODL de Junos OS y definir un prefijo. El módulo de extensiones ODL define las extensiones yang que utiliza para especificar con precisión cómo representar la salida cuando ejecuta el comando operativo para esa RPC en la CLI o cuando solicita la salida RPC en formato de texto.
import junos-extension-odl {
prefix junos-odl;
}
Incluya la organización responsable del módulo, así como una descripción del módulo.
organization
"organization";
description
"module-description";
Dentro del módulo, puede definir una o más RPCs, cada una con un nombre único. El nombre RPC se utiliza para ejecutar la RPC de forma remota y, por lo tanto, debe indicar claramente el propósito de la RPC. El propósito del RPC puede aclararse aún más en la description declaración. Si también define un comando de CLI para la RPC, la CLI mostrará la descripción de RPC en la ayuda contextual para esa lista de comandos.
rpc rpc-name {
description "RPC-description";
}
Dentro de la definición RPC, defina las commandinstrucciones , action-executey script las instrucciones, que son instrucciones de extensión DDL de Junos OS. La command instrucción define el comando operativo que usa para ejecutar la RPC en la CLI de Junos OS. Para ejecutar la RPC de forma remota, use el nombre RPC para la etiqueta de solicitud.
La action-execute instrucción y script la subvaloración deben definirse para cada RPC. La script subvaloración define el nombre de la secuencia de comandos de acción que se invoca cuando se ejecuta la RPC. Debe definir una sola secuencia de comandos de acción para cada RPC.
A partir de la versión 17.3 de Junos OS, la action-execute instrucción es una subvaloración a command. En versiones anteriores, las action-execute instrucciones y command se colocan en el mismo nivel y la command instrucción es opcional.
En la versión 17.3 y posteriores de Junos OS, defina la
commandinstrucción y sus substatements.junos:command "cli-command" { junos:action-execute { junos:script "action-script-filename"; } }En junos OS versión 17.2 y versiones anteriores, defina las
action-executeinstrucciones yscript, opcionalmente, defina lacommandinstrucción.junos:command "cli-command"; junos:action-execute { junos:script "action-script-filename"; }
Debe agregar el módulo YANG y la secuencia de comandos de acción al dispositivo como parte de un paquete yang nuevo o existente mediante la emisión del request system yang add comando o request system yang update . Por lo tanto, solo debe proporcionar el nombre y no la ruta de la secuencia de comandos de acción para la junos:script instrucción.
Si la secuencia de comandos de acción está escrita en Python, debe habilitar el dispositivo para que ejecute scripts de Python sin signo mediante la configuración de la language python instrucción o language python3 bajo el [edit system scripts] nivel de jerarquía en cada dispositivo en el que se ejecutará la secuencia de comandos.
Los parámetros de entrada de la operación RPC se definen dentro de la instrucción opcional input . Cuando se ejecuta la RPC, Junos OS invoca la secuencia de comandos de acción de la RPC y pasa todos los parámetros de entrada a la secuencia de comandos.
input {
leaf input-param1 {
type type;
description description;
}
leaf input-param2 {
type type;
description description;
}
// additional leaf definitions
}
A partir de Junos OS versión 19.2R1, las RPCs YANG personalizadas admiten parámetros de entrada de tipo empty cuando se ejecuta el comando de la RPC en la CLI de Junos OS. En versiones anteriores, solo se admiten parámetros de tipo empty de entrada cuando se ejecuta el RPC en una sesión de protocolo XML NETCONF o Junos.
La instrucción opcional output encierra los parámetros de salida a la operación RPC. La output instrucción puede incluir un contenedor raíz de nivel superior. Es una buena práctica correlacionar el nombre del contenedor raíz y el nombre RPC. Por ejemplo, si el nombre RPC es get-xyz-information, el nombre del contenedor puede ser xyz-information. Las substatements de la output instrucción definen nodos en el nodo de output la RPC. En el resultado XML, esto se traduciría en elementos XML bajo el <rpc-reply> elemento.
output {
container output-container-name {
...
}
}
Dentro del contenedor raíz, puede incluir leaf e container instrucciones. Las instrucciones Leaf describen los datos incluidos en la salida RPC para ese contenedor.
output {
container output-container-name {
container container-name {
leaf output-param1 {
type type;
description description;
}
// additional leaf definitions
}
}
}
De forma predeterminada, el formato para la salida RPC es XML. También puede definir la salida ASCII con formato que se muestra cuando ejecuta el comando operativo para esa RPC en la CLI o cuando solicita la salida RPC en formato de texto.
A partir de Junos OS versión 17.3, el formato de CLI para una RPC personalizada se define dentro de la junos-odl:format instrucción de extensión. En versiones anteriores, el formato de cli se define mediante un contenedor que incluye la junos-odl:cli-format instrucción.
A partir de Junos OS versión 17.3, defina el formato de la CLI definiendo una
junos-odl:formatinstrucción, que es una instrucción de extensión ODL de Junos OS.output { container output-container-name { container container-name { leaf output-param1 { type type; description description; // optional formatting statements } // additional leaf definitions junos-odl:format container-name-format { // CLI formatting for the parent container } } // Additional containers } }Antes de la versión 17.3 de Junos OS, define el formato de CLI para un contenedor determinado dentro de un contenedor secundario que incluye la
junos-odl:cli-formatinstrucción.container container-name-format { junos-odl:cli-format; // CLI formatting for the parent container }
Dentro de la instrucción o contenedor que define el formato de cli, puede personalizar el resultado de la CLI de RPC mediante instrucciones definidas en el módulo de extensiones ODL de Junos OS. Para obtener más información acerca de la representación de salida ASCII formateado, consulte Personalizar la salida YANG RPC en dispositivos que ejecutan Junos OS. También puede estipular cuándo se emiten los datos en un contenedor determinado en el resultado de la CLI de una RPC. Para obtener información acerca de la construcción de diferentes niveles de salida para la misma RPC, consulte Definir diferentes niveles de salida en RPCs de YANG personalizadas para dispositivos que ejecutan Junos OS.
Para usar el RPC en un dispositivo que ejecute Junos OS:
- Descargue el módulo y la secuencia de comandos de acción al dispositivo
- Agregue los archivos a un paquete YANG nuevo o existente mediante la emisión del
request system yang addcomando operativo orequest system yang update - Ejecute el RPC
- Para ejecutar la RPC en la CLI, emita el comando definido por la
junos:commandinstrucción. - Para ejecutar la RPC de forma remota, use el nombre RPC en una operación de solicitud RPC.
- Para ejecutar la RPC en la CLI, emita el comando definido por la
A partir de Junos OS versión 17.3R1, cuando usted carga los modelos de datos de YANG personalizados en el dispositivo, usted no necesita cargar explícitamente ningún módulo de extensión de Junos OS requerido. En versiones anteriores, debe cargar los módulos de extensión de Junos OS para los paquetes que usen los módulos.
Cuando se ejecuta la RPC en la CLI mediante la emisión del comando definido por la junos:command instrucción, el dispositivo muestra la salida RPC en el formato de CLI definido por la RPC. Si la RPC no define el formato de CLI, de forma predeterminada, no se mostrará ningún resultado para esa RPC en la CLI. Sin embargo, aún puede mostrar el resultado XML para esa RPC en la CLI anexando el | display xml filtro al comando.
Para obtener más información acerca de las RPCs YANG, consulte RFC 6020, YANG - Un lenguaje de modelado de datos para el protocolo de configuración de red (NETCONF) y RFC relacionadas.
empty cuando se ejecuta el comando de la RPC en la CLI de Junos OS.
action-execute instrucción es una subvaloración a
command.
junos-odl:format instrucción de extensión.