AnsibleをJunos PyEZテーブルと共に使用して、Junosデバイスから運用情報を取得
AnsibleプレイブックでJunos PyEZテーブルとビューを使用して、Junosデバイスから運用情報を取得します。
モジュールの概要
Junos PyEZの運用(op)テーブルは、複雑な運用コマンドの出力から情報を抽出するシンプルで効率的な方法を提供します。ジュニパーネットワークスは、Ansibleプレイブック内からJunos PyEZ演算テーブルを活用できるAnsibleモジュールを提供しています。 表1は 、このモジュールの概要を示しています。
|
コレクション |
モジュールセット |
モジュール名 |
|---|---|---|
|
|
tableモジュールは、設定テーブルとビューの使用をサポートしていません。
Junos PyEZテーブルについて
Junos PyEZ は、Junosデバイスの管理と自動化を可能にするPython用のマイクロフレームワークで、Junosデバイス。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開発者ガイド』の以下のセクションおよび関連ドキュメントを参照してください。
ジュニパーネットワークスのAnsibleモジュールとJunos PyEZテーブルを使用する方法
juniper.device.tableモジュールには、使用するJunos PyEZテーブルを指定するための以下の引数を含めることができます。
-
file—Junos PyEZテーブルとビューを定義するYAMLファイルのファイル名。 -
path—(オプション)テーブルとビューの定義を含むYAMLファイルを含むディレクトリへのパス。デフォルトのファイルパスは、定義済みのJunos PyEZ opテーブルの場所であり、 jnpr/junos/op ディレクトリの下のJunos PyEZインストールパスにあります。 -
table—(オプション)テーブルの名前。このオプションは、ファイルに複数の表定義が含まれている場合、または名前に「表」を使用しない単一の表定義がファイルに含まれている場合にのみ、指定する必要があります。
たとえば、次のタスクでは、playbook ディレクトリにある fpc.yaml ファイルで定義されている FPCTable という名前のカスタムテーブルを使用してデータを取得します。
tasks:
- name: Get FPC info
juniper.device.table:
file: "fpc.yaml"
path: "{{ playbook_dir }}"
table: "FPCTable"
juniper.device.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)情報を取得するjuniper.device.tableモジュールを実行します。Junos PyEZディストリビューションでは、デフォルトディレクトリに定義済みのopテーブルとしてArpTableが含まれています。したがって、モジュール引数にファイルの場所を指定するpathを含める必要はありません。また、table引数は、名前に「Table」が含まれArpTable、ファイル内で定義されている唯一の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 モジュールでは、テーブルで定義されている既定のオプションをオーバーライドしたり、kwargs 引数を使用して追加のオプションや引数を RPC に渡したりすることもできます。kwargs値は、コマンドオプションと値の辞書です。提供される引数は、RPC と RPC を実行するデバイスでサポートされている必要があります。
例えば、ethport.ymlファイル内の定義済みJunos PyEZ op Table 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を使用して管理対象デバイス上のインターフェイスに関する情報を抽出します。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テーブルのデフォルトおよびユーザー提供のコマンドオプションと引数の詳細については、次を参照してください。