Junos OS 自動化スクリプトのグローバル パラメーターと変数
Junos OS は、自動化スクリプトの実行時に自動的に入力を提供します。スクリプトはこの入力を参照できます。これには、デバイスホスト名、スクリプトタイプ、スクリプトを実行するユーザーなど、スクリプト実行環境に関するデバイス固有の情報が含まれます。この情報は、さまざまな複雑なシナリオに対応するスクリプトを作成するのに役立ちます。
junos.xsl ファイルをインポートする SLAX および XSLT スクリプトは、ノードセットであるグローバル変数を$junos-context
使用してこの情報を参照できます。junos.xsl インポート ファイルでは、スクリプトがこの情報のサブセットをより簡単に参照できるように、事前定義された複数のグローバル パラメーターも宣言します。Python スクリプトは辞書を通じてこの情報をjunos.Junos_Context
参照できます。辞書はスクリプトにインポートする必要があります。
SLAX スクリプトおよび XSLT スクリプトで定義済みのパラメーターまたはグローバル変数を使用するには、XSLT スクリプトのスタイル シート宣言にタグを含めるか、SLAX スクリプトに ステートメントを含import
<xsl: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.0; import "../import/junos.xsl";
Python
Python スクリプトの情報を参照するには、辞書をインポートします Junos_Context
。
from junos import Junos_Context
スクリプト入力については、以下のセクションで詳しく説明します。
SLAX および XSLT スクリプトで使用可能なグローバル パラメーター
junos.xsl ファイルをインポートする SLAX および XSLT 自動化スクリプトでは、いくつかの定義済みグローバル パラメーターを使用できます。パラメーターは、Junos OS 環境に関する情報を提供します。表 1 は、組み込み引数を示しています。
名前 |
説明 |
例 |
---|---|---|
$hostname |
ローカル デバイスのホスト名 |
東京 |
$localtime |
スクリプトの実行時のローカル時間 |
2010年12月10日(金)11:42:21 |
$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 Matrix)psd、rsd(JCS)その他 |
<ホスト名> |
ローカル デバイスのホスト名 |
東京 |
|
<ローカルタイム> |
スクリプトの実行時のローカル時間 |
2010年12月10日(金)11:42:21 |
|
<localtime-iso> |
スクリプトの実行時のローカル時間(ISO 形式) |
2010-12-10 11:42:21 PST |
|
<pid> |
cscript プロセス ID |
5257 |
|
<製品> |
ローカル デバイスのモデル |
m10i |
|
<re-master/> |
スクリプトがプライマリ ルーティング エンジンで実行される場合に含まれる空の要素 |
||
<ルーティングエンジン名> |
スクリプトが実行されるルーティング エンジン |
re0 |
|
<スクリプトタイプ> |
実行されるスクリプトの種類 |
Op |
|
<ぎ> |
ユーザーのセッションの TTY |
/dev/ttyp1 |
|
<junos-context><ユーザーコンテキストです> |
<クラス名> |
スクリプトを実行しているユーザーのログイン クラス |
スーパーユーザ |
<login-name> |
スクリプトを実行しているユーザーのログイン名。 AAA アクセスの場合、これはRADIUS/TACACSユーザー名です。 |
ジェイスミス |
|
<uid> |
デバイス設定で定義されたスクリプトを実行しているユーザーのユーザー ID 番号 |
2999 |
|
<ユーザー> |
スクリプトを実行しているユーザーのローカル名。Junos OS は、認証にローカル名を使用します。AAA 認証に使用する |
ルート |
|
<junos-context><op-context> (op スクリプトのみ) |
<via-url> |
コマンドを使用してリモート op スクリプトを実行する場合に含まれる空の |
|
<junos-context> <commit-context> (コミット スクリプトのみ) |
<commit-boot/> |
起動時にコミットが発生した場合に含まれる空の要素 |
|
<commit-check/> |
実行時に含まれる空の |
||
<コミットコメント> |
コミットに関するユーザーコメント |
転送の問題を解決するコミット |
|
<commit-confirm/> |
実行時に含まれる空の |
||
<commit-sync/> |
実行時に含まれる空の |
||
<データベースパス/> |
セッションの事前継承候補構成の場所を指定する要素。通常の構成セッションの場合、 要素の値は通常の候補データベースの場所です。プライベート構成セッションの場合、 要素の値はプライベート候補データベースの場所です。属性がこの |
変数は $junos-context
ノードセットです。そのため、適切な XPath 式を含めることで、スクリプト全体で子要素にアクセスできます。次の SLAX コミット スクリプトは、初期起動時にコミットが実行された場合、システム ログ ファイルにメッセージを書き込みます。このメッセージには ファシリティ 値が の daemon
、重大度値が . info
詳細については、 syslog()を参照してください。
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 configuration { if ($junos-context/commit-context/commit-boot) { expr jcs:syslog("daemon.info", "This is boot-time commit"); } else { /* Do this ... */ } }
Python スクリプトは、スクリプトにJunos_Context
提供された環境情報にアクセスするためにモジュールからjunos
辞書をインポートする必要があります。辞書にあるJunos_Context
キーの名前は、表 2 で説明した$junos-context
ノードの名前と同じです。、 、および などのcommit-context
user-context
op-context
ノードの下junos-context
にネストされた子要素を持つノードは、 内のJunos_Context
アイテムにマップされます。キーはノード名であり、値はノードの子要素の辞書です。例えば:
'user-context': {'login-name': 'bsmith', 'user': 'bsmith', 'class-name': 'j-superuser', 'uid': '9999'}
次の出力例では、ローカルで Junos_Context
実行された op スクリプトの辞書が表示されます。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'}
次の出力例では、操作中に Junos_Context
実行されたコミット スクリプトの辞書が commit check
表示されます。コミット スクリプト入力にはキーが含まれていることに 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']