Junos OS自動化スクリプトのグローバルパラメーターと変数
Junos OSは、自動化スクリプトが実行されると、自動的に入力を提供します。スクリプトは、デバイスのホスト名、スクリプトの種類、スクリプトを実行しているユーザーなど、スクリプトの実行環境に関するデバイス固有の情報を含むこの入力を参照できます。この情報は、さまざまな複雑なシナリオに応答するスクリプトを作成する際に役立ちます。
junos.xsl ファイルをインポートする SLAX および XSLT スクリプトは、ノードセットである $junos-context
グローバル変数を使用してこの情報を参照できます。junos.xsl インポート ファイルでは、スクリプトがこの情報のサブセットをより簡単に参照できるように、いくつかの定義済みグローバル パラメーターも宣言されています。Python スクリプトは、スクリプトにインポートする必要がある junos.Junos_Context
ディクショナリを介してこの情報を参照できます。
SLAXおよびXSLTスクリプトで定義済みのパラメータまたはグローバル変数を使用するには、次のサンプルコードに示すように、XSLTスクリプトのスタイルシート宣言に<xsl:import>
タグを含めるか、SLAXスクリプトにimport
ステートメントを含め、junos.xslファイルの場所を指定して、junos.xslファイルをインポートする必要があります。
XSLT 構文
<?xml version="1.0"?> <xsl:stylesheet version="1.0"> <xsl:import href="../import/junos.xsl"/> ... </xsl: stylesheet>
SLAX 構文
version 1.2; import "../import/junos.xsl";
ニシキヘビ
Python スクリプトで情報を参照するには、 Junos_Context
ディクショナリをインポートします。
from junos import Junos_Context
スクリプト入力については、次のセクションで詳しく説明します。
SLAX および XSLT スクリプトで使用可能なグローバルパラメータ
junos.xslファイルをインポートするSLAXおよびXSLT自動化スクリプトでは、いくつかの定義済みグローバルパラメータを使用できます。パラメータは、Junos OS環境に関する情報を提供します。表 1 に、組み込み引数を示します。
名前 |
形容 |
例 |
---|---|---|
$hostname |
ローカル デバイスのホスト名 |
東京 |
$localtime |
スクリプトが実行される現地時間 |
12月10日(金) 11:42:21 2010 |
$localtime-ISO |
スクリプトが実行されたときの ISO 形式のローカル時刻 |
2010年12月10日午前11時42分21秒PST |
$product |
ローカルデバイスのモデル |
M10i |
$script |
実行中のスクリプトのファイル名 |
test.slax (テスト.スラックス) |
$user |
スクリプトを実行しているユーザーのローカル名 |
根 |
定義済みのグローバル パラメータは、 junos.xsl ファイルで宣言されています。これらのパラメータを使用するために、スクリプトで宣言する必要はありません。次の例に示すように、パラメーター名の前にドル記号 ($) を付けることで、スクリプト内のグローバル パラメーターの値にアクセスします。
SLAX 構文:
if ($user != "root") { var $script-message = $user _ " does not have permission to execute " _ $script; expr jcs:output($script-message); }
XSLT 構文:
<xsl:if test="$user != 'root'"> <xsl:variable name="script-message" select="concat($user, ' does not have permission to execute ', $script)"/> <xsl:value-of select="jcs:output($script-message)"/> </xsl:if>
自動化スクリプトで使用できるグローバル変数
コミット、イベント、および op スクリプトは、実行時にスクリプトに提供される特定の環境情報にアクセスできます。この情報にアクセスするには、Python スクリプトで junos.Junos_Context
辞書をインポートして参照する必要があり、 junos.xsl ファイルをインポートする SLAX および XSLT スクリプトは $junos-context
グローバル変数を参照できます。 $junos-context
と Junos_Context
には同じ情報が含まれていますが、それぞれのスクリプト言語に適した形式です。
$junos-context
変数は、<junos-context>
ノードと次の階層を含むノードセットであり、すべてのスクリプトのソースツリーに共通であり、埋め込まれています。
<junos-context> <chassis></chassis> <hostname></hostname> <localtime></localtime> <localtime-iso></localtime-iso> <pid></pid> <product></product> <re-master/> <routing-engine-name></routing-engine-name> <script-type></script-type> <tty></tty> <user-context> <class-name></class-name> <login-name></login-name> <uid></uid> <user></user> </user-context> </junos-context>
さらに、実行されるスクリプトの種類に応じて、スクリプト固有の情報を使用できます。op スクリプトの場合、 <op-context>
要素は op スクリプトに提供されるソースツリーにも含まれています。
<junos-context> <op-context> <via-url/> </op-context> </junos-context>
コミット スクリプトでは、 <commit-context>
要素はコミット スクリプトに提供されるソース ツリーにも含まれています。
<junos-context> <commit-context> <commit-comment>"This is a test commit"</commit-comment> <commit-boot/> <commit-check/> <commit-sync/> <commit-confirm/> <database-path/> </commit-context> </junos-context>
表 2 は、 $junos-context
変数ノード セットの各ノードを識別し、ノードの簡単な説明を示し、空のタグとしてスクリプトに入力されない要素の値の例を示しています。
親ノード |
ノード |
形容 |
コンテンツ例 |
---|---|---|---|
<junos-context> |
<シャーシ> |
スクリプトを ルーティングマトリクスのコンポーネント、 ルートシステムドメイン (RSD)、保護 システムドメイン (PSD)のいずれで実行するかを指定します |
scc、lcc(TXマトリクス)psd、rsd(JCS)その他 |
<ホスト名> |
ローカル デバイスのホスト名 |
東京 |
|
<現地時間> |
スクリプトが実行される現地時間 |
12月10日(金) 11:42:21 2010 |
|
<localtime-iso> |
スクリプトが実行されたときの ISO 形式のローカル時刻 |
2010年12月10日午前11時42分21秒PST |
|
<pid> |
CScriptプロセスID |
5257 |
|
<製品> |
ローカルデバイスのモデル |
M10i |
|
<リマスター/> |
スクリプトがプライマリルーティングエンジンで実行される場合、含まれる空の要素 |
||
<routing-engine-name> |
スクリプトが実行されるルーティングエンジン |
RE0 |
|
<スクリプトタイプ> |
実行中のスクリプトの種類 |
オペアンプ |
|
<tty> |
ユーザーのセッションのTTY |
/dev/ttyp1 |
|
<junos-context> <user-context> |
<クラス名> |
スクリプトを実行しているユーザーのログインクラス |
スーパーユーザ |
<ログイン名> |
スクリプトを実行しているユーザーのログイン名。 AAA アクセスの場合、これは RADIUS/TACACS ユーザー名です。 |
jsmith |
|
<uid> |
デバイス構成で定義されたスクリプトを実行しているユーザーのユーザーID番号 |
2999 |
|
<ユーザー> |
スクリプトを実行しているユーザーのローカル名。Junos OS は、認証にローカル名を使用します。AAA認証に使用される |
根 |
|
<junos-context> <op-context> (op スクリプトのみ) |
<URL経由> |
リモート op スクリプトが |
|
<junos-context> <commit-context> (コミット スクリプトのみ) |
<commit-boot/> |
ブート時にコミットが発生したときに含まれる空の要素 |
|
<commit-check/> |
|
||
<コミットコメント> |
コミットに関するユーザーのコメント |
転送の問題を解決するためにコミットする |
|
<commit-confirm/> |
|
||
<commit-sync/> |
|
||
<database-path/> |
セッションの継承前の候補構成の場所を指定する要素。通常の構成セッションの場合、要素の値は、通常の候補データベースの場所です。プライベート構成セッションの場合、エレメントの値はプライベート候補データベースのロケーションです。 |
$junos-context
変数はノードセットです。したがって、適切な XPath 式を含めることで、スクリプト全体で子要素にアクセスできます。次の SLAX コミットスクリプトは、初期起動時にコミットが実行された場合、システムログファイルにメッセージを書き込みます。このメッセージには、ファシリティ値 daemon
と重大度値 info
が与えられます。詳細については、syslog() を参照してください。
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 configuration { if ($junos-context/commit-context/commit-boot) { expr jcs:syslog("daemon.info", "This is boot-time commit"); } else { /* Do this ... */ } }
Python スクリプトは、スクリプトに提供される環境情報にアクセスするために、junos
モジュールから Junos_Context
ディクショナリをインポートする必要があります。Junos_Context
ディクショナリー内の鍵の名前は、表 2 で概説した$junos-context
ノードの名前と同じです。user-context
、op-context
、commit-context
など、junos-context
ノードの下に入れ子になっている子要素を持つノードは、キーがノード名で値がノードの子要素のディクショナリである Junos_Context
の項目にマップされます。例えば:
'user-context': {'login-name': 'bsmith', 'user': 'bsmith', 'class-name': 'j-superuser', 'uid': '9999'}
以下の出力例では、ローカルで実行された op スクリプトの Junos_Context
ディクショナリを表示しています。op スクリプトの入力には op-context
キーが含まれていますが、このシナリオでは空です。
{'product': 'm7i', 'user-context': {'login-name': 'bsmith', 'user': 'bsmith', 'class-name': 'j-superuser', 'uid': '9999'}, 'routing-engine-name': 're0', 'script-type': 'op', 're-master': None, 'hostname': 'R1', 'pid': '7136', 'tty': '/dev/ttyp1', 'chassis': 'others', 'op-context': ' ', 'localtime': 'Thu Jan 22 11:45:47 2015', 'localtime-iso': '2015-01-22 11:45:47 PST'}
以下の出力例では、commit check
操作中に実行されたコミットスクリプトのJunos_Context
ディクショナリを表示しています。コミット スクリプトの入力には commit-context
キーが含まれていることに注意してください。
{'product': 'm7i', 'user-context': {'login-name': 'bsmith', 'user': 'bsmith', 'class-name': 'j-superuser', 'uid': '9999'}, 'routing-engine-name': 're0', 'script-type': 'commit', 're-master': None, 'hostname': 'R1', 'pid': '11201', 'tty': '/dev/ttyp1', 'commit-context': {'database-path': '/var/run/db/juniper.db', 'commit-check': None}, 'chassis': 'others', 'localtime': 'Thu Jan 22 16:23:55 2015', 'localtime-iso': '2015-01-22 16:23:55 PST'}
ディクショナリ内の個々の値にアクセスするには、キー名を指定します。例えば:
Junos_Context['hostname'] Junos_Context['user-context']['class-name']