Salt を使用して Junos OS を搭載したデバイスで運用コマンドを実行する
ジュニパーネットワークスは、Salt を使用して Junos OS を実行しているデバイスを管理するサポートを提供しており、Junos 実行および状態モジュール(Salt 用)は、管理対象デバイス上で運用および設定タスクを実行できる機能を定義します。 salt.modules.junos.cli 実行機能と salt.states.junos.cli ステート機能を使用すると、Junos OSを実行しているデバイス上で動作モードコマンドを実行して、操作を実行したり、情報を取得したりできます。
次のセクションでは、関数の使用方法、デバイス応答の解析方法、出力形式の指定方法、および出力のファイルへの保存方法について説明します。
junos.cli 関数の構文
salt.modules.junos.cli実行関数の構文は次のとおりです。
salt 'target' junos.cli 'command' dest=dest format=format
salt.states.junos.cli 状態関数では、次の構文がサポートされています。
command:
junos.cli:
- dest: dest
- format: format
id:
junos.cli:
- name: command
- dest: dest
- format: format
どこ:
command—Junos OSを実行しているデバイス上で実行する動作モード コマンド(例:show interfaces fxp0.0 terse)。dest—(オプション)コマンド出力が書き込まれるプロキシ ミニオン サーバ上の宛先ファイルのパス。ターゲット・デバイスで絶対パスを指定しない場合、パスは最上位のルート(/)ディレクトリに対する相対パスになります。format—(オプション)コマンド出力の形式。textまたはxmlを指定します。id- ステート宣言のユーザ定義識別子。
junos.cli実行関数でコマンドを実行する方法
salt.modules.junos.cli実行機能を使用すると、Junos OSを実行しているデバイスでCLIコマンドを実行できます。この関数には、実行するコマンドである引数が 1 つ必要です。操作が成功すると、コマンドはout: Trueを返し、messageキーにはコマンド出力が含まれます。
例えば、次のコマンドは、ターゲット・デバイス上で show system uptime 操作モード・コマンドを実行し、そのコマンド出力を標準出力で表示します。
saltuser@salt-master:~$ sudo salt 'router1' junos.cli 'show system uptime'
router1:
----------
message:
Current time: 2019-07-23 11:04:18 PDT
Time Source: NTP CLOCK
System booted: 2019-07-01 07:03:56 PDT (3w1d 04:00 ago)
Protocols started: 2019-07-01 07:07:27 PDT (3w1d 03:56 ago)
Last configured: 2019-07-18 16:16:33 PDT (4d 18:47 ago) by saltuser
11:04AM up 22 days, 4 hrs, 0 users, load averages: 0.02, 0.05, 0.06
out:
True
junos.cli 状態関数でコマンドを実行する方法
Salt ステート ファイル内で salt.states.junos.cli ステート関数を使用して、Junos OS を実行しているデバイス上で 1 つ以上の運用コマンドを実行できます。コマンドは、データ構造の最初の行として定義することも、関数の引数リスト内で定義することもできます。同じ状態ファイル内で同じコマンドを複数回実行する必要がある場合は、引数リスト内でコマンドを定義する必要があります。
次のステート・ファイルでは、 junos.cli ステート関数を使用してターゲット・デバイス上で2つのコマンドを実行し、各コマンドの出力を別々のファイルに保存します。この場合、 id グレインに格納されているプロキシ識別子は、状態が複数のターゲットに適用されるときに出力ファイルを区別するために、宛先ファイル名に含まれます。
saltuser@salt-master:~$ cat /srv/salt/junos_cli.sls
show system uptime:
junos.cli:
- dest: /var/log/salt/output/{{ grains['id'] }}_junos_system_uptime.txt
show version:
junos.cli:
- dest: /var/log/salt/output/{{ grains['id'] }}_junos_show_version.txt
状態を適用すると、Salt マスターはコマンド出力を標準出力に表示し、プロキシ ミニオン サーバ上の対応する宛先ファイルに出力を保存します。
saltuser@salt-master:~$ sudo salt 'router1' state.apply junos_cli
router1:
----------
ID: show system uptime
Function: junos.cli
Result: True
Comment:
Started: 21:18:12.130459
Duration: 911.207 ms
Changes:
----------
message:
Current time: 2019-07-26 14:18:12 PDT
Time Source: NTP CLOCK
System booted: 2019-07-01 07:03:56 PDT (3w4d 07:14 ago)
Protocols started: 2019-07-01 07:07:27 PDT (3w4d 07:10 ago)
Last configured: 2019-07-24 10:17:34 PDT (2d 04:00 ago) by saltuser
2:18PM up 25 days, 7:14, 1 user, load averages: 0.09, 0.06, 0.07
out:
True
----------
ID: show version
Function: junos.cli
Result: True
Comment:
Started: 21:18:13.041796
Duration: 968.359 ms
Changes:
----------
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
Summary for router1
------------
Succeeded: 2 (changed=2)
Failed: 0
------------
Total states run: 2
Total run time: 1.880 s
saltuser@minion:~$ ls /var/log/salt/output router1_junos_show_version.txt router1_junos_system_uptime.txt
状態が複数のターゲットに適用される場合、定義されたファイル名が意の参照されるため、この場合、Salt はプロキシ ミニオン サーバ上のターゲットごとに異なる出力ファイルを生成します。
saltuser@salt-master:~$ sudo salt '*' state.apply junos_cli
router1:
----------
ID: show system uptime
Function: junos.cli
...
router2:
----------
ID: show system uptime
Function: junos.cli
...
saltuser@minion:~$ ls /var/log/salt/output router1_junos_show_version.txt router1_junos_system_uptime.txt router2_junos_show_version.txt router2_junos_system_uptime.txt
状態ファイルでは、ファイル内で同じ状態識別子を複数回使用することはできません。したがって、たとえば、構成を変更する前と後など、状態ファイルで同じコマンドを複数回実行する場合は、関数の引数リストでコマンドを定義する必要があります。例えば:
Get OSPF neighbor information:
junos.cli:
- name: show ospf neighbor
- format: text
Install OSPF config :
junos.install_config:
- name: salt://configs/junos_ospf_config.conf
Get OSPF neighbor information after configuration changes:
junos.cli:
- name: show ospf neighbor
- format: text
コマンド出力をファイルに保存する方法
junos.cli 関数を実行するときに、dest 引数を含め、宛先ファイルのパスを指定することで、返されたデータをプロキシ ミニオン サーバー上のファイルに保存できます。絶対パスを指定しない場合、パスは最上位のルート (/) ディレクトリからの相対パスになります。ターゲット名の出力ファイルが既に存在する場合は、新しいファイルによって古いファイルが上書きされます。
dest 引数は、Salt コマンドの応答全体をファイルに保存しません。保存されるのは、message キーに含まれるコマンド出力のみです。
次のコマンドは、 show system uptime コマンドからの出力を表示し、プロキシ ミニオン サーバ上の指定されたファイルに保存します。
saltuser@salt-master:~$ sudo salt 'router1' junos.cli 'show system uptime' dest='/home/saltuser/cli_output.txt'
saltuser@minion:~$ ls cli_output.txt
コマンド出力の形式を指定する方法
デフォルトでは、 junos.cli 関数は、標準出力に表示されるデータと、宛先ファイルに保存されたデータ (指定されている場合) の両方について、コマンド出力をテキスト形式で返します。また、データを XML形式で返すこともできます。XML形式を指定するには、 format 引数を含め、値を xml に設定します。
次のコマンドは、 show system uptime コマンドを実行し、データを XML として返します。標準出力では、要素は各要素名を囲む従来の括弧なしで階層に表示されます。
saltuser@salt-master:~$ sudo salt 'router1' junos.cli 'show system uptime' format=xml dest=/home/saltuser/show-system-uptime.xml
router1:
----------
message:
----------
system-uptime-information:
----------
current-time:
----------
date-time:
2019-07-29 15:38:21 PDT
last-configured-time:
----------
date-time:
2019-07-24 10:17:34 PDT
time-length:
5d 05:20
user:
saltuser
protocols-started-time:
----------
date-time:
2019-07-01 07:07:27 PDT
time-length:
4w0d 08:30
system-booted-time:
----------
date-time:
2019-07-01 07:03:56 PDT
time-length:
4w0d 08:34
time-source:
NTP CLOCK
uptime-information:
----------
active-user-count:
1
date-time:
3:38PM
load-average-1:
0.04
load-average-15:
0.04
load-average-5:
0.05
up-time:
28 days, 8:34
out:
True
プロキシ ミニオン サーバ上の宛先ファイルの出力には、Junos OS CLI で show system uptime | display xml コマンドを実行した場合に出力されるものと同じ Junos XML タグが表示されます。
saltuser@minion:~$ cat /home/saltuser/show-system-uptime.xml <system-uptime-information><current-time><date-time seconds="1564439901">2019-07-29 15:38:21 PDT</date-time></current-time><time-source> NTP CLOCK </time-source><system-booted-time><date-time seconds="1561989836">2019-07-01 07:03:56 PDT</date-time><time-length seconds="2450065">4w0d 08:34</time-length></system-booted-time><protocols-started-time><date-time seconds="1561990047">2019-07-01 07:07:27 PDT</date-time><time-length seconds="2449854">4w0d 08:30</time-length></protocols-started-time><last-configured-time><date-time seconds="1563988654">2019-07-24 10:17:34 PDT</date-time><time-length seconds="451247">5d 05:20</time-length><user>saltuser</user></last-configured-time><uptime-information><date-time seconds="1564439902"> 3:38PM </date-time><up-time seconds="2450096"> 28 days, 8:34 </up-time><active-user-count format="1 user"> 1 </active-user-count><load-average-1> 0.04 </load-average-1><load-average-5> 0.05 </load-average-5><load-average-15> 0.04 </load-average-15></uptime-information></system-uptime-information>