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 merge
、load replace
、またはload override
操作を使用して、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: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.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 スクリプトを使用した構成の変更」を参照してください。
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 スクリプトは、rescue
パラメーターを指定して jcs:load-configuration
テンプレートを呼び出し、レスキュー構成 (存在する場合) を読み込むことができます。
次の 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 スクリプトは、rollback
パラメーターを指定して jcs:load-configuration
テンプレートを呼び出し、以前にコミットされた構成に構成を戻すことができます。次の 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