SLAX 및 XSLT 스크립트를 사용하여 구성 변경
SLAX 및 XSLT op 및 이벤트 스크립트는 템플릿을 jcs:load-configuration
사용하여 Junos OS 구성을 구조화하여 변경할 수 있습니다. Junos OS 익숙한 숙련된 사용자는 관련 구성 정보를 묻는 스크립트를 작성하고 그에 따라 구성을 수정할 수 있습니다. 이를 통해 Junos OS 경험이 적은 사용자는 스크립트를 사용하여 구성을 안전하게 수정할 수 있습니다.
이 주제는 템플릿을 사용하여 구성을 jcs:load-configuration
수정하는 방법에 대해 설명합니다.
jcs:로드 구성 템플릿 개요
jcs:load-configuration
템플릿은 junos.xsl 가져오기 파일에 포함되어 있습니다. 템플릿은 다음을 할 수 있습니다.
, 또는
load override
작업을 사용하여load merge
load replace
XML 구성 데이터를 후보 구성에 Junos 로드하고 변경 사항을 커밋합니다.활성 구성을 이전에 커밋한 구성으로 롤백
복구 구성 로드 및 커밋
이 호출 시 템플릿은 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:load-configuration
connection
함수가 반환한 핸들로 jcs:open()
설정합니다.
다음 샘플 코드는 로컬 디바이스에 연결하고 구성을 수정합니다.
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
호출하여 구성을 수정할 수 있습니다. 매개 변수는 로드할 Junos XML 구성 데이터를 정의하며action
, 매개 변수는 configuration
데이터를 로드하는 방법을 지정합니다. 매개 변수는 commit-options
커밋 작업 중에 사용할 옵션을 정의합니다.
다음 샘플 op 스크립트는 인터페이스를 jcs:load-configuration
비활성화하기 위해 구성을 수정하기 위해 템플릿을 호출합니다. 템플릿에 jcs:load-configuration
필요한 모든 값은 변수로 정의되며, 이 값은 인수로 템플릿에 전달됩니다.
연산자는 :=
템플릿 호출 결과를 jcs:load-configuration
임시 변수에 복사하고 해당 변수에서 함수를 node-set
실행합니다. 운영자는 :=
스크립트가 콘텐츠에 disable-results
액세스할 수 있도록 변수가 결과 트리 조각이 아닌 노드 세트인지 확인합니다.
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 $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 스크립트를 사용한 구성 변경 을 참조하십시오.
템플릿으로의 호출 jcs:load-configuration
에 해당하는 XSLT 코드는 다음과 같습니다.
<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.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"; 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 스크립트는 롤백 번호에 대한 프롬프트를 표시한 다음 요청된 rollback 구성을 로드하고 커밋합니다.
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"; 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