Parámetros y variables globales en scripts de automatización de Junos OS
Junos OS proporciona automáticamente entrada a scripts de automatización cuando se ejecutan. La secuencia de comandos puede hacer referencia a esta entrada, que incluye información específica del dispositivo sobre el entorno de ejecución de la secuencia de comandos, como el nombre de host del dispositivo, el tipo de secuencia de comandos y el usuario que ejecuta la secuencia de comandos. Esta información es útil para crear scripts que respondan a una variedad de escenarios complejos.
Las secuencias de comandos 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 que las secuencias de comandos hagan referencia con mayor facilidad a un subconjunto de esta información. Las secuencias de comandos de Python pueden hacer referencia a esta información a través del junos.Junos_Context
diccionario, que se debe importar en la secuencia de comandos.
Para utilizar los parámetros predefinidos o la variable global en scripts SLAX y XSLT, debe importar el archivo junos.xsl incluyendo la etiqueta en la <xsl:import>
declaración de hoja de estilo de una secuencia de comandos XSLT o incluyendo la import
instrucción en una secuencia de comandos SLAX y especificando la ubicación del archivo junos.xsl como se muestra en el siguiente código de ejemplo:
Sintaxis de XSLT
<?xml version="1.0"?> <xsl:stylesheet version="1.0"> <xsl:import href="../import/junos.xsl"/> ... </xsl: stylesheet>
Sintaxis SLAX
version 1.0; import "../import/junos.xsl";
Python
Para hacer referencia a la información en scripts de Python, importe el Junos_Context
diccionario.
from junos import Junos_Context
La entrada de 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 la secuencia de comandos |
Viernes, 10 de diciembre de 11:42:21 2010 |
$localtime-iso |
Hora local, en formato ISO, cuando se ejecuta la secuencia de comandos |
2010-12-10 11:42:21 PST |
$product |
Modelo del dispositivo local |
m10i |
$script |
Nombre de archivo de la secuencia de comandos de ejecución |
test.slax |
$user |
Nombre local del usuario que ejecuta la secuencia de comandos |
Raíz |
Los parámetros globales predefinidos se declaran en el archivo junos.xsl . No es necesario declarar estos parámetros en una secuencia de comandos para usarlos. Obtenga acceso al valor de los parámetros globales en una secuencia de comandos antefirándole el nombre del parámetro con el signo de dólar ($), como se muestra en el ejemplo siguiente:
Sintaxis SLAX:
if ($user != "root") { var $script-message = $user _ " does not have permission to execute " _ $script; expr jcs:output($script-message); }
Sintaxis DESD:
<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
Las secuencias de comandos de confirmación, eventos y operación pueden acceder a la información específica del entorno que se proporciona a la secuencia de comandos tras la ejecución. Para acceder a esta información, las secuencias de comandos de Python deben importar y hacer referencia al junos.Junos_Context
diccionario, y las secuencias de comandos SLAX y XSLT que importan el archivo junos.xsl pueden hacer referencia a la $junos-context
variable $junos-context
global y Junos_Context
contener información idéntica, pero en un formato adecuado para el idioma de secuencia de comandos 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 todas las secuencias de comandos:
<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 de la secuencia de comandos está disponible según el tipo de script ejecutado. En el caso de las secuencias de comandos op, el <op-context>
elemento también se incluye en el árbol de origen proporcionado a una secuencia de comandos op:
<junos-context> <op-context> <via-url/> </op-context> </junos-context>
Para scripts de confirmación, el <commit-context>
elemento también se incluye en el árbol de origen proporcionado a una secuencia de comandos 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 del conjunto de nodos de variables $junos-context
, proporciona una breve descripción del nodo y proporciona ejemplos de valores para los elementos que no se ingresan a una secuencia de comandos como una etiqueta vacía.
Nodo principal |
Nodo |
Descripción |
Contenido de ejemplo |
---|---|---|---|
<junos contexto> |
<chassis> |
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 (transmisión matrix)psd, rsd (JCS)otros |
<hostname> |
Nombre de host del dispositivo local |
Tokio |
|
<local> |
Hora local cuando se ejecuta la secuencia de comandos |
Viernes, 10 de diciembre de 11:42:21 2010 |
|
<localtime-iso> |
Hora local, en formato ISO, cuando se ejecuta la secuencia de comandos |
2010-12-10 11:42:21 PST |
|
<pid> |
ID de proceso cscript |
5257 |
|
<producto> |
Modelo del dispositivo local |
m10i |
|
<re-master/> |
Elemento vacío incluido si la secuencia de comandos se ejecuta en el motor de enrutamiento principal |
||
nombre del motor de enrutamiento <> |
Motor de enrutamiento en el que se ejecuta la secuencia de comandos |
re0 |
|
tipo <script> |
Tipo de secuencia de comandos que se ejecuta |
Op |
|
<> |
TTY de la sesión del usuario |
/dev/ttyp1 |
|
<junos-context> <user-context> |
<clase> |
Clase de inicio de sesión del usuario que ejecuta el script |
Superusuario |
nombre de <login> |
Nombre de inicio de sesión del usuario que ejecuta la secuencia de comandos. Para el acceso AAA , este es el nombre de usuario RADIUS/TACACS. |
Jsmith |
|
<uid> |
Número de ID de usuario del usuario que ejecuta la secuencia de comandos según se define en la configuración del dispositivo |
2999 |
|
<usuario> |
Nombre local del usuario que ejecuta la secuencia de comandos. Junos OS utiliza el nombre local para la autenticación. Puede diferir de la utilizada para la |
Raíz |
|
<junos-context> <op-context> (solo scripts operativos) |
<via-url> |
Elemento vacío incluido si la secuencia de comandos de operación remota se ejecuta mediante el |
|
contexto de <junos> <como contexto> (solo confirmar scripts) |
<comprobado/> |
Elemento vacío incluido cuando la confirmación se produce en el tiempo de arranque |
|
<commit-check/> |
Elemento vacío incluido cuando se realiza una |
||
<comodo> |
Comentario del usuario con respecto a la confirmación |
Comprometerse a solucionar el problema del reenvío |
|
< confirmación/> |
Elemento vacío incluido cuando se realiza una |
||
<commit-sync/> |
Elemento vacío incluido cuando se realiza una |
||
<-path/> |
Elemento que especifica la ubicación de la configuración pre-heredada del candidato de 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 las sesiones de configuración privadas, el valor del elemento es la ubicación de la base de datos de candidatos privada. 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 una secuencia de comandos incluyendo la expresión XPath adecuada. La siguiente secuencia de comandos de confirmación 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 da un valor de instalación y daemon
un valor de gravedad de info
. Para obtener más información, consulte syslog().
version 1.0; 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 ... */ } }
Las secuencias de comandos de Python deben importar el Junos_Context
diccionario desde el junos
módulo para acceder a la información de entorno proporcionada a las secuencias de comandos. Los nombres de las claves del Junos_Context
diccionario son idénticos a los nombres de los nodos descritos en la $junos-context
tabla 2. Nodos con elementos secundarios anidados en el junos-context
nodo como user-context
, op-context
y commit-context
asignar 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'}
En el siguiente resultado de ejemplo, se muestra el Junos_Context
diccionario de una secuencia de comandos op que se ejecutó localmente. Tenga en cuenta que la entrada de secuencia de comandos op contiene la op-context
clave, que en este caso 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'}
En el siguiente resultado de ejemplo, se muestra el Junos_Context
diccionario de una secuencia de comandos de confirmación que se ejecutó durante una commit check
operación. Tenga en cuenta que la entrada de 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 tener acceso a valores individuales en el diccionario, especifique el nombre de clave. Por ejemplo:
Junos_Context['hostname'] Junos_Context['user-context']['class-name']