Junos実行モジュールとState Saltモジュールについて
Junosの実行と状態のSalt モジュールを使用すると、アドホックコマンドを実行したり、Junos OSを実行しているデバイスで特定の状態を定義して適用したりできます。
Junos 実行および状態モジュールの概要
Salt は、システムの状態を宣言および適用し、管理対象デバイス上で操作タスクと設定タスクを実行できるようにする、構成管理およびリモート実行ツールです。Salt は、Python モジュールを使用してこれらのタスクを実行します。モジュールには、主に実行モジュールと状態モジュールの 2 種類があります。
Salt 実行モジュールは、Salt ミニオンで実行される Python モジュールです。これらは、ミニオンでタスクを実行できるようにする機能を定義します。Salt マスターでアドホック コマンドを実行して、指定された関数を実行して結果を返すようにターゲット ミニオンに指示できます。同様に、Salt 状態モジュールでは、ミニオンへの状態の適用を管理するために Salt 状態ファイルで使用される関数を定義します。
Salt インストールには、以下の実行モジュールと state モジュールが含まれており、Junos OS を実行しているデバイスを操作できます。
salt.modules.junos—Junos実行モジュール(Salt用)は、Junos OSを実行しているデバイスで運用タスクと設定タスクを実行できるようにする機能を定義します。たとえば、デバイス上で運用コマンドやRPCを実行したり、設定を変更したり、新しいソフトウェアイメージをインストールしたりできます。salt.states.junos—Junos ステート モジュール(Salt 用)は、Junos OS を実行するデバイス上で特定のステートを宣言して適用するために、ソルトステート ファイルで使用できる機能を定義します。例えば、設定に特定のステートメントセットが含まれていることや、デバイスが特定の運用状態を反映していることを確認したい場合があります。Junos 状態関数は、同じ名前の Junos 実行関数を呼び出して、これらのタスクを実行します。
Salt が Junos プロキシ(Salt 用)を介して Junos OS を実行しているデバイスを管理している場合、関数を呼び出すと、Python モジュールはデバイス上で直接実行されません。プロキシ ミニオンは代わりに Junos PyEZ を使用して、管理対象デバイス上の NETCONF サーバにリモート プロシージャ コール(RPC)を送信し、要求されたタスクを実行します。複数のターゲットで関数を実行すると、Salt は異なるデバイスでタスクを並行して実行します。
表 1 は、Junos 実行モジュールと state モジュールで定義されている機能の一覧と、各機能の簡単な説明を示しています。 facts、 facts_refresh、および ping 関数を除き、両方のモジュールで同じ関数が定義されています。
関数名 |
salt.modules.junos |
salt.states.junos |
形容 |
|---|---|---|---|
|
Y |
Y |
CLI コマンドを実行し、指定された形式でコマンド出力を返します。 |
|
Y |
Y |
ターゲット構成データベースにロードされた変更をコミットします。 |
|
Y |
Y |
候補コンフィギュレーションに対して |
|
Y |
Y |
候補コンフィギュレーションと指定されたロールバックコンフィギュレーションの差を返します。 |
|
Y |
– |
接続フェーズ中に収集されたデバイス ファクトを表示します。 |
|
Y |
– |
ターゲット デバイスからデバイス ファクトをリロードし、Salt グレインに格納されているファクトを更新します。 |
|
Y |
Y |
Salt マスターまたはプロキシ ミニオン サーバから Junos OS を実行しているデバイスにファイルをコピーします。 |
|
Y |
Y |
Junos PyEZ の表とビューを使用して、Junos OS を実行しているデバイスから運用データまたは設定データを取得します。 |
|
Y |
Y |
ターゲット構成データベースをロック、変更、コミット、およびロック解除します。 |
|
Y |
Y |
デバイスにJunos OSソフトウェアイメージをインストールします。 |
|
Y |
Y |
指定されたファイル内の設定データをターゲット設定データベースに読み込みます。 |
|
Y |
Y |
候補コンフィギュレーションの排他ロックを要求します。 |
|
Y |
– |
Junos OSを実行しているデバイスから指定されたターゲットにインターネット制御メッセージプロトコル(ICMP)pingを送信し、結果を表示します。 |
|
Y |
Y |
以前にコミットした設定に設定をロールバックし、コミットします。 |
|
Y |
Y |
ターゲットデバイスで指定されたRPCを実行します。 |
|
Y |
Y |
Junos OS を実行している管理対象デバイスのホスト名を設定し、変更をコミットします。 |
|
Y |
Y |
Junos OS を実行しているデバイスを再起動またはシャットダウンします。 |
|
Y |
Y |
候補コンフィギュレーションの排他ロックを解除します。 |
|
Y |
Y |
デバイスを工場出荷時のデフォルト設定に復元します。 |
Junos 実行機能の使用方法
Salt 実行モジュールを使用すると、1 つ以上のミニオンでアドホック タスクを実行できます。Salt マスター コマンド ラインから実行関数を呼び出すには、次の構文を使用します。
salt options 'target' module.function arguments
どこ:
arguments- 必須またはオプションの関数引数。target- 関数を実行するミニオン。1 つのミニオンを指定したり、'*'を使用してすべてのミニオンをターゲットにしたり、ミニオンのグループをターゲットとする式を定義したり(たとえば、名前がrouterで始まるすべてのミニオンを含めるように'router*')できます。module- 実行する関数を含む Salt 実行モジュールの名前。function- 実行する関数の名前。
たとえば、すべてのミニオンへの接続をテストするには、 test モジュールの ping 関数を実行し、ターゲットに '*' を使用します。
saltuser@salt-master:~$ sudo salt '*' test.ping
router1:
True
router2:
True
Junos 実行関数を呼び出すには、 junos モジュールと目的の関数を指定します。たとえば、次のコマンドは、 cli 関数を呼び出して、ルーター 1 で show version 動作モード コマンドを実行します。
saltuser@salt-master:~$ sudo salt 'router1' junos.cli 'show version'
router1:
----------
message:
Hostname: router1
Model: mx104
Junos: 18.4R1.8
JUNOS Base OS boot [18.4R1.8]
JUNOS Base OS Software Suite [18.4R1.8]
JUNOS Crypto Software Suite [18.4R1.8]
JUNOS Packet Forwarding Engine Support (TRIO) [18.4R1.8]
JUNOS Web Management [18.4R1.8]
JUNOS Online Documentation [18.4R1.8]
JUNOS SDN Software Suite [18.4R1.8]
JUNOS Services Application Level Gateways [18.4R1.8]
JUNOS Services COS [18.4R1.8]
JUNOS Services Jflow Container package [18.4R1.8]
JUNOS Services Stateful Firewall [18.4R1.8]
JUNOS Services NAT [18.4R1.8]
JUNOS Services RPM [18.4R1.8]
JUNOS Services SOFTWIRE [18.4R1.8]
JUNOS Services Captive Portal and Content Delivery Container package [18.4R1.8]
JUNOS Macsec Software Suite [18.4R1.8]
JUNOS Services Crypto [18.4R1.8]
JUNOS Services IPSec [18.4R1.8]
JUNOS DP Crypto Software Software Suite [18.4R1.8]
JUNOS py-base-powerpc [18.4R1.8]
JUNOS py-extensions-powerpc [18.4R1.8]
JUNOS jsd [powerpc-18.4R1.8-jet-1]
JUNOS Kernel Software Suite [18.4R1.8]
JUNOS Routing Software Suite [18.4R1.8]
out:
True
Salt マスター コマンド ラインでコマンドを実行すると、Salt は CLI 入力を PyYAML を介して渡し、適切な Python データ タイプとしてロードされるようにします。場合によっては、整数を受け取る引数、または整数に解析される文字列値を受け取る引数は、正しく解析されない可能性があります。これらの引数には、次のいずれかの方法を使用して値を指定できます。
バックスラッシュ ( \ ) を使用して、文字列値を囲む引用符をエスケープします。
単一引用符を囲む場合は二重引用符を使用し、その逆も同様です。
--no-parse=param_nameオプションを含めます。
たとえば、次のコマンドは、指定された時間にデバイスを再起動するようにスケジュールします。
saltuser@salt-master:~$ sudo salt 'router1' junos.shutdown reboot=True at=\'16:10\' saltuser@salt-master:~$ sudo salt 'router1' junos.shutdown reboot=True "at='16:10'" saltuser@salt-master:~$ sudo salt 'router1' junos.shutdown reboot=True at="'16:10'" saltuser@salt-master:~$ sudo salt 'router1' junos.shutdown reboot=True at='16:10' --no-parse=at saltuser@salt-master:~$ sudo salt 'router1' junos.shutdown reboot=True at=\'+2\'
以下のコマンドは、指定されたスロットのルーティングエンジンの情報を要求します。
saltuser@salt-master:~$ sudo salt 'router1' junos.rpc get-route-engine-information slot=\'0\' saltuser@salt-master:~$ sudo salt 'router1' junos.rpc get-route-engine-information slot='0' --no-parse=slot
Junos State 関数の使用方法
Junos状態モジュール機能は、Salt状態ファイルから呼び出すことができます。構文は関数によって異なります。関数を使用する前に、モジュールのドキュメントで適切な構文を確認してください。
状態関数の多くは、次の一般的な構造を使用します。
State name:
module.function:
- param1: value1
- param2: value2
例えば、次のステート・ファイルでは、 junos.install_config 機能を使用して、指定されたテンプレートの構成をターゲット・デバイスに適用しています。
saltuser@salt-master:~$ cat /srv/salt/junos_bgp_config.sls
Apply BGP configuration:
junos.install_config:
- name: salt://configs/junos-config-bgp-template.set
- comment: Configuring BGP using Salt
- diffs_file: /var/log/salt/output/{{ grains['id'] }}_junos_bgp_config_diff
ただし、場合によっては、構造体の最初の行で関数の引数を指定できます。たとえば、 rpc 関数は、前の構文を使用するか、データ構造の最初の行として指定することで、RPC を提供できます。以下の状態ファイルは同等で、 rpc 関数を呼び出して ge-1/0/0 インターフェイスの情報を取得しますが、異なる方法を使用して RPC 引数を提供します。
saltuser@salt-master:~$ cat /srv/salt/junos-rpc.sls
Retrieve interface information:
junos.rpc:
- name: get-interface-information
- interface_name: ge-1/0/0
- terse: True
- dest: /tmp/interface.log
- format: text
saltuser@salt-master:~$ cat /srv/salt/junos-rpc2.sls
get-interface-information:
junos.rpc:
- interface_name: ge-1/0/0
- terse: True
- dest: /tmp/interface.log
- format: text
ターゲットデバイスに状態を適用すると、指定されたインターフェイスに対して get-interface-information RPCが実行され、結果が返されます。Salt は簡潔な出力を端末に表示し、その出力をテキスト形式でプロキシ ミニオン サーバの /tmp/interface.log ファイルに保存します。
saltuser@salt-master:~$ sudo salt 'router1' state.apply junos-rpc2
router1:
-
ID: get-interface-information
Function: junos.rpc
Result: True
Comment:
Started: 20:56:46.669149
Duration: 871.23 ms
Changes:
-
out:
True
rpc_reply:
Interface Admin Link Proto Local Remote
ge-0/0/0 up up
ge-0/0/0.0 up up inet 192.0.2.2/24
multiservice
Summary for router1
-
Succeeded: 1 (changed=1)
Failed: 0
-
Total states run: 1
Total run time: 871.230 ms