AnsibleとJunos PyEZテーブルを使用して、Junosデバイスから運用情報を取得する
概要 AnsibleプレイブックでJunos PyEZの表とビューを使用して、Junosデバイスから運用情報を取得します。
モジュールの概要
Junos PyEZ運用(op)テーブルは、複雑な運用コマンドの出力から情報を抽出するシンプルで効率的な方法を提供します。ジュニパーネットワークスは、Ansible Playbook 内から Junos PyEZ op テーブルを活用できる Ansible モジュールを提供します。 表 1 にモジュールの概要を示します。
コンテンツ セット |
モジュール名 |
---|---|
table
モジュールは、設定テーブルとビューの使用をサポートしていません。
Junos PyEZ テーブルについて
Junos PyEZ は、Junosデバイスの管理と自動化を可能にするPython用のマイクロフレームワークです。Junos PyEZでは、 テーブル と ビューと呼ばれるシンプルなYAML定義を使用して、Junosデバイスから運用コマンド出力と設定データを取得およびフィルタリングできます。
Junos PyEZの運用(op)テーブルは、運用コマンドまたはRPCの出力から情報を抽出します。Junos PyEZ jnpr.junos.op
モジュールには、いくつかの一般的なRPC向けに定義されたテーブルとビューの定義が含まれています。また、カスタムのテーブルとビューを作成することもできます。
Ansible を使用して Junos デバイスを管理する場合、 table
モジュールは Junos PyEZ テーブルを使用してデバイスからデータを取得できます。モジュールは、Junos PyEZディストリビューションに含まれる事前定義された運用テーブルとビューを参照するか、Ansible制御ノードにあるユーザー定義のテーブルとビューを参照できます。
Junos PyEZ のテーブルとビューに関する一般的な情報については、 Junos PyEZ 開発者ガイドの次のセクションと関連ドキュメントを参照してください。
Junos PyEZテーブルでジュニパーネットワークスのAnsibleモジュールを使用する方法
juniper.device.table
モジュールには、次の引数を含めて、使用するテーブルを指定できます。
-
file
—Junos PyEZテーブルとビューを定義するYAMLファイルのファイル名。 -
path
—(オプション)テーブルとビューの定義を含むYAMLファイルを含むディレクトリへのパス。デフォルトのファイル パスは、定義済みの Junos PyEZ op テーブルの場所で、 jnpr/junos/op ディレクトリの下の Junos PyEZ インストール パスにあります。 -
table
—(オプション)データの取得に使用されるテーブルの名前。このオプションは、ファイルに複数のテーブル定義が含まれている場合、またはファイル名に "Table" を含まない 1 つのテーブルがファイルに含まれている場合にのみ必要です。
たとえば、次のタスクは、playbook ディレクトリにある fpc.yaml ファイルで定義されている FPCTable
という名前のカスタムテーブルを使用してデータを取得します。
tasks: - name: Get FPC info juniper.device.table: file: "fpc.yaml" path: "{{ playbook_dir }}" table: "FPCTable"
モジュールの応答には、Table によって返される項目のリストを含む resource
キーが含まれます。各リスト項目は、ビューによって定義されたフィールド名と、対応する各フィールドのデータから抽出された値を含むディクショナリです。
Junos PyEZ ディストリビューションの arp.yml ファイルにある、次の定義済みのテーブルとビュー、ArpTable
と ArpView
を考えてみましょう。 ArpTable
は、show arp no-resolve
CLI コマンドと同等の <no-resolve/>
オプションを付けて、<get-arp-table-information>
RPC を実行します。対応するビューは、応答の各<arp-table-entry>
項目のMACアドレス、IPアドレス、およびインターフェイス名を抽出します。
--- ArpTable: rpc: get-arp-table-information args: no-resolve: true item: arp-table-entry key: mac-address view: ArpView ArpView: fields: mac_address: mac-address ip_address: ip-address interface_name: interface-name
次のAnsibleプレイブックは、ArpTable
を使用してJunosデバイスからアドレス解決プロトコル(ARP)情報を取得するtable
モジュールを実行します。ArpTable
は Junos PyEZ ディストリビューションに含まれており、定義済みの Junos PyEZ op テーブルのデフォルト ディレクトリに存在するため、path
モジュール引数でファイルの場所を指定する必要はありません。また、ArpTable
はファイルで定義されている唯一の Table であり、名前に "Table" が含まれているため、table
引数で Table を指定する必要はありません。
--- - name: Get ARP information hosts: dc1 connection: local gather_facts: no tasks: - name: Get ARP information using Junos PyEZ Table juniper.device.table: file: "arp.yml" register: result - name: Print response ansible.builtin.debug: var: result
簡潔にするために切り捨てられたプレイブックの出力には、デバイスによって返される各 <arp-table-entry>
項目の、ArpView で定義された対応するフィールドが含まれます。
PLAY [Get ARP information] **************************************************** TASK [Get ARP information using Junos PyEZ Table] ***************************** ok: [dc1a.example.net] TASK [Print response] ********************************************************* ok: [dc1a.example.net] => { "result": { "changed": false, "failed": false, "msg": "Successfully retrieved 2 items from ArpTable.", "resource": [ { "interface_name": "em0.0", "ip_address": "10.0.0.5", "mac_address": "02:01:00:00:00:05" }, { "interface_name": "fxp0.0", "ip_address": "198.51.100.10", "mac_address": "30:7c:5e:48:4b:40" } ] } }
次のAnsibleプレイブックは、事前定義されたJunos PyEZ運用テーブル( OspfInterfaceTable
)を利用して、Junosデバイス上のOSPFインターフェイスに関する情報を取得します。 ospf.yml ファイルでは複数のテーブルとビューが定義されているため、モジュール呼び出しには、使用するテーブルを指定する table
引数が含まれます。
--- - name: Get OSPF information hosts: dc1 connection: local gather_facts: no tasks: - name: Get OSPF interface information juniper.device.table: file: "ospf.yml" table: "OspfInterfaceTable" register: result - name: Print response ansible.builtin.debug: var: result
RPC 引数の指定
Junos PyEZ の運用テーブルには、そのテーブルで実行される RPC のデフォルトのコマンドオプションと引数を定義するオプションの args
キーがあります。アプリケーションは、ユーザーが既定値をオーバーライドしない限り、既定のオプションで RPC を実行します。Junos PyEZアプリケーションでは、 get()
メソッドを呼び出す際に、デフォルトのオプションを上書きしたり、追加のオプションや引数をRPCに渡すことができます。
juniper.device.table
モジュールでは、Table で定義されている既定のオプションをオーバーライドしたり、kwargs
引数を使用して追加のオプションと引数を RPC に渡したりすることもできます。kwargs
値は、コマンドのオプションと値のディクショナリであり、RPC と RPC が実行されるデバイスでサポートされている必要があります。
例えば、ethport.ymlファイル内の定義済みのJunos PyEZ opテーブルEthPortTable
は、media
コマンドオプションで<get-interface-information>
RPCを実行します。デフォルトでは、RPC は、インターフェイス名の指定された正規表現に一致するすべてのインターフェイスの情報を返します。
EthPortTable: rpc: get-interface-information args: media: true interface_name: '[afgxe][et]-*' args_key: interface_name item: physical-interface view: EthPortView
次のAnsibleプレイブックは、EthPortTable
を使用してJunosデバイス上のインターフェイスに関する情報を抽出します。kwargs
引数には interface_name: "ge-1/0/0"
が含まれており、これは interface_name
のEthPortTable
デフォルトを上書きし、ge-1/0/0 インターフェイスについてのみ要求されたフィールドを取得するようにモジュールに指示します。
--- - name: Get interface information hosts: dc1 connection: local gather_facts: no tasks: - name: Get interface information for Ethernet interfaces juniper.device.table: file: "ethport.yml" kwargs: interface_name: "ge-1/0/0" register: result - name: Print response ansible.builtin.debug: var: result
Junos PyEZ テーブルのデフォルトおよびユーザー指定のコマンド オプションと引数の詳細については、 Junos PyEZ 運用テーブルの定義 および 構造化出力を解析する Junos PyEZ 運用テーブルとビューを使用するを参照してください。