이벤트 스크립트를 사용하여 구성 변경
이벤트에 대한 응답으로 구성을 변경하도록 이벤트 정책을 구성할 수 있습니다. 이벤트 정책은 구성을 변경하고 커밋하는 이벤트 스크립트를 호출하거나 구성을 변경하는 구성 모드 명령을 실행하기 위해 문을 사용하여 change-configuration
구성을 수정할 수 있습니다. 이벤트 스크립트는 구성을 수정할 때 문보다 change-configuration
더 많은 유연성을 제공합니다. 예를 들어, 이벤트 스크립트를 사용하면 특정 조건을 확인하고, 다양한 형식의 구성 데이터를 제공하며, 데이터를 기존 구성과 병합하는 방법을 지정할 수 있습니다. 예를 들어 NSR(Nonstop Active Routing)이 활성화된 듀얼 라우팅 엔진 디바이스와 같은 특정 경우, 이벤트 정책은 구성을 수정하기 위해 이벤트 스크립트만 사용할 수 있습니다.
다음 섹션에서는 이벤트 스크립트를 사용하여 구성을 수정하는 방법에 대해 설명합니다.
SLAX 또는 XSLT 이벤트 스크립트를 사용하여 구성을 변경하는 방법
SLAX 및 XSLT 이벤트 스크립트는 jcs:load-configuration
템플릿을 호출하여 Junos OS 구성을 구조화하여 변경할 수 있습니다. 구성을 수정하기 위해 템플릿을 호출하기 전에 대상 디바이스와의 연결을 설정해야 합니다. 템플릿에 대한 자세한 내용은 jcs:load-configuration 및 SLAX 및 XSLT 스크립트를 사용하여 구성 변경을 참조하십시오.
다음 SLAX 이벤트 스크립트는 로컬 디바이스에 대한 연결을 열고, 템플릿을 호출하여 jcs:load-configuration
구성을 수정하고 커밋한 다음, 연결을 닫습니다. 템플릿에 jcs:load-configuration
필요한 모든 값은 변수로 정의되며, 이 변수는 템플릿에 인수로 전달됩니다.
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 / { <event-script-results> { /* Open a connection to the local device */ var $connection = jcs:open(); /* Define configuration change */ var $configuration-change = <configuration> { <routing-options> { <static> { <route> { <name>"198.51.100.0/24"; <next-hop>"10.1.3.1"; } } } } /* Load and commit the configuration */ var $load-action = "merge"; var $options := { <commit-options> { <log> "Configuration modified through event script"; } } var $results := { call jcs:load-configuration($connection, $action=$load-action, $configuration=$configuration-change, $commit-options=$options); } /* Close the connection */ var $close-results = jcs:close($connection); } }
주어진 이벤트에 대해 SLAX 이벤트 스크립트를 호출하는 이벤트 정책을 구성하려면 다음을 수행합니다.
Python 이벤트 스크립트를 사용하여 구성을 변경하는 방법
Python 스크립트는 Junos PyEZ 라이브러리를 사용하여 Junos OS를 실행하는 디바이스의 구성을 변경할 수 있습니다. Junos PyEZ jnpr.junos.utils.config.Config
유틸리티는 구성을 잠그고, 로드하고, 커밋하고, 잠금 해제하는 인스턴스 메서드를 제공합니다.
다음 Python 이벤트 스크립트는 로컬 디바이스에 연결하고 구성을 업데이트하고 커밋합니다.
from jnpr.junos import Device from jnpr.junos.utils.config import Config import jcs with Device() as dev: with Config(dev) as cu: cu.load("set routing-options static route 198.51.100.0/24 next-hop 10.1.3.1", format="set") cu.commit(comment="Configuration modified through event script", timeout=300)
주어진 이벤트에 대해 Python 이벤트 스크립트를 호출하는 이벤트 정책을 구성하려면 다음을 수행합니다.
Junos PyEZ를 사용하여 Junos OS를 실행하는 디바이스를 구성하는 방법에 대한 자세한 내용은 Junos PyEZ 개발자 가이드를 참조하십시오.
NSR(Nonstop Active Routing)이 활성화된 디바이스에서 이벤트 스크립트를 사용하여 구성을 변경하는 방법
NSR(Nonstop Active Routing)이 활성화된 듀얼 라우팅 엔진 디바이스의 구성을 변경하기 위해 이벤트 정책을 사용할 때, 이벤트 정책이 기본 라우팅 엔진에서만 업데이트된 구성을 커밋하는 이벤트 스크립트를 호출하는 것이 좋습니다. 이렇게 하면 구성 업데이트 및 후속 커밋 작업이 라우팅 엔진에서 모두 성공하도록 보장할 수 있습니다. 문이 NSR 구성의 일부로 계층 수준에서 구성 [edit system]
되기 때문에 commit synchronize
구성은 백업 라우팅 엔진에 자동으로 동기화됩니다. 또는 문을 사용하여 change-configuration
구성을 수정하거나 이벤트 스크립트가 기본 라우팅 엔진의 변경 사항만 커밋하지 않는 경우, 두 라우팅 엔진이 동시에 구성 데이터베이스에 대한 잠금을 획득하려고 시도하여 하나 또는 두 커밋 모두 실패할 수 있습니다.
기본 라우팅 엔진의 구성만 구성하고 커밋하는 이벤트 스크립트를 생성하려면 현재 라우팅 엔진이 기본 라우팅 엔진인지 여부를 테스트하는 로직을 포함합니다. 현재 라우팅 엔진이 기본 라우팅 엔진인 경우 구성을 업데이트하고 커밋합니다.
다음 SLAX 이벤트 스크립트는 로컬 디바이스에 연결하고 현재 라우팅 엔진이 기본 라우팅 엔진인지 확인합니다. 기본 라우팅 엔진인 경우 스크립트는 구성을 업데이트한 다음 커밋합니다.
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 / { <event-script-results> { /* Retrieve chassis information */ var $rpc = <get-chassis-inventory>; var $chassis_rpc = jcs:invoke($rpc); var $current_state = $chassis_rpc/chassis/name; /* Open a connection to the local device */ var $connection = jcs:open(); /* Define configuration change */ var $configuration-change = <configuration> { <routing-options> { <static> { <route> { <name>"198.51.100.0/24"; <next-hop>"10.1.3.1"; } } } } /* Load and commit the configuration */ var $load-action = "merge"; var $options := { <commit-options> { <log> "Configuration modified through event script"; } } if ($current_state == "Chassis") { var $results := { call jcs:load-configuration($connection, $action=$load-action, $configuration = $configuration-change, $commit-options=$options); } } /* Close the connection */ var $close-results = jcs:close($connection); } }
마찬가지로 다음 Python 이벤트 스크립트는 로컬 디바이스에 연결하여 현재 라우팅 엔진이 기본 라우팅 엔진인 경우에만 구성을 업데이트하고 커밋합니다.
from jnpr.junos import Device from jnpr.junos.utils.config import Config import jcs with Device() as dev: if("master" in dev.facts["current_re"]): with Config(dev) as cu: cu.load("set routing-options static route 198.51.100.0/24 next-hop 10.1.3.1", format="set") cu.commit(comment="Configuration modified through event script", timeout=300)