이 페이지의
예: Python Op 스크립트를 사용하여 구성 변경
운영 스크립트를 사용하면 Junos OS 구성을 제어하여 변경할 수 있습니다. 운영 스크립트는 장치에 대한 운영 정보를 수집하고 해당 정보를 기반으로 구성을 업데이트할 수 있기 때문에 유용합니다. Junos OS에 익숙한 숙련된 사용자는 관련 구성 정보를 프롬프트하는 운영 스크립트를 작성하고 그에 따라 구성을 수정할 수 있습니다. 따라서 Junos OS에 대한 경험이 적은 사용자는 스크립트를 사용하여 구성을 안전하게 수정할 수 있습니다. 이 예에서는 Junos PyEZ API를 활용하는 Python 운영 스크립트 를 사용하여 Junos OS 구성을 변경하는 방법을 보여 줍니다.
요구 사항
이 예에서는 다음과 같은 하드웨어 및 소프트웨어 구성 요소를 사용합니다.
Junos OS 릴리스 16.1R3 이상에서 Python 확장 패키지를 실행하는 MX 시리즈 라우터입니다.
개요 및 운영 스크립트
Python 운영 스크립트는 Junos PyEZ jnpr.junos.utils.config.Config
유틸리티를 사용하여 Junos OS 구성을 변경할 수 있습니다. Junos PyEZ Config
유틸리티는 구성을 잠그고 구성 데이터를 로드하며 구성에 통합하고 구성을 커밋하며 구성의 잠금을 해제하는 방법을 지정하는 인스턴스 방법을 제공합니다. Junos PyEZ를 사용하여 Junos 디바이스를 구성하는 것에 대한 자세한 내용은 Junos PyEZ를 사용하여 Junos 디바이스를 구성하는 것을 참조하십시오. 이 예제의 Python op 스크립트는 로컬 디바이스에서 인터페이스를 사용하지 않도록 설정하기 위해 구성을 업데이트하는 방법을 보여줍니다.
Python op 스크립트는 다음을 임포트합니다.
Device
클래스—Junos 디바이스에 대한 연결을 처리합니다.Config
클래스—대상 장비에서 구성 모드 명령을 수행합니다.jnpr.junos.exception
모듈—Junos 디바이스 관리 시 발생하는 예외 포함jcs
모듈—스크립트가 지원되는 확장 기능을 실행할 수 있도록 지원
이 예에서는 변수가 usage
스크립트의 기능에 대한 일반적인 설명과 함께 초기화됩니다. 스크립트가 실행되면 스크립트는 CLI에 사용량 설명을 출력하여 사용자가 해당 스크립트의 목적을 검증할 수 있도록 합니다.
이 스크립트는 확장 기능을 호출 jcs.get_input()
하여 사용자가 인터페이스의 이름을 입력하지 않도록 표시하고 변수에 interface
인터페이스 이름을 저장합니다. 변수는 config_xml
구성 변경을 정의하는 XML 문자열입니다.
스크립트는 인스턴스 open()
를 생성할 때 호스트 매개 변수를 Device
제공하지 않기 때문에 이 방법은 로컬 디바이스와의 연결을 설정합니다. 이 예에서는 컨텍스트 관리자 mode='exclusive'
를 사용하여 구성이 수정되는 동안 구성에 대한 독점 잠금을 획득함으로써 인스턴스를 만듭니다Config
. 이 모드에서 컨텍스트 관리자는 자동으로 후보 구성의 잠금 및 잠금 해제를 처리합니다. Config
유틸리티 방법은 지원자 구성에 구성 변경을 작동으로 load merge
로드하고 구성을 커밋합니다. 이 dev.close()
방법은 연결을 닫습니다.
Python 스크립트
from jnpr.junos import Device from jnpr.junos.utils.config import Config from jnpr.junos.exception import * import jcs import sys def main(): usage = """ This script disables the specified interface. The script modifies the candidate configuration to disable the interface and commits the configuration to activate it. """ print (usage) interface = jcs.get_input("Enter interface to disable: ") if not interface: print ("invalid interface") sys.exit(1) config_xml = """ <configuration> <interfaces> <interface> <name>{0}</name> <disable/> </interface> </interfaces> </configuration> """.format(interface).strip() dev = Device() dev.open() try: with Config(dev, mode="exclusive") as cu: print ("Loading and committing configuration changes") cu.load(config_xml, format="xml", merge=True) cu.commit() except Exception as err: print (err) dev.close() return dev.close() if __name__ == "__main__": main()
구성
단계별 절차
스크립트를 다운로드, 활성화, 테스트하려면 다음을 수행합니다.
-
스크립트를 텍스트 파일에 복사하고 파일 config-change.py 이름을 지정한 다음 장비의 /var/db/scripts/op/ directory에 복사합니다.
참고:서명되지 않은 Python 스크립트는 Junos OS
super-user
로그인 클래스의 루트 또는 사용자가 소유해야 하며 파일 소유자만이 파일에 대한 쓰기 권한을 가질 수 있습니다. -
구성 모드에서는 계층 수준에서 명령문을
[edit system scripts op]
포함합니다file config-change.py
.[edit system scripts] user@host# set op file config-change.py
-
디바이스에서 서명되지 않은 Python 스크립트 실행을 활성화합니다.
[edit system scripts] user@host# set language python
참고:language python3
Python 3을 사용하여 Python 스크립트를 실행하도록 명령문을 구성하거나 Python 2.7을 사용하여 Python 스크립트를 실행하도록 명령문을 구성language python
합니다. 자세한 내용은 언어를 참조하십시오. -
commit and-quit
명령을 실행하여 구성을 커밋하고 운영 모드로 돌아갑니다.[edit] user@host# commit and-quit
-
스크립트를 실행하기 전에 운영 모드 명령을 발행
show interfaces interface-name
하고 스크립트에 의해 비활성화될 인터페이스의 현재 상태를 기록합니다. -
운영 모드 명령을 실행하여 운영 스크립트를
op config-change.py
실행합니다.user@host> op config-change.py This script disables the specified interface. 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 Loading and committing configuration changes
확인
커밋 확인
목적
커밋이 성공했는지 확인합니다.
작업
구성 변경 및 커밋과 관련된 경고 또는 오류를 포착하는 코드를 스크립트에 포함시켜야 합니다. 이를 통해 커밋의 성공 여부를 보다 쉽게 판단할 수 있습니다. 경고 또는 오류 메시지가 없는 경우 여러 가지 방법으로 커밋의 성공을 확인할 수 있습니다.
커밋 로그를 확인하여 커밋에 성공했는지 확인합니다.
user@host> show system commit 0 2010-09-22 17:08:17 PDT by user via netconf
syslog 메시지 파일을 검사하여 커밋 작업이 로깅되었는지 확인합니다. 이 경우 비활성화된 인터페이스에
SNMP_TRAP_LINK_DOWN
대한 메시지도 표시됩니다. 추적을 위한 구성 설정에 따라 이 메시지가 로그 파일에 나타날 수도 있고 없을 수도 있습니다.user@host> show log messages | last Sep 22 17:08:13 host file[7319]: UI_COMMIT: User 'user' requested 'commit' operation Sep 22 17:08:16 host xntpd[1386]: ntpd exiting on signal 1 Sep 22 17:08:16 host xntpd[1386]: ntpd 4.2.0-a Fri Jun 25 13:48:13 UTC 2010 (1) 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