自動化スクリプトのグローバル パラメータJunos OS変数
Junos OS実行すると、自動スクリプトに入力が自動的に提供されます。スクリプトは、この入力を参照できます。これには、デバイスホスト名、スクリプト タイプ、スクリプト実行ユーザーなど、スクリプト実行環境に関するデバイス固有の情報が含まれます。この情報は、さまざまな複雑なシナリオに対応するスクリプトを作成する場合に役立ちます。
junos.xsl $junos-context
ファイルをインポートする SLAX スクリプトおよび XSLT スクリプトは、ノード セットであるグローバル変数を使用してこの情報を参照できます。また、junos.xsl インポート ファイルは、スクリプトがこの情報のサブセットを簡単に参照できる、事前定義されたグローバル パラメーターを宣言します。Python スクリプトは、この情報を辞書からjunos.Junos_Context
参照できます。この情報は、スクリプトにインポートする必要があります。
SLAX と XSLT スクリプトで定義済みパラメーターまたはグローバル変数を使用するには、XSLT スクリプトのスタイル シートの宣言にタグを含めて junos.xsl <xsl:import>
ファイルをインポートする必要があります。あるいは、次のサンプル コードに示すように、 SLAX import
スクリプトにステートメントを含め、 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 |
スクリプトが実行された現地時間 |
12 月 10 日 11:42:21 2010 年 12 月 |
$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>
自動化スクリプトで使用可能なグローバル変数
Commit、Event、op スクリプトは、実行後にスクリプトに提供される特定の環境情報にアクセスできます。この情報にアクセスするには、Python junos.Junos_Context
スクリプトは、辞書をインポートして参照する必要があります。junos.xsl $junos-context
ファイルをインポートする SLAX スクリプトと XSLT スクリプトは、グローバル変数を参照できます。また、同じ情報を、それぞれのスクリプト言語に適した形式で含めることもできます。 $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)その他 |
<Hostname> |
ローカル デバイスのホスト名 |
東京 |
|
<移動時間> |
スクリプトが実行された現地時間 |
12 月 10 日 11:42:21 2010 年 12 月 |
|
<altime-iso> |
スクリプト実行時のローカル時間(ISO 形式) |
2010-12-10 11:42:21 PST |
|
<ピッド> |
cscript プロセス ID |
5257 |
|
<製品> |
ローカル デバイスのモデル |
m10i |
|
<マスター/> |
スクリプトがプライマリ ノードで実行されている場合に、空の要素ルーティング エンジン |
||
<ルーティング エンジン名> |
ルーティング エンジン実行する方法について |
re0 |
|
<script-type> |
実行するスクリプトのタイプ |
Op |
|
<tty> |
ユーザー セッションの TTY |
/dev/ttyp1 |
|
<junos-context><user-context> |
<class-name> |
スクリプト実行ユーザーのログイン クラス |
スーパーユーザ |
<login-name> |
スクリプトを実行するユーザーのログイン名。アクセス AAA は、TACACS RADIUS/TACACS ユーザー名です。 |
Jsmith |
|
<uid> |
デバイス設定で定義された方法でスクリプトを実行するユーザーのユーザー ID 番号 |
2999 |
|
<ユーザー> |
スクリプトを実行するユーザーのローカル名。Junos OSは、認証にローカル名を使用します。これは、認証の要求に使用 |
ルート |
|
<junos-context><op-context> (op スクリプトのみ) |
<via-url> |
リモート op スクリプトが コマンドを使用して実行される場合に含まれる空の |
|
<junos-context><commit-context> (コミット スクリプトのみ) |
<commit-boot/> |
起動時にコミットが実行される際に空の要素が含まれる |
|
<commit-check/> |
a |
||
<ミットコメント> |
コミットに関するユーザーコメント |
転送に関する問題の修正にコミット |
|
<commit-confirm/> |
a |
||
<commit-sync/> |
a |
||
<database-path/> |
セッションの継承前受験者の設定の場所を指定する要素。通常の設定セッションの場合、要素の値は通常の候補データベースの場所です。プライベート設定セッションの場合、要素の値はプライベート受験者データベースの場所です。属性が |
変数 $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
$junos-context
、表 2 に記載されたノードの名前と同一です。junos-context
user-context
、 op-context
commit-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']