Ansible を Junos PyEZ テーブルと共に使用して、Junos デバイスから運用情報を取得
モジュールの概要
Junos PyEZ運用(op)テーブルは、複雑な運用コマンド出力から情報を抽出するためのシンプルで効率的な方法を提供します。ジュニパーネットワークスは、Ansibleプレイブック内からJunos PyEZ op Tablesを活用できるAnsibleモジュールを提供しています。 表 1 に、モジュールの概要を示します。
コンテンツセット |
モジュール名 |
---|---|
リリース 2.0.0 以降 Juniper.junos
、 juniper_junos_table
モジュールはモジュールの機能を置き換えます junos_get_table
。
モジュールは、構成テーブルとビューでは機能しません。
Junos PyEZテーブルについて
Junos PyEZ は、Junosデバイスの管理と自動化を可能にするPython用マイクロフレームワークです。Junos PyEZでは、 テーブル と ビューと呼ばれるシンプルなYAML定義を使用して、Junosデバイスから運用コマンドの出力と設定データを取得およびフィルタリングできます。
Junos PyEZ運用(op)テーブルは、運用コマンドまたはRPCの出力から情報を抽出します。Junos PyEZ jnpr.junos.op
モジュールには、いくつかの一般的なRPC用に定義済みのテーブルとビューの定義が含まれています。カスタムのテーブルとビューを作成することもできます。
Ansible を使用して Junos デバイスを管理する場合、 table
および juniper_junos_table
モジュールは Junos PyEZ テーブルを使用してデバイスからデータを取得できます。モジュールは、Junos PyEZディストリビューションに含まれている定義済みの運用テーブルとビューを参照することも、Ansible制御ノードに存在するユーザー定義のテーブルとビューを参照することもできます。
Junos PyEZのテーブルとビューに関する一般的な情報については、 Junos PyEZ開発者ガイドの以下のセクションおよび関連ドキュメントを参照してください。
Junos PyEZテーブルでジュニパーネットワークスのAnsibleモジュールを使用する方法
モジュールjuniper_junos_table
にはtable
、使用するテーブルを指定する次の引数を含めることができます。
-
file
—Junos PyEZテーブルとビューを定義するYAMLファイルのファイル名。 -
path
—(オプション)テーブルとビューの定義を含むYAMLファイルを含むディレクトリへのパス。デフォルトのファイルパスは、 jnpr/junos/op ディレクトリの下のJunos PyEZインストールパスに存在する、定義済みのJunos PyEZオペレーションテーブルの場所です。 -
table
- (オプション) データの取得に使用されるテーブルの名前。このオプションは、ファイルに複数のテーブル定義が含まれている場合、またはファイルの名前に "Table" を含まない単一のテーブルがファイルに含まれている場合にのみ必要です。
たとえば、次のタスクは、Playbook ディレクトリにある fpc.yaml ファイルで定義されている という名前のカスタム テーブルFPCTable
を使用してデータを取得します。
tasks: - name: Get FPC info juniper.device.table: file: "fpc.yaml" path: "{{ playbook_dir }}" table: "FPCTable"
モジュールの応答には、Table によって返される項目の一覧を含むキーが含まれます resource
。各リスト項目は、View で定義されたフィールド名と、対応する各フィールドのデータから抽出された値を含むディクショナリです。
Junos PyEZ ディストリビューションの arp.yml ファイル内の、次の定義済みのテーブルとビューArpTable
、および ArpView
について考えてみます。 ArpTable
は、CLI コマンドとshow arp no-resolve
同等の オプションを使用して <no-resolve/>
RPC を実行します。<get-arp-table-information>
対応するビューは、応答内の各<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プレイブックは table
、 ArpTable
Junosデバイスからアドレス解決プロトコル(ARP)情報を取得するために使用するモジュールを実行します。はJunos PyEZディストリビューションに含まれており、定義済みのJunos PyEZオペレーションテーブルのデフォルトディレクトリに存在するため ArpTable
、 path
ファイルの場所を指定するためにモジュール引数を指定する必要はありません。また、 はファイルで定義されている唯一のテーブルであり、名前に "Table" が含まれているため ArpTable
、引数で 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 debug: var: result
簡潔にするために切り捨てられているプレイブックの出力には、デバイスによって返される各 <arp-table-entry>
項目について、ビューで定義されている対応するフィールドが含まれています。
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 debug: var: result
RPC 引数の指定
Junos PyEZ運用テーブルには、そのテーブルで実行されるRPCのデフォルトのコマンドオプションと引数を定義するオプションの args
キーがあります。アプリケーションは、ユーザーが既定値をオーバーライドしない限り、既定のオプションを使用して RPC を実行します。Junos PyEZアプリケーションでは、メソッドを呼び出す get()
際に、デフォルトのコマンドオプションを上書きしたり、追加のオプションや引数をRPCに渡すことができます。
また、 table
および juniper_junos_table
モジュールを使用すると、Table で定義されている既定のコマンド オプションをオーバーライドしたり、引数を使用して追加のオプションと引数を kwargs
RPC に渡したりすることもできます。 kwargs
値はコマンド オプションと値のディクショナリであり、RPC と RPC が実行されるデバイスでサポートされている必要があります。
例えば、ethport.ymlファイル内の定義済みのJunos PyEZ op TableEthPortTable
は、<get-interface-information>
コマンドオプションを使用してmedia
RPCを実行し、インターフェイス名に指定された正規表現に一致するすべてのインターフェイスの情報を返します。
EthPortTable: rpc: get-interface-information args: media: True interface_name: '[afgxe][et]-*' args_key: interface_name item: physical-interface view: EthPortView
次のAnsibleプレイブックは、Junosデバイス上のインターフェイスに関する情報を抽出するために使用しますEthPortTable
。引数には 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 debug: var: result
Junos PyEZ テーブルにおけるデフォルトおよびユーザー指定のコマンド オプションと引数の詳細については、 Junos PyEZ 操作テーブルの定義 および Junos PyEZ 操作テーブルと操作ビューの使用を参照してください。
変更履歴テーブル
機能のサポートは、使用しているプラットフォームとリリースによって決まります。 機能エクスプローラー を使用して、機能がプラットフォームでサポートされているかどうかを判断します。
Juniper.junos
、
juniper_junos_table
モジュールはモジュールの機能を置き換えます
junos_get_table
。