Parámetros y variables globales en scripts de automatización de Junos OS
Junos OS proporciona automáticamente información a los scripts de automatización cuando se ejecutan. El script puede hacer referencia a esta entrada, que incluye información específica del dispositivo sobre el entorno de ejecución del script, como el nombre de host del dispositivo, el tipo de script y el usuario que ejecuta el script. Esta información es útil para crear scripts que respondan a una variedad de escenarios complejos.
Los scripts SLAX y XSLT que importan el archivo junos.xsl pueden hacer referencia a esta información mediante la $junos-context
variable global, que es un conjunto de nodos. El archivo de importación junos.xsl también declara varios parámetros globales predefinidos que permiten a los scripts hacer referencia más fácilmente a un subconjunto de esta información. Los scripts de Python pueden hacer referencia a esta información a través del junos.Junos_Context
diccionario, que debe importarse al script.
Para utilizar los parámetros predefinidos o la variable global en scripts SLAX y XSLT, debe importar el archivo junos.xsl incluyendo la <xsl:import>
etiqueta en la declaración de hoja de estilos de un script XSLT o incluyendo la import
instrucción en un script SLAX y especificando la ubicación del archivo junos.xsl como se muestra en el siguiente código de ejemplo:
Sintaxis XSLT
<?xml version="1.0"?> <xsl:stylesheet version="1.0"> <xsl:import href="../import/junos.xsl"/> ... </xsl: stylesheet>
Sintaxis de SLAX
version 1.2; import "../import/junos.xsl";
Pitón
Para hacer referencia a la información en scripts de Python, importe el Junos_Context
diccionario.
from junos import Junos_Context
La entrada del script se describe en detalle en las siguientes secciones:
Parámetros globales disponibles en scripts SLAX y XSLT
Hay varios parámetros globales predefinidos disponibles para su uso en scripts de automatización SLAX y XSLT que importan el archivo junos.xsl . Los parámetros proporcionan información sobre el entorno de Junos OS. En la tabla 1 se describen los argumentos integrados.
Nombre |
Descripción |
Ejemplo |
---|---|---|
$hostname |
Nombre de host del dispositivo local |
Tokio |
$localtime |
Hora local cuando se ejecuta el script |
Fri dic 10 11:42:21 2010 |
$localtime-ISO |
Hora local, en formato ISO, cuando se ejecuta el script |
2010-12-10 11:42:21 PST |
$product |
Modelo del dispositivo local |
M10i |
$script |
Nombre de archivo del script en ejecución |
test.slax |
$user |
Nombre local del usuario que ejecuta el script |
raíz |
Los parámetros globales predefinidos se declaran en el archivo junos.xsl . No es necesario declarar estos parámetros en un script para poder utilizarlos. Acceda al valor de los parámetros globales en un script anteponiendo el nombre del parámetro con el signo de dólar ($), como se muestra en el ejemplo siguiente:
Sintaxis de SLAX:
if ($user != "root") { var $script-message = $user _ " does not have permission to execute " _ $script; expr jcs:output($script-message); }
Sintaxis XSLT:
<xsl:if test="$user != 'root'"> <xsl:variable name="script-message" select="concat($user, ' does not have permission to execute ', $script)"/> <xsl:value-of select="jcs:output($script-message)"/> </xsl:if>
Variable global disponible en scripts de automatización
Los scripts de confirmación, evento y operación pueden acceder a información de entorno específica que se proporciona al script tras la ejecución. Para acceder a esta información, los scripts de Python deben importar y hacer referencia al diccionario, y los junos.Junos_Context
scripts SLAX y XSLT que importan el archivo junos.xsl pueden hacer referencia a la $junos-context
variable global. $junos-context
y Junos_Context
contienen información idéntica pero en un formato adecuado para el lenguaje de script respectivo.
La $junos-context
variable es un conjunto de nodos que contiene el <junos-context>
nodo y la siguiente jerarquía, que es común e incrustada en el árbol de origen de todos los scripts:
<junos-context> <chassis></chassis> <hostname></hostname> <localtime></localtime> <localtime-iso></localtime-iso> <pid></pid> <product></product> <re-master/> <routing-engine-name></routing-engine-name> <script-type></script-type> <tty></tty> <user-context> <class-name></class-name> <login-name></login-name> <uid></uid> <user></user> </user-context> </junos-context>
Además, la información específica del script está disponible dependiendo del tipo de script ejecutado. Para los scripts op, el <op-context>
elemento también se incluye en el árbol de origen proporcionado a un script op:
<junos-context> <op-context> <via-url/> </op-context> </junos-context>
Para los scripts de confirmación, el <commit-context>
elemento también se incluye en el árbol de origen proporcionado a un script de confirmación:
<junos-context> <commit-context> <commit-comment>"This is a test commit"</commit-comment> <commit-boot/> <commit-check/> <commit-sync/> <commit-confirm/> <database-path/> </commit-context> </junos-context>
La Tabla 2 identifica cada nodo de la $junos-context
variable node-set, proporciona una breve descripción del nodo y da ejemplos de valores para cualquier elemento que no se ingrese en un script como una etiqueta vacía.
Nodo principal |
Nodo |
Descripción |
Contenido de ejemplo |
---|---|---|---|
<junos-contexto> |
<chasis> |
Especifica si la secuencia de comandos se ejecuta en un componente de una matriz de enrutamiento, el dominio del sistema raíz (RSD) o un dominio de sistema protegido (PSD) |
scc, lcc (matriz TX)psd, rsd (JCS)otros |
<nombre de host> |
Nombre de host del dispositivo local |
Tokio |
|
<hora local> |
Hora local cuando se ejecuta el script |
Fri dic 10 11:42:21 2010 |
|
<localtime-iso> |
Hora local, en formato ISO, cuando se ejecuta el script |
2010-12-10 11:42:21 PST |
|
<pid> |
ID de proceso cscript |
5257 |
|
<producto> |
Modelo del dispositivo local |
M10i |
|
<remaster/> |
Elemento vacío incluido si el script se ejecuta en el motor de enrutamiento principal |
||
<nombre-motor-de-enrutamiento> |
Motor de enrutamiento en el que se ejecuta el script |
re0 |
|
<tipo de script> |
Tipo de script que se está ejecutando |
Op |
|
<tty> |
TTY de la sesión del usuario |
/dev/ttyp1 |
|
<junos-context> <user-context> |
<nombre-clase> |
Clase de inicio de sesión del usuario que ejecuta el script |
superusuario |
<nombre de inicio de sesión> |
Nombre de inicio de sesión del usuario que ejecuta el script. Para el acceso AAA , este es el nombre de usuario de RADIUS/TACACS. |
jsmith |
|
<uid> |
Número de ID de usuario del usuario que ejecuta el script tal como se define en la configuración del dispositivo |
2999 |
|
<usuario> |
Nombre local del usuario que ejecuta el script. Junos OS utiliza el nombre local para la autenticación. Puede diferir del utilizado para la |
raíz |
|
<junos-contexto> <o-contexto> (solo scripts op) |
<via-url> |
Elemento vacío incluido si el script de operación remota se ejecuta mediante el |
|
<junos-context> <commit-context> (solo comandos de confirmación) |
<commit-boot/> |
Elemento vacío incluido cuando la confirmación se produce en el momento del arranque |
|
<commit-check/> |
Elemento vacío incluido cuando se realiza un |
||
<comprometer-comentar> |
Comentario del usuario sobre la confirmación |
Confirmar para solucionar el problema de reenvío |
|
<confirmar-confirmar/> |
Elemento vacío incluido cuando se realiza un |
||
<commit-sync/> |
Elemento vacío incluido cuando se realiza un |
||
<ruta de base de datos/> |
Elemento que especifica la ubicación de la configuración del candidato a herencia previa a la sesión. Para las sesiones de configuración normales, el valor del elemento es la ubicación de la base de datos candidata normal. Para sesiones de configuración privadas, el valor del elemento es la ubicación de la base de datos privada de candidatos. Cuando el |
La $junos-context
variable es un conjunto de nodos. Por lo tanto, puede tener acceso a los elementos secundarios a lo largo de un script incluyendo la expresión XPath adecuada. La siguiente secuencia de comandos de confirmación de SLAX escribe un mensaje en el archivo de registro del sistema si la confirmación se realiza durante el arranque inicial. Al mensaje se le asigna un valor de instalación de daemon
y un valor de gravedad de info
. Para obtener más información, consulte syslog().
version 1.2; ns junos = "http://xml.juniper.net/junos/*/junos"; ns xnm = "http://xml.juniper.net/xnm/1.1/xnm"; ns jcs = "http://xml.juniper.net/junos/commit-scripts/1.0"; import "../import/junos.xsl"; match configuration { if ($junos-context/commit-context/commit-boot) { expr jcs:syslog("daemon.info", "This is boot-time commit"); } else { /* Do this ... */ } }
Los scripts de Python deben importar el Junos_Context
diccionario desde el junos
módulo para acceder a la información del entorno proporcionada a los scripts. Los nombres de las claves en el diccionario son idénticos a los nombres de los $junos-context
nodos descritos en la Junos_Context
Tabla 2. Nodos con elementos secundarios que están anidados bajo el junos-context
nodo, como user-context
, op-context
y commit-context
se asignan a elementos en Junos_Context
, donde la clave es el nombre del nodo y el valor es un diccionario de los elementos secundarios del nodo. Por ejemplo:
'user-context': {'login-name': 'bsmith', 'user': 'bsmith', 'class-name': 'j-superuser', 'uid': '9999'}
El siguiente resultado de ejemplo muestra el Junos_Context
diccionario de un script op que se ejecutó localmente. Tenga en cuenta que la entrada del script op contiene la op-context
clave, que en este escenario está vacía.
{'product': 'm7i', 'user-context': {'login-name': 'bsmith', 'user': 'bsmith', 'class-name': 'j-superuser', 'uid': '9999'}, 'routing-engine-name': 're0', 'script-type': 'op', 're-master': None, 'hostname': 'R1', 'pid': '7136', 'tty': '/dev/ttyp1', 'chassis': 'others', 'op-context': ' ', 'localtime': 'Thu Jan 22 11:45:47 2015', 'localtime-iso': '2015-01-22 11:45:47 PST'}
El siguiente resultado de ejemplo muestra el Junos_Context
diccionario de un script de confirmación que se ejecutó durante una commit check
operación. Tenga en cuenta que la entrada del script de confirmación contiene la commit-context
clave.
{'product': 'm7i', 'user-context': {'login-name': 'bsmith', 'user': 'bsmith', 'class-name': 'j-superuser', 'uid': '9999'}, 'routing-engine-name': 're0', 'script-type': 'commit', 're-master': None, 'hostname': 'R1', 'pid': '11201', 'tty': '/dev/ttyp1', 'commit-context': {'database-path': '/var/run/db/juniper.db', 'commit-check': None}, 'chassis': 'others', 'localtime': 'Thu Jan 22 16:23:55 2015', 'localtime-iso': '2015-01-22 16:23:55 PST'}
Para acceder a valores individuales en el diccionario, especifique el nombre de la clave. Por ejemplo:
Junos_Context['hostname'] Junos_Context['user-context']['class-name']