Junos OS 자동화 스크립트의 전역 매개 변수 및 변수
Junos OS는 자동화 스크립트가 실행될 때 자동으로 입력을 제공합니다. 스크립트는 디바이스 호스트 이름, 스크립트 유형 및 스크립트를 실행하는 사용자와 같은 스크립트 실행 환경에 대한 디바이스별 정보를 포함하는 이 입력을 참조할 수 있습니다. 이 정보는 다양하고 복잡한 시나리오에 응답하는 스크립트를 만드는 데 유용합니다.
junos.xsl 파일을 가져오는 SLAX 및 XSLT 스크립트는 노드 집합인 전역 변수를 사용하여 $junos-context
이 정보를 참조할 수 있습니다. 또한 junos.xsl 가져오기 파일은 스크립트가 이 정보의 하위 집합을 보다 쉽게 참조할 수 있도록 몇 가지 사전 정의된 전역 매개 변수를 선언합니다. Python 스크립트는 스크립트로 가져와야 하는 사전을 junos.Junos_Context
통해 이 정보를 참조할 수 있습니다.
SLAX 및 XSLT 스크립트에서 사전 정의된 매개 변수 또는 전역 변수를 사용하려면 XSLT 스크립트의 스타일 시트 선언에 태그를 포함 <xsl:import>
하거나 SLAX 스크립트에 문을 포함 import
하고 다음 샘플 코드에 표시된 대로 junos.xsl 파일 위치를 지정하여 junos.xsl 파일을 가져와야 합니다.
XSLT 구문
<?xml version="1.0"?> <xsl:stylesheet version="1.0"> <xsl:import href="../import/junos.xsl"/> ... </xsl: stylesheet>
SLAX 구문
version 1.2; import "../import/junos.xsl";
파이썬
Python 스크립트에서 정보를 참조하려면 사전을 Junos_Context
가져옵니다.
from junos import Junos_Context
스크립트 입력은 다음 섹션에 자세히 설명되어 있습니다.
SLAX 및 XSLT 스크립트에서 사용할 수 있는 전역 매개 변수
junos.xsl 파일을 가져오는 SLAX 및 XSLT 자동화 스크립트에서 사용할 수 있는 몇 가지 사전 정의된 전역 매개 변수를 사용할 수 있습니다. 매개 변수는 Junos OS 환경에 대한 정보를 제공합니다. 표 1 에는 내장 인수가 설명되어 있습니다.
이름 |
묘사 |
본보기 |
---|---|---|
$hostname |
로컬 디바이스의 호스트 이름 |
도쿄 |
$localtime |
스크립트가 실행되는 현지 시간 |
금 Dec 10 11:42:21 2010 |
$localtime-iso |
스크립트가 실행될 때 ISO 형식의 현지 시간 |
2010-12-10 태평양 표준시 11:42:21 태평양 표준시 |
$product |
로컬 장치의 모델 |
M10i (엠10i) |
$script |
실행 스크립트의 파일 이름 |
test.slax |
$user |
스크립트를 실행하는 사용자의 로컬 이름입니다 |
뿌리 |
사전 정의된 전역 매개 변수는 junos.xsl 파일에 선언되어 있습니다. 이러한 매개 변수를 사용하기 위해 스크립트에서 선언할 필요는 없습니다. 다음 예제와 같이 매개 변수 이름 앞에 달러 기호($)를 붙여 스크립트의 전역 매개 변수 값에 액세스합니다.
SLAX 구문:
if ($user != "root") { var $script-message = $user _ " does not have permission to execute " _ $script; expr jcs:output($script-message); }
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>
자동화 스크립트에서 사용할 수 있는 전역 변수
커밋, 이벤트 및 op 스크립트는 실행 시 스크립트에 제공되는 특정 환경 정보에 액세스할 수 있습니다. 이 정보에 액세스하려면 Python 스크립트가 사전을 junos.Junos_Context
가져오고 참조해야 하며, junos.xsl 파일을 가져오는 SLAX 및 XSLT 스크립트는 $junos-context
전역 변수를 참조할 수 있습니다. $junos-context
Junos_Context
동일한 정보를 포함하지만 해당 스크립트 언어에 적합한 형식입니다.
변수는 $junos-context
노드와 다음 계층 구조를 포함하는 <junos-context>
노드 집합으로, 모든 스크립트의 소스 트리에 공통적이고 포함됩니다.
<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>
또한 실행된 스크립트 유형에 따라 스크립트 관련 정보를 사용할 수 있습니다. op 스크립트의 경우 <op-context>
요소는 op 스크립트에 제공된 소스 트리에도 포함됩니다.
<junos-context> <op-context> <via-url/> </op-context> </junos-context>
커밋 스크립트의 경우, <commit-context>
요소는 커밋 스크립트에 제공되는 소스 트리에도 포함됩니다.
<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>
표 2 는 변수 node-set의 $junos-context
각 노드를 식별하고, 노드에 대한 간략한 설명을 제공하며, 스크립트에 빈 태그로 입력되지 않는 요소에 대한 값의 예를 제공합니다.
부모 노드 |
노드 |
묘사 |
콘텐츠 예시 |
---|---|---|---|
<junos 컨텍스트> |
<섀시> |
스크립트가 라우팅 매트릭스의 구성 요소, 루트 시스템 도메인 (RSD) 또는 보호 시스템 도메인 (PSD)에서 실행되는지 여부를 지정합니다 |
scc, lcc (TX 매트릭스)psd, rsd (JCS)기타 |
<호스트 이름> |
로컬 디바이스의 호스트 이름 |
도쿄 |
|
<현지 시간> |
스크립트가 실행되는 현지 시간 |
금 Dec 10 11:42:21 2010 |
|
<현지 시간-iso> |
스크립트가 실행될 때 ISO 형식의 현지 시간 |
2010-12-10 태평양 표준시 11:42:21 태평양 표준시 |
|
<pid> |
cscript 프로세스 ID |
5257 |
|
<제품> |
로컬 장치의 모델 |
M10i (엠10i) |
|
< 리마스터/> |
스크립트가 기본 라우팅 엔진에서 실행되는 경우 빈 요소 포함 |
||
<라우팅 엔진 이름> |
스크립트가 실행되는 라우팅 엔진 |
재0 |
|
<스크립트 유형> |
실행 중인 스크립트의 유형 |
op |
|
<tty> |
사용자 세션의 TTY |
/dev/ttyp1 |
|
<junos-context> <user-context> |
<클래스 이름> |
스크립트를 실행하는 사용자의 로그인 클래스 |
수퍼유저 |
<login-name> |
스크립트를 실행하는 사용자의 로그인 이름입니다. AAA 액세스의 경우 RADIUS/TACACS 사용자 이름입니다. |
제이스미스 |
|
<uid입니다> |
디바이스 구성에 정의된 대로 스크립트를 실행하는 사용자의 사용자 ID 번호 |
2999 |
|
<사용자> |
스크립트를 실행하는 사용자의 로컬 이름입니다. Junos OS는 인증을 위해 로컬 이름을 사용합니다. AAA 인증에 사용되는 것과 |
뿌리 |
|
<junos-context> <op-context> (op 스크립트만 해당) |
<URL을 통해> |
원격 op 스크립트가 명령을 사용하여 |
|
<junos-context> <commit-context> (커밋 스크립트만 해당) |
< 커밋 부팅/> |
부팅 시 커밋이 발생할 때 포함된 빈 요소 |
|
< 커밋 확인/> |
a가 |
||
<커밋 코멘트> |
커밋에 대한 사용자 의견 |
전달 문제 해결을 위한 약속 |
|
< 커밋 확인/> |
a가 |
||
< 커밋 동기화/> |
a가 |
||
< 데이터베이스 경로/> |
세션의 상속 전 후보 구성의 위치를 지정하는 요소입니다. 일반 구성 세션의 경우, 요소의 값은 일반 후보 데이터베이스의 위치입니다. 비공개 구성 세션의 경우, 요소의 값은 비공개 후보 데이터베이스의 위치입니다. |
$junos-context
변수는 노드 집합입니다. 따라서 적절한 XPath 식을 포함하여 스크립트 전체에서 자식 요소에 액세스할 수 있습니다. 다음 SLAX 커밋 스크립트는 초기 부팅 중에 커밋이 수행되는 경우 시스템 로그 파일에 메시지를 기록합니다. 메시지에는 기능 값 daemon
과 심각info
도 값이 지정됩니다. 자세한 내용은 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 ... */ } }
Python 스크립트는 스크립트에 제공된 환경 정보에 액세스하기 위해 모듈에서 junos
사전을 가져와야 Junos_Context
합니다. 딕셔너리에 있는 Junos_Context
키의 이름은 표 2에 요약된 노드의 $junos-context
이름과 동일합니다. 노드 아래에 junos-context
중첩된 자식 요소가 있는 노드(예: user-context
, op-context
)는 commit-context
의 항목에 Junos_Context
매핑됩니다. 여기서 키는 노드 이름이고 값은 노드의 자식 요소 사전입니다. 예를 들어:
'user-context': {'login-name': 'bsmith', 'user': 'bsmith', 'class-name': 'j-superuser', 'uid': '9999'}
다음 예제 출력은 로컬에서 Junos_Context
실행된 op 스크립트의 사전을 표시합니다. op 스크립트 입력에는 키가 포함되어 op-context
있으며, 이 시나리오에서는 비어 있습니다.
{'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'}
다음 예제 출력에는 작업 중에 실행된 커밋 스크립트의 사전이 commit check
표시됩니다Junos_Context
. 커밋 스크립트 입력에는 키가 포함되어 있습니다commit-context
.
{'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'}
사전의 개별 값에 액세스하려면 키 이름을 지정합니다. 예를 들어:
Junos_Context['hostname'] Junos_Context['user-context']['class-name']