Salt を使用して Junos OS の設定を取得する
ジュニパーネットワークスは、Salt を使用して Junos OS を実行しているデバイスを管理するサポートを提供しており、Junos 実行および状態モジュール(Salt 用)は、管理対象デバイスから構成を取得できる機能を定義します。 salt.modules.junos.rpc 実行関数または salt.states.junos.rpc ステート関数を使用して get_config RPC を実行し、Junos OS を実行しているデバイスから設定データを取得できます。
get_config RPCを使用して、候補、コミット済み、または一時的な設定データベースから、設定全体または設定のサブセットを取得できます。継承前または継承後の設定のデータを返すことができます。さらに、複数の異なる形式でデータを返し、プロキシ ミニオン サーバー上のファイルにデータを保存できます。
完全な候補コンフィギュレーションを取得する方法
Junos OS を実行しているデバイスから完全な候補コンフィギュレーションを取得するには、関数 junos.rpc を呼び出し、 get_config RPC を実行します。
saltuser@salt-master:~$ sudo salt 'router1' junos.rpc get_config
router1:
----------
out:
True
rpc_reply:
----------
configuration:
----------
apply-groups:
- global
- re0
- re1
...
同様に、設定を取得する Salt 状態ファイルを定義できます。次のサンプル状態ファイルでは、ターゲット・デバイスの完全な候補構成がテキスト形式で取得されます。
saltuser@salt-master:~$ cat /srv/salt/junos_get_config.sls
get_config:
junos.rpc:
- format: text
状態を適用すると、各ターゲット・デバイスの候補構成が表示されます。
saltuser@salt-master:~$ sudo salt 'router1' state.apply junos_get_config
router1:
----------
ID: get_config
Function: junos.rpc
Result: True
Comment:
Started: 20:15:20.409910
Duration: 973.546 ms
Changes:
----------
out:
True
rpc_reply:
## Last changed: 2019-08-06 11:38:21 PDT
version 18.4R1.8;
groups {
re0 {
system {
host-name router1;
}
...
Summary for router1
------------
Succeeded: 1 (changed=1)
Failed: 0
------------
Total states run: 1
Total run time: 973.546 ms
構成データのソース データベースを指定する方法
デフォルトでは、 get_config RPC は候補構成データベースから構成データを取得します。また、適切な値で database パラメーターを含めることで、コミットされた構成データベースまたは一時的な構成データベースからデータを取得することもできます。
コミットされた構成データベース
コミットされた設定データベースからデータを取得するには、 database 引数を committed に設定します。例えば:
saltuser@salt-master:~$ sudo salt 'router1' junos.rpc get_config database=committed
router1:
----------
out:
True
rpc_reply:
----------
configuration:
----------
apply-groups:
- global
- re0
- re1
...
一時的な構成データベース
また、Salt を使用して、このデータベースをサポートするデバイス上のエフェメラル構成データベースからデータを取得することもできます。共有設定データベースから設定データを取得する場合、デフォルトでは、結果には一時的な設定データベースからのデータは含まれません。
エフェメラル設定データベースのデフォルトインスタンスからデータを取得するには、 database 引数を ephemeral に設定します。
saltuser@salt-master:~$ sudo salt 'router1' junos.rpc get_config database=ephemeral
エフェメラル構成データベースのユーザー定義インスタンスからデータを取得するには、 database 引数を ephemeral に設定し、 ephemeral-instance 引数にエフェメラル インスタンスの名前を設定します。
saltuser@salt-master:~$ sudo salt 'router1' junos.rpc get_config database=ephemeral ephemeral-instance=eph1
router1:
-
out:
True
rpc_reply:
-
configuration:
-
protocols:
-
mpls:
-
label-switched-path:
-
name:
to-hastings
to:
192.0.2.1
返す構成データの有効範囲を指定する方法
get_config RPC は、完全な Junos OS 構成を取得するだけでなく、filter パラメーターを使用して構成のサブセットを取得できます。filter パラメーターは、返す構成ステートメントを選択するサブツリー フィルターを含む文字列を取ります。サブツリー フィルターは、選択条件に一致する構成データを返します。
複数の階層を要求するには、 filter 文字列に <configuration> ルート要素を含める必要があります。それ以外の場合、 filter の値は、ルート <configuration> 要素のすぐ下から、表示する階層までの設定階層のすべてのレベルを表す必要があります。サブツリーを選択するには、その階層レベルの空のタグを含めます。特定のオブジェクトを返すには、一致させる要素と値を定義するコンテンツ一致ノードを含めます。
次のコマンドは、候補コンフィギュレーションの [edit interfaces] および [edit protocols] 階層レベルのコンフィギュレーションを取得して出力します。
saltuser@salt-master:~$ sudo salt 'router1' junos.rpc get_config filter='<configuration><interfaces/><protocols/></configuration>'
以下のコマンドは、 [edit system services] 階層レベルの設定を取得して出力します。
saltuser@salt-master:~$ sudo salt 'router1' junos.rpc get_config filter='<system><services/></system>'
次の状態ファイルは、継承後の候補構成の<interfaces>階層レベルで、各<interface>要素の<name>要素を取得します。
saltuser@salt-master:~$ cat /srv/salt/junos_get_config_interface_names.sls
get_config:
junos.rpc:
- filter: <interfaces><interface><name/></interface></interfaces>
- inherit: inherit
状態を適用すると、インターフェイス名のリストが返されます。
saltuser@salt-master:~$ sudo salt 'router1' state.apply junos_get_config_interface_names
router1:
----------
ID: get_config
Function: junos.rpc
Result: True
Comment:
Started: 22:11:24.430639
Duration: 1522.123 ms
Changes:
----------
out:
True
rpc_reply:
----------
configuration:
----------
interfaces:
----------
interface:
|_
----------
name:
ge-1/0/0
|_
----------
name:
ge-1/0/2
|_
----------
name:
ge-1/0/3
|_
----------
name:
ge-1/0/4
|_
----------
name:
lo0
|_
----------
name:
fxp0
Summary for router1
------------
Succeeded: 1 (changed=1)
Failed: 0
------------
Total states run: 1
Total run time: 1.522 s
同様に、次の例では、ge-1/0/1インターフェイスのサブツリーを取得します。
saltuser@salt-master:~$ sudo salt 'router1' junos.rpc get_config filter='<interfaces><interface><name>ge-1/0/1</name></interface></interfaces>' format=text
router1:
----------
out:
True
rpc_reply:
## Last changed: 2019-08-06 14:58:44 PDT
interfaces {
ge-1/0/1 {
unit 0 {
family inet {
address 10.1.1.1;
}
}
}
}
返す構成データの形式を指定する方法
既定では、 junos.rpc 関数は、標準出力に表示されるデータと、宛先ファイルに保存されたデータ (指定されている場合) の両方について、RPC 出力をXML形式で返します。出力形式を指定するには、 format 引数を含め、目的の形式と等しい値を設定します。テキスト形式または Junos XML 要素を要求するには、それぞれ text または xml を使用します。設定データをJSON形式で保存先ファイルに保存するには、 jsonを指定します。
次のコマンドは、設定データを指定したファイルに保存し、テキスト形式で標準出力で表示します。
saltuser@salt-master:~$ sudo salt 'router1' junos.rpc get_config dest=/var/configs/router1_config.txt format=text
次のコマンドは、設定データを指定したファイルにJSON形式で保存します。
saltuser@salt-master:~$ sudo salt 'router1' junos.rpc get_config dest=/var/configs/router1_config.xml format=json
継承オプションとグループオプションを指定する方法
get_config RPCは、<groups>、<apply-groups>、<apply-groups-except>、および<interface-range>タグが設定出力の個別の要素である継承前の設定からデータを取得します。継承するステートメントの子としてユーザー定義のグループおよび範囲から継承されたステートメントを表示する継承後設定からデータを取得するには、inherit=inherit 引数を含めることができます。groups=groups 引数も含めると、テキストと XML 形式の出力は、ステートメントが継承されたグループを示します。
例えば、以下のコマンドは、継承後の候補コンフィギュレーションから [edit system services] 階層レベルのコンフィギュレーションを取得します。この場合、 [edit groups global system services] 階層レベルで設定されたステートメントもコンフィギュレーションに含まれると、それらのステートメントは継承後コンフィギュレーションの [edit system services] 階層レベルで継承され、コンフィギュレーション・データで返されます。
saltuser@salt-master:~$ sudo salt 'router1' junos.rpc get_config filter='<system><services/></system>' inherit=inherit groups=groups dest=/var/configs/router1-system-services.xml
コピー先ファイルでは、グループから継承される要素に group 属性が含まれます。 group 属性値は、要素が継承されたグループを示します。
<configuration changed-seconds="1565131770" changed-localtime="2019-08-06 15:49:30 PDT"><system><services>
<ftp group="global"></ftp>
<ssh group="global"></ssh>
<netconf group="global"><ssh group="global">
</ssh><traceoptions group="global"><file group="global"><filename group="global">netconf.log</filename><size group="global">10m</size><files group="global">2</files></file><flag group="global"><name group="global">all</name></flag></traceoptions></netconf>
</services></system></configuration>
取得した設定データをファイルに保存する方法
junos.rpc 関数を実行するときに、dest 引数を含め、宛先ファイルのパスを指定することで、返されたデータをプロキシ ミニオン サーバー上のファイルに保存できます。絶対パスを指定しない場合、パスは最上位のルート (/) ディレクトリからの相対パスになります。ターゲット出力ファイルが既に存在する場合は、新しいファイルによって古いファイルが上書きされます。
Junos OS を実行しているデバイスから設定データを取得し、後で参照できるように出力をファイルに保存するには、 get_config RPC を実行し、 dest パラメーターを含めます。次のコマンドは、完全な構成を取得し、標準出力にデータを表示し、プロキシ ミニオン サーバー上の指定されたファイルにデータを保存します。
saltuser@salt-master:~$ sudo salt 'router1' junos.rpc get_config dest=/var/configs/router1_config.xml
router1:
----------
out:
True
rpc_reply:
----------
configuration:
----------
apply-groups:
- global
- re0
- re1
...
プロキシ ミニオン サーバでは、設定データが指定されたファイルに保存されます。
saltuser@minion:~$ ls /var/configs router1_config.xml
同様に、設定データを取得してファイルに保存する Salt 状態を定義できます。次のサンプル状態ファイルは、完全な設定を取得し、標準出力とプロキシ ミニオン サーバ上の指定されたファイルの両方にデータを書き込みます。
saltuser@salt-master:~$ cat /srv/salt/junos_save_config.sls
get_config:
junos.rpc:
- dest: /var/configs/{{ grains['id'] }}_config.txt
- format: text
この場合、 id グレインに格納されているプロキシ識別子は、状態が複数のターゲットに適用されるときに出力ファイルを区別するために、宛先ファイル名に含まれます。 os_family:junos グレインに一致するデバイスに状態を適用すると、各デバイスの設定がプロキシ ミニオン サーバー上の独自のファイルに保存されます。
saltuser@salt-master:~$ sudo salt -G 'os_family:junos' state.apply junos_save_config
router1:
----------
ID: get_config
Function: junos.rpc
Result: True
Comment:
Started: 20:58:25.705709
Duration: 284.552 ms
Changes:
----------
out:
True
rpc_reply:
## Last changed: 2019-08-05 17:24:18 PDT
...
各デバイス設定は、プロキシ ミニオン サーバ上の個別のファイルに保存されます。
saltuser@minion:~$ ls /var/configs router1_config.txt router2_config.txt