이 페이지의
예: SLAX 및 XSLT Op 스크립트를 사용하여 구성 변경
이 예에서는 SLAX 운영 스크립트를 사용하여 Junos OS 구성을 구조화된 변경을 하는 방법을 설명합니다.
디바이스 구성
단계별 절차
스크립트를 다운로드, 활성화, 테스트하려면 다음을 수행합니다.
스크립트를 텍스트 파일에 복사하여 파일 config-change.slax의 이름을 지정하고 장비의 /var/db/scripts/op/ directory에 복사합니다.
구성 모드에서 계층 수준에서 스크립트의 파일 이름을
[edit system scripts op file]
구성합니다.[edit system scripts op] user@host# set file config-change.slax
commit and-quit
명령을 실행하여 구성을 커밋하고 운영 모드로 돌아갑니다.[edit] user@host# commit and-quit
스크립트를 실행하기 전에 운영 모드 명령을 발행
show interfaces interface-name
하고 스크립트에 의해 비활성화될 인터페이스의 현재 상태를 기록합니다.운영 스크립트를 실행합니다.
user@host> op config-change This script disables the interface specified by the user. The script modifies the candidate configuration to disable the interface and commits the configuration to activate it. Enter interface to disable: so-0/0/0
요구 사항
이 예에서는 Junos OS를 실행하는 디바이스를 사용합니다.
개요 및 운영 스크립트
SLAX 및 XSLT 운영 스크립트는 junos.xsl 임포트 파일에 있는 템플릿을 사용하여 jcs:load-configuration
Junos OS 구성을 구조화할 수 있습니다. 이 예에서는 템플릿을 사용하여 jcs:load-configuration
Junos OS를 실행하는 디바이스에서 인터페이스를 비활성화하는 SLAX 운영 스크립트를 만듭니다. 템플릿에 jcs:load-configuration
필요한 모든 값은 변수로 정의되고 이 값은 템플릿으로 전달됩니다.
이 예에서는 변수가 usage
스크립트의 기능에 대한 일반적인 설명과 함께 초기화됩니다. 스크립트를 실행할 때 사용 설명이 CLI에 출력되도록 함수를 호출 jcs:output()
합니다. 이를 통해 올바른 목적으로 스크립트를 사용하고 있는지 확인할 수 있습니다.
스크립트는 기능을 호출 jcs:get-input()
합니다. 이 함수는 인터페이스 이름을 비활성화하라는 프롬프트를 표시하고 인터페이스 이름을 변수에 interface
저장합니다. 변수는 config-changes
장비에 로드할 Junos XML 구성 데이터를 저장하고 변수를 interface
참조합니다. 템플릿 호출은 jcs:load-configuration
변수에 configuration
저장된 config-changes
데이터에 매개 변수의 값을 설정합니다.
변수가 load-action
설정 merge
됩니다. 이 변수는 새로운 구성 데이터를 후보 구성과 병합합니다. 이는 CLI 구성 모드 명령 load merge
과 동일합니다.
변수는 options
커밋 작업에 대한 옵션을 정의합니다. 운영자가 :=
노드 집합을 생성하고 이 노드 집합은 매개 변수의 값으로 템플릿에 commit-options
전달됩니다. 이 예에는 향후 참조를 위해 커밋 로그에 대한 설명을 추가하는 태그가 포함 log
됩니다.
함수에 대한 jcs:open()
호출은 로컬 디바이스의 Junos OS 관리 프로세스(mgd)와의 연결을 열고 변수에 저장된 연결 핸들을 conn
반환합니다. 스크립트는 템플릿을 호출합니다 jcs:load-configuration
.
운영자는 :=
템플릿 호출 결과를 jcs:load-configuration
임시 변수로 복사하고 해당 변수에서 함수를 node-set
실행합니다. 그러면 생성된 노드 세트가 변수에 results
저장됩니다. 운영자는 :=
변수가 results
결과 트리 패킷 조각이 아닌 노드 세트인지 확인하여 스크립트가 내용에 액세스할 수 있도록 합니다.
기능은 jcs:close()
장치에 대한 연결을 닫습니다. 기본적으로 템플릿은 jcs:load-configuration
CLI에 메시지를 출력하지 않습니다. 이 예에서는 커밋과 관련된 문제를 신속하게 식별하기 위해 응답으로 인쇄 및 xnm:error
메시지를 검색하고 인쇄 xmn:warning
합니다.
SLAX 구문
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"; ns ext = "http://xmlsoft.org/XSLT/namespace"; import "../import/junos.xsl"; match / { <op-script-results> { var $usage = "This script disables the specified interface." _ "The script modifies the candidate configuration to disable " _ "the interface and commits the configuration to activate it."; var $temp = jcs:output($usage); var $interface = jcs:get-input("Enter interface to disable: "); var $config-changes = { <configuration> { <interfaces> { <interface> { <name> $interface; <disable>; } } } } var $load-action = "merge"; var $options := { <commit-options> { <log> "disabling interface " _ $interface; } } var $conn = jcs:open(); var $results := { call jcs:load-configuration( $action=$load-action, $commit-options=$options, $configuration=$config-changes, $connection=$conn); } var $close-results = jcs:close($conn); if ($results//xnm:error) { for-each ($results//xnm:error) { <output> message; } } if ($results//xnm:warning) { for-each ($results//xnm:warning) { <output> message; } } } }
확인
커밋 확인
목적
커밋이 성공했는지 확인합니다.
작업
오류 또는 경고에 대해 템플릿이 반환 jcs:load-configuration
한 노드 세트를 구문 분석하는 코드를 스크립트에 포함시켜야 합니다. 이를 통해 커밋의 성공 여부를 보다 쉽게 판단할 수 있습니다. 경고 또는 오류 메시지가 없는 경우 여러 가지 방법으로 커밋의 성공을 확인할 수 있습니다.
커밋 로그를 확인하여 커밋에 성공했는지 확인합니다. 매개 변수에
log
commit-options
옵션을 포함 하는 경우 메시지는 커밋 정보와 함께 커밋 로그에서 볼 수 있어야 합니다.user@host> show system commit 0 2010-09-22 17:08:17 PDT by user via junoscript disabling interface so-0/0/0
syslog 메시지 파일을 검사하여 커밋 작업이 로깅되었는지 확인합니다. 이 경우 비활성화된
SNMP_TRAP_LINK_DOWN
인터페이스에 대한 메시지도 0/0/0/0으로 표시됩니다. 추적을 위한 구성 설정에 따라 이 메시지가 로그 파일에 나타날 수도 있고 없을 수도 있습니다.user@host> show log messages | last Sep 22 17:08:13 host file[7319]: UI_COMMIT: User 'user' requested 'commit' operation (comment: disabling interface so-0/0/0) Sep 22 17:08:16 host mib2d[1434]: SNMP_TRAP_LINK_DOWN: ifIndex 526, ifAdminStatus down(2), ifOperStatus down(2), ifName so-0/0/0
구성 변경 확인
목적
올바른 변경 사항이 구성에 통합되는지 확인합니다.
작업
구성을 표시하고 변경 사항이 지정된 인터페이스에 대해 표시되는지 확인합니다.
user@host> show configuration interfaces so-0/0/0 disable;
이 예에서는 운영 모드 명령을 실행하여 인터페이스가
show interfaces interface-name
비활성화 됐는지 확인할 수도 있습니다. 이 경우 인터페이스를 사용하지 않도록 설정 하기 전에 캡처한 출력은 인터페이스Enabled
가 임을 보여줍니다.user@host> show interfaces so-0/0/0 Physical interface: so-0/0/0, Enabled, Physical link is Up Interface index: 128, SNMP ifIndex: 526 Link-level type: PPP, MTU: 4474, Clocking: Internal, SONET mode, Speed: OC3, Loopback: None, FCS: 16, Payload scrambler: Enabled Device flags : Present Running Interface flags: Point-To-Point SNMP-Traps Internal: 0x4000 Link flags : Keepalives CoS queues : 4 supported, 4 maximum usable queues Last flapped : 2010-09-14 10:33:25 PDT (1w1d 06:27 ago) Input rate : 0 bps (0 pps) Output rate : 0 bps (0 pps) SONET alarms : None SONET defects : None
인터페이스를 비활성화하기 위해 스크립트를 실행 한 후 캡처한 출력은 인터페이스가 지금
Administratively down
있음을 보여줍니다.user@host> show interfaces so-0/0/0 Physical interface: so-0/0/0, Administratively down, Physical link is Up Interface index: 128, SNMP ifIndex: 526 Link-level type: PPP, MTU: 4474, Clocking: Internal, SONET mode, Speed: OC3, Loopback: None, FCS: 16, Payload scrambler: Enabled Device flags : Present Running Interface flags: Down Point-To-Point SNMP-Traps Internal: 0x4000 Link flags : Keepalives CoS queues : 4 supported, 4 maximum usable queues Last flapped : 2010-09-14 10:33:25 PDT (1w1d 06:40 ago) Input rate : 0 bps (0 pps) Output rate : 0 bps (0 pps) SONET alarms : None SONET defects : None