Salt を使用した Junos OS 設定の取得
ジュニパーネットワークスでは、Salt を使用した Junos OS が動作するデバイスの管理をサポートしており、Junos の実行および状態モジュール(Salt 用)は、管理対象デバイスから設定を取得できる機能を定義します。実行関数または salt.states.junos.rpc
状態関数を使用してsalt.modules.junos.rpc
RPCを実行し、get_config
Junos OSを実行しているデバイスから設定データを取得できます。
RPC を使用すると、候補の構成データベース、コミットされた構成データベース、または一時的な構成データベースから、 get_config
完全な構成または構成のサブセットを取得できます。継承前または継承後の構成のデータを返すことができます。さらに、いくつかの異なる形式でデータを返し、そのデータをプロキシミニオンサーバー上のファイルに保存できます。
完全な候補構成を取得する方法
Junos OS を実行しているデバイスから完全な候補コンフィギュレーションを取得するには、 関数を呼び出して junos.rpc
RPC を実行します get_config
。
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
構成データのソース データベースを指定する方法
既定では、RPC は get_config
候補の構成データベースから構成データを取得します。また、適切な値で パラメーターを含める 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
エフェメラル構成データベースのユーザー定義インスタンスからデータを取得するには、引数を に設定し、引数ephemeral
をdatabase
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
返す構成データのスコープを指定する方法
RPC は get_config
、完全な 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>'
次の状態ファイルは、<name>
継承後の候補構成の階層レベルで各<interfaces>
要素の要素<interface>
を取得します。
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
関数は、標準出力に表示されるデータと、宛先ファイルに保存されたデータ (指定されている場合) の両方について、XML 形式の RPC 出力を返します。出力形式を指定するには、引数を含めformat
、目的の形式と同じ値を設定します。テキスト形式または Junos XML 要素を要求するには、 または xml
をそれぞれ使用しますtext
。構成データを 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
継承とグループのオプションを指定する方法
RPC はget_config
、、、 、 <apply-groups>
<apply-groups-except>
、および <interface-range>
タグが<groups>
構成出力の個別の要素である継承前の構成からデータを取得します。ユーザー定義グループから継承されたステートメントと継承ステートメントの子として範囲を表示する継承後構成からデータを取得するには、引数を含めることができます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 を実行しているデバイスから設定データを取得し、後で参照できるように出力をファイルに保存するには、RPC を実行し get_config
、 パラメーターを含め 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