SLAX および XSLT スクリプトを使用した構成の変更
SLAX および XSLT op およびイベント スクリプトは、テンプレートを jcs:load-configuration
使用して Junos OS 構成の構造化された変更を行うことができます。Junos OS に精通している経験豊富なユーザーは、関連する設定情報を入力するよう求めるスクリプトを作成し、それに応じて設定を変更できます。これにより、Junos OSの使用経験が少ないユーザーは、スクリプトを使用して設定を安全に変更できます。
このトピックでは、テンプレートを使用して構成を jcs:load-configuration
変更する方法について説明します。
jcs:load-configurationテンプレートの概要
このテンプレートはjcs:load-configuration
、junos.xslインポートファイルに含まれています。テンプレートには次のことができます。
、 、または
load override
の操作を使用して、Junos XML 設定データをload merge
load replace
候補の設定に読み込み、変更をコミットします。アクティブな設定を以前にコミットした設定にロールバックする
レスキュー設定を読み込み、コミットする
と呼ばれると、テンプレートは 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
呼び出して構成を変更できます。このパラメーターは configuration
読み込む Junos XML 構成データを定義し action
、パラメーターはデータの読み込み方法を指定します。このパラメーターは 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スクリプトは、ロールバック番号を入力するよう求め、要求されたロールバック設定を読み込んでコミットします。
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