Parâmetros e variáveis globais nos scripts de automação do Junos OS
O Junos OS fornece automaticamente a entrada para scripts de automação quando eles são executados. O script pode fazer referência a essa entrada, que inclui informações específicas do dispositivo sobre o ambiente de execução de scripts, como o nome de host do dispositivo, o tipo de script e o usuário que executa o script. Essas informações são úteis para criar scripts que respondam a uma variedade de cenários complexos.
Scripts SLAX e XSLT que importam o arquivo junos.xsl podem fazer referência a essas informações usando a $junos-context
variável global, que é um conjunto de nós. O arquivo de importação junos.xsl também declara vários parâmetros globais predefinidos que permitem que os scripts façam uma referência mais facil a um subconjunto dessas informações. Os scripts de Python podem fazer referência a essas informações por meio do junos.Junos_Context
script, que deve ser importado para o script.
Para usar os parâmetros pré-definidos ou variável global em scripts SLAX e XSLT, você deve importar o arquivo junos.xsl , incluindo a <xsl:import>
tag na declaração de folha de estilo de um script XSLT ou incluindo a import
declaração em um script SLAX e especificando a localização do arquivo junos.xsl conforme mostrado no código de amostra a seguir:
Sintaxe XSLT
<?xml version="1.0"?> <xsl:stylesheet version="1.0"> <xsl:import href="../import/junos.xsl"/> ... </xsl: stylesheet>
Sintaxe SLAX
version 1.2; import "../import/junos.xsl";
Pitão
Para fazer referência às informações nos scripts de Python, importe o insumos Junos_Context
.
from junos import Junos_Context
A entrada de script é descrita em detalhes nas seguintes seções:
Parâmetros globais disponíveis em scripts SLAX e XSLT
Vários parâmetros globais predefinidos estão disponíveis para uso em scripts de automação SLAX e XSLT que importam o arquivo junos.xsl . Os parâmetros fornecem informações sobre o ambiente do Junos OS. A Tabela 1 descreve os argumentos integrados.
Nome |
Descrição |
Exemplo |
---|---|---|
$hostname |
Nome de host do dispositivo local |
Tóquio |
$localtime |
Hora local em que o script é executado |
Sex Dez 10 11:42:21 2010 |
$localtime iso |
Hora local, no formato ISO, quando o script é executado |
2010-12-10 11:42:21 PST |
$product |
Modelo do dispositivo local |
m10i |
$script |
Nome de arquivo do script de execução |
test.slax |
$user |
Nome local do usuário que executa o script |
raiz |
Os parâmetros globais predefinidos são declarados no arquivo junos.xsl . Você não precisa declarar esses parâmetros em um script para usá-los. Acesse o valor dos parâmetros globais em um script prefixando o nome do parâmetro com o sinal de dólar ($), conforme mostrado no exemplo a seguir:
Sintaxe SLAX:
if ($user != "root") { var $script-message = $user _ " does not have permission to execute " _ $script; expr jcs:output($script-message); }
Sintaxe 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>
Variável global disponível em scripts de automação
Scripts de confirmação, eventos e op podem acessar informações específicas do ambiente fornecidas ao script após a execução. Para acessar essas informações, os scripts do Python devem importar e fazer referência ao script do níquete, e os junos.Junos_Context
scripts SLAX e XSLT que importam o arquivo junos.xsl podem fazer referência à $junos-context
variável $junos-context
global e Junos_Context
conter informações idênticas, mas em um formato adequado para a respectiva linguagem de script.
A $junos-context
variável é um conjunto de nós que contém o <junos-context>
nó e a hierarquia a seguir, que é comum e incorporado na árvore de origem de todos os 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>
Além disso, informações específicas de script estão disponíveis dependendo do tipo de script executado. Para scripts op, o <op-context>
elemento também está incluído na árvore de origem fornecida a um script de operação:
<junos-context> <op-context> <via-url/> </op-context> </junos-context>
Para scripts de confirmação, o <commit-context>
elemento também está incluído na árvore de origem fornecida a um script de confirmação:
<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>
A Tabela 2 identifica cada nó do conjunto de $junos-context
nós variável, fornece uma breve descrição do nó e dá exemplos de valores para quaisquer elementos que não estejam na entrada de um script como uma tag vazia.
Nó dos pais |
Nodo |
Descrição |
Conteúdo de exemplo |
---|---|---|---|
contexto <junos> |
<chassis> |
Especifica se o script é executado em um componente de uma matriz de roteamento, o Domínio do Sistema Raiz (RSD) ou um Domínio de Sistema Protegido (PSD) |
scc, lcc (TX Matrix)psd, rsd (JCS)outros |
<hostname> |
Nome de host do dispositivo local |
Tóquio |
|
< tempolocal> |
Hora local em que o script é executado |
Sex Dez 10 11:42:21 2010 |
|
< tempolocal> |
Hora local, no formato ISO, quando o script é executado |
2010-12-10 11:42:21 PST |
|
<pid> |
ID do processo de cscript |
5257 |
|
<produto> |
Modelo do dispositivo local |
m10i |
|
mestre/> < |
Elemento vazio incluído se o script for executado no mecanismo de roteamento primário |
||
< nome do mecanismo de roteamento> |
Mecanismo de roteamento no qual o script é executado |
re0 |
|
tipo <script> |
Tipo de script sendo executado |
Op |
|
<> |
TTY da sessão do usuário |
/dev/ttyp1 |
|
contexto <junos> contexto < usuário> |
<classe> |
Faça login na classe do usuário que executa o script |
Superusuário |
<logina> |
Faça login com o nome do usuário que executa o script. Para acesso AAA , este é o nome de usuário RADIUS/TACACS. |
jsmith |
|
<uida> |
Número de ID do usuário executando o script conforme definido na configuração do dispositivo |
2999 |
|
< usuário> |
Nome local do usuário que executa o script. O Junos OS usa o nome local para autenticação. Pode ser diferente do |
raiz |
|
contexto <junos> contexto <op> (somente scripts de op) |
<via-url> |
Elemento vazio incluído se o script de operações remotas for executado usando o |
|
contexto > < contexto <junos> (apenas scripts de confirmação) |
<commit-boot/> |
Elemento vazio incluído quando o commit ocorre no momento do inicialização |
|
verificação/> <compromisso de < |
Elemento vazio incluído quando um |
||
<comentado> |
Comentário do usuário sobre o commit |
Comprometa-se a corrigir problema de encaminhamento |
|
<compromisso/> |
Elemento vazio incluído quando um |
||
sincronização/> <commit |
Elemento vazio incluído quando um |
||
caminho/> database < |
Elemento que especifica a localização da configuração do candidato pré-herança da sessão. Para sessões de configuração normais, o valor do elemento é a localização do banco de dados normal do candidato. Para sessões de configuração privadas, o valor do elemento é a localização do banco de dados do candidato privado. Quando o |
A $junos-context
variável é um conjunto de nós. Portanto, você pode acessar os elementos infantis em um script, incluindo a expressão XPath adequada. O script de confirmação SLAX a seguir escreve uma mensagem ao arquivo de log do sistema se o commit for realizado durante o inicial inicial. A mensagem recebe um valor de daemon
instalação e um valor de gravidade de info
. Para obter mais informações, veja 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 ... */ } }
Os scripts de Python devem importar o Junos_Context
nívem do junos
módulo para acessar as informações do ambiente fornecidas aos scripts. Os nomes das chaves do Junos_Context
náutico são idênticos aos nomes dos $junos-context
nós descritos na Tabela 2. Nós com elementos infantis que estão aninhados sob o junos-context
nó, como user-context
, op-context
e commit-context
mapa para itens em Junos_Context
, onde a chave é o nome do nó e o valor é um níquete dos elementos infantis do nó. Por exemplo:
'user-context': {'login-name': 'bsmith', 'user': 'bsmith', 'class-name': 'j-superuser', 'uid': '9999'}
A saída de exemplo a seguir exibe o Junos_Context
aprendizado de um script de operação que foi executado localmente. Observe que a entrada de script op contém a op-context
chave, que neste cenário está vazia.
{'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'}
A saída de exemplo a seguir exibe o Junos_Context
nítido para um script de confirmação que foi executado durante uma commit check
operação. Observe que a entrada de script de confirmação contém a commit-context
chave.
{'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 acessar valores individuais no níquete, especifique o nome chave. Por exemplo:
Junos_Context['hostname'] Junos_Context['user-context']['class-name']