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']