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 運用テーブルとビューを使用するを参照してください。