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