SLAX 및 XSLT 스크립트를 사용하여 구성 변경
SLAX 및 XSLT 운영 및 이벤트 스크립트는 jcs:load-configuration
템플릿을 사용하여 Junos OS 구성을 구조화하여 변경할 수 있습니다. Junos OS에 익숙한 숙련된 사용자는 관련 구성 정보를 요청하는 스크립트를 작성하고 그에 따라 구성을 수정할 수 있습니다. 이를 통해 Junos OS 경험이 적은 사용자도 스크립트를 사용하여 구성을 안전하게 수정할 수 있습니다.
이 주제는 템플릿을 사용하여 jcs:load-configuration
구성을 수정하는 방법에 대해 설명합니다.
jcs:load-configuration 템플릿 개요
템플릿은 jcs:load-configuration
junos.xsl 가져오기 파일에 포함되어 있습니다. 템플릿은 다음을 수행할 수 있습니다.
,
load replace
또는load override
작업을 사용해load merge
Junos XML 구성 데이터를 후보 구성에 로드하고 변경 사항을 커밋합니다활성 구성을 이전에 커밋된 구성으로 롤백합니다
구조 구성을 로드하고 커밋합니다
호출되면 템플릿은 jcs:load-configuration
대상 디바이스에서 다음 작업을 수행합니다.
구성 데이터베이스를 잠급니다.
구성 변경 사항을 로드합니다.
구성을 커밋합니다.
구성 데이터베이스의 잠금을 해제합니다.
템플릿은 jcs:load-configuration
모드에서 구성을 configure exclusive
변경합니다. 이 모드에서 Junos OS는 스크립트가 공유 데이터베이스에 액세스하고 구성을 변경하는 한 후보 전역 구성을 잠급니다. 구성 데이터베이스가 이미 잠겨 있거나 템플릿이 호출될 때 후보 구성에 커밋되지 않은 기존 변경 사항이 있는 경우 템플릿 호출이 실패할 수 있습니다. 템플릿이 구성 데이터를 성공적으로 로드하지만 커밋에 실패하면 Junos OS는 데이터베이스가 잠금 해제될 때 커밋되지 않은 변경 사항을 버립니다.
SLAX 템플릿 구문은 다음과 같습니다.
call jcs:load-configuration($action="(merge | override | replace)", $commit-options=node-set, $configuration=configuration-data, $connection=connection-handle, $rescue="rescue", $rollback=number);
XSLT 템플릿 구문은 다음과 같습니다.
<xsl:call-template name="jcs:load-configuration"> <xsl:with-param name="action" select="(merge | override | replace)"/> <xsl:with-param name="commit-options" select="node-set"/> <xsl:with-param name="configuration" select="configuration-data"/> <xsl:with-param name="connection" select="connection-handle"/> <xsl:with-param name="rescue" select=""rescue""/> <xsl:with-param name="rollback" select="number"/> </xsl:call-template>
템플릿에 jcs:load-configuration
인수를 제공하여 다음을 지정합니다.
변경할 장치에 대한 연결 핸들
구성에 대한 변경 사항
변경 사항을 기존 구성에 통합하는 방법을 정의하는 로드 작업입니다
선택적 커밋 옵션
템플릿을 호출하기 전에 대상 장치와의 jcs:load-configuration
연결을 설정해야 합니다. 디바이스에 연결하려면 필요한 인수를 jcs:open()
사용하여 함수를 호출합니다. 그런 다음 매개 변수를 함수에서 jcs:open()
반환된 핸들로 설정합니다.jcs:load-configuration
connection
다음 샘플 코드는 로컬 디바이스에 연결하고 구성을 수정합니다.
var $conn = jcs:open(); var $results := { call jcs:load-configuration($configuration=$config-changes, $connection=$conn); } var $close-results = jcs:close($conn);
템플릿을 호출 jcs:load-configuration
할 때 매개 변수를 포함하여 configuration
디바이스의 새 구성 데이터를 로드하거나, 매개 변수를 지정 rollback
하여 구성을 이전에 커밋한 구성으로 되돌리거나, 매개 변수를 지정 rescue
하여 구조 구성을 로드하고 커밋할 수 있습니다.
구성 데이터 로드 및 커밋
SLAX 및 XSLT 스크립트는 jcs:load-configuration
템플릿을 호출하여 구성을 수정할 수 있습니다. configuration
이 매개 변수는 로드할 Junos XML 구성 데이터를 정의하고 action
, 이 매개 변수는 데이터를 로드하는 방법을 지정합니다. 이 commit-options
매개 변수는 커밋 작업 중에 사용할 옵션을 정의합니다.
다음 샘플 op 스크립트는 jcs:load-configuration
템플릿을 호출하여 구성을 수정하여 인터페이스를 비활성화합니다. 템플릿에 jcs:load-configuration
필요한 모든 값은 변수로 정의되며, 이 변수는 템플릿에 인수로 전달됩니다.
연산자는 :=
템플릿 호출의 jcs:load-configuration
결과를 임시 변수에 복사하고 해당 변수에서 함수를 실행합니다 node-set
. 연산자는 :=
스크립트가 내용에 액세스할 수 있도록 변수가 결과 트리 조각이 아닌 노드 집합인지 확인합니다 disable-results
.
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"; ns ext = "http://xmlsoft.org/XSLT/namespace"; import "../import/junos.xsl"; match / { <op-script-results> { 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> { <synchronize>; <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); } if ($results//xnm:error) { for-each ($results//xnm:error) { <output> message; } } var $close-results = jcs:close($conn); } }
이 스크립트에 대한 자세한 내용은 예: SLAX 및 XSLT Op 스크립트를 사용하여 구성 변경을 참조하십시오.
템플릿 호출에 해당하는 XSLT 코드는 다음과 같습니다.jcs:load-configuration
<xsl:variable name="disable-results-temp"> <xsl:call-template name="jcs:load-configuration"> <xsl:with-param name="action" select="$load-action"/> <xsl:with-param name="commit-options" select="$options"/> <xsl:with-param name="configuration" select="$disable"/> <xsl:with-param name="connection" select="$conn"/> </xsl:call-template> </xsl:variable> <xsl:variable xmlns ext="http:xmlsoft.org/XSLT/namespace" \ name="disable-results" select="ext:node-set($disable-results-temp)"/>
복구 구성 로드 및 커밋
복구 구성을 사용하면 알려진 작업 구성 또는 언제든지 복원할 수 있는 알려진 상태의 구성을 정의할 수 있습니다. SLAX 및 XSLT 스크립트는 jcs:load-configuration
매개 변수가 있는 rescue
템플릿을 호출하여 구조 구성(있는 경우)을 로드할 수 있습니다.
다음 SLAX op 스크립트는 기존 구조 구성을 로드하고 커밋합니다.
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 "/var/db/scripts/import/junos.xsl"; match / { <op-script-results> { /* Open the connection */ var $conn = jcs:open(); /* Load and commit the rescue configuration */ var $results = { call jcs:load-configuration($connection=$conn, $rescue="rescue"); } expr jcs:output($results); /* Close the connection */ expr jcs:close($conn); } }
해당하는 XSLT 스크립트는 다음과 같습니다.
<?xml version="1.0" standalone="yes"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:junos="http://xml.juniper.net/junos/*/junos" xmlns:xnm="http://xml.juniper.net/xnm/1.1/xnm" xmlns:jcs="http://xml.juniper.net/junos/commit-scripts/1.0" version="1.0"> <xsl:import href="/var/db/scripts/import/junos.xsl"/> <xsl:template match="/"> <op-script-results> <!-- Open the connection --> <xsl:variable name="conn" select="jcs:open()"/> <!-- Load and commit the rescue configuration --> <xsl:variable name="results"> <xsl:call-template name="jcs:load-configuration"> <xsl:with-param name="connection" select="$conn"/> <xsl:with-param name="rescue" select=""rescue""/> </xsl:call-template> </xsl:variable> <xsl:value-of select="jcs:output($results)"/> <!-- Close the connection --> <xsl:value-of select="jcs:close($conn)"/> </op-script-results> </xsl:template> </xsl:stylesheet>
구성 롤백
SLAX 및 XSLT 스크립트는 jcs:load-configuration
rollback
매개 변수를 사용하여 템플릿을 호출하여 구성을 이전에 커밋된 구성으로 되돌릴 수 있습니다. 다음 SLAX op 스크립트는 롤백 번호를 프롬프트한 다음 요청된 롤백 구성을 로드하고 커밋합니다.
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 / { <op-script-results> { var $rollback_id = jcs:get-input("Rollback id: "); /* Open the connection */ var $conn = jcs:open(); /* Roll back the configuration and commit it */ var $results = { call jcs:load-configuration($connection=$conn, $rollback=$rollback_id); } /* Close the connection */ expr jcs:close($conn); } }
user@host> op load-rollback Rollback id: 1