他の言語でもお読みいただけます: English, 日本語, Español.
If you are using an all Cisco workbench (all four routers are Cisco IOS routers) please switch to these directions.
Ansible ネットワークリソースモジュール のデモ使用
Ansible ネットワークリソースモジュールは、さまざまなネットワークデバイスの管理方法を簡素化し、標準化します。ネットワークデバイスは、ネットワークサービスに適用されるセクション (インターフェースや VLAN など) に設定を分割します。
ネットワークリソースモジュールは、異なるネットワークデバイス間で一貫したエクスペリエンスを提供します。つまり、複数のベンダーで同一のエクスペリエンスが得られます。たとえば、VLAN モジュールは、以下のモジュールで同じように動作します。
arista.eos.vlans
cisco.ios.vlans
cisco.nxos.vlans
cisco.iosxr.vlans
junipernetworks.junos.vlans
VLAN をネットワークデバイスで設定することは非常に一般的なタスクであり、設定ミスは頭痛の種で、ネットワーク障害の原因になります。また、VLAN 設定は複数のネットワークスイッチで同じになるため、自動化の優れたユースケースです。
この演習では、以下について説明します。
- Arista EOS での VLAN の設定
- arista.eos.vlans モジュール を使用した Ansible Playbook の構築
state: merged
の概要state: gathered
の概要
-
Arista スイッチにログインし、現在の VLAN 設定を確認します。
-
コントロールノードターミナルから、
ssh rtr2
に続いてenable
と入力します。$ ssh rtr2 Last login: Wed Sep 1 13:44:55 2021 from 44.192.105.112 rtr2>enable
-
show vlan
コマンドを使用して、VLAN 設定を検証します。rtr2#show vlan VLAN Name Status Ports ----- -------------------------------- --------- ------------------------------- 1 default active
-
show run | s vlan
を使用して、Arista デバイスの VLAN running-confgiuration を検証します。rtr2#show run | s vlan rtr2#
上記の出力では、デフォルトの VLAN 1(どのポートも割り当てられていない)以外の VLAN 設定はないことが分かります。
-
Visual Studio Code で
resource.yml
という名前の新規ファイルを作成します。 -
以下の Ansible Playbook を
resource.yml
にコピーします。--- - name: configure VLANs hosts: arista gather_facts: false tasks: - name: use vlans resource module arista.eos.vlans: state: merged config: - name: desktops vlan_id: 20 - name: servers vlan_id: 30 - name: printers vlan_id: 40 - name: DMZ vlan_id: 50
-
設定は、Visual Studio Code で以下のようになります。
-
まず、最初の 4 行を検証してみましょう。
--- - name: configure VLANs hosts: arista gather_facts: false
---
: これが Playbook を作成する YAML ファイルであることを指定します。name
: この Playbook が実行する内容の説明です。hosts: arista
: Playbook が Arista ネットワークデバイスでのみ実行されることを意味します。gather_facts: false
: このプレイのファクト収集を無効にします。デフォルトでは有効になっています。
-
後半には、
arista.eos.vlans
を使用するタスクが 1 つあります。tasks: - name: use vlans resource module arista.eos.vlans: state: merged config: - name: desktops vlan_id: 20 - name: servers vlan_id: 30 - name: printers vlan_id: 40 - name: DMZ vlan_id: 50
-
name:
- プレイと同様に、各タスクにはその特定のタスクの説明があります。 -
state: merged
- リソースモジュールのデフォルト動作です。これにより、提供された設定がネットワークデバイスに存在することを強制します。リソースモジュールには実際には 7 つのパラメーターがあります。- merged
- replaced
- overridden
- deleted
- rendered
- gathered
- parsed
この演習では、これらのパラメーターの中の 2 つのみについて説明しますが、それ以外に 追加の演習 に説明があります。
-
config:
- これは提供された VLAN 設定です。これはディクショナリーのリストです。最も重要なのは、モジュールがarista.eos.vlans
からjunipernetworks.junos.vlans
に変更されると、同じ動作になることです。これにより、ネットワークエンジニアは、ベンダー構文や実装よりもネットワーク(VLAN 設定など)にフォーカスできるようになります。
-
-
ansible-navigator run
を使用して Playbook を実行します。タスクは 1 つしかないため、--mode stdout
を使用できます。$ ansible-navigator run resource.yml --mode stdout
-
出力は以下のようになります。
$ ansible-navigator run resource.yml --mode stdout PLAY [configure VLANs] ********************************************************* TASK [use vlans resource module] *********************************************** changed: [rtr4] changed: [rtr2] PLAY RECAP ********************************************************************* rtr2 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 rtr4 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
-
Playbook を再実行すると、べき等性 の概念が示されます
$ ansible-navigator run resource.yml --mode stdout PLAY [configure VLANs] ********************************************************* TASK [use vlans resource module] *********************************************** ok: [rtr2] ok: [rtr4] PLAY RECAP ********************************************************************* rtr2 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 rtr4 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
-
出力で分かるように、すべてのものが
ok=1
を返し、変更が行われていないことを示します。
-
Arista スイッチにログインし、現在の VLAN 設定を確認します。
-
コントロールノードターミナルから、
ssh rtr2
に続いてenable
と入力します。$ ssh rtr2 Last login: Wed Sep 1 13:44:55 2021 from 44.192.105.112 rtr2>enable
-
show vlan
コマンドを使用して、VLAN 設定を検証します。rtr2#show vlan VLAN Name Status Ports ----- -------------------------------- --------- ------------------------------- 1 default active 20 desktops active 30 servers active 40 printers active 50 DMZ active
-
show run | s vlan
を使用して、Arista デバイスの VLAN running-confgiuration を検証します。rtr2#sh run | s vlan vlan 20 name desktops ! vlan 30 name servers ! vlan 40 name printers ! vlan 50 name DMZ
リソースモジュールは、指定された設定で Arista EOS ネットワークデバイスを設定したことが分かります。現在、合計 5 つの VLAN(デフォルトの VLAN 1 を含む)があります。
gathered.yml
という名前の新しい Playbook を作成します。
---
- name: configure VLANs
hosts: arista
gather_facts: false
tasks:
- name: use vlans resource module
arista.eos.vlans:
state: gathered
register: vlan_config
- name: copy vlan_config to file
copy:
content: "{{ vlan_config | to_nice_yaml }}"
dest: "{{ playbook_dir }}/{{ inventory_hostname }}_vlan.yml"
-
state: merged
がgathered
に切り替えられていることを除き、最初のタスクは同一です。設定で読み取っているので(ネットワークデバイスに適用する代わりに)、config
は必要ありません。register
を使用して、モジュールからの出力をvlan_config
という名前の変数に保存します -
2 つ目のタスクは、
vlan_config
変数をフラットファイルにコピーします。二重の中かっこは、これが変数であることを示します。 -
| to_nice_yaml
は フィルター で、JSON 出力(デフォルト)を YAML に変換します。 -
playbook_dir
およびinventory_hostname
は、マジック変数 とも呼ばれる特別な変数です。playbook_dir
は、Playbook を実行したディレクトリーを意味し、inventory_hostname
はインベントリー内のデバイスの名前です。つまり、2 つの Arista デバイスについて、ファイルは~/network-workshop/rtr2_vlan.yml
および~/network-workshop/rtr4_vlan.yml
として保存されます。
-
ansible-navigator run
を使用して Playbook を実行します。$ ansible-navigator run gathered.yml --mode stdout
-
出力は以下のようになります。
$ ansible-navigator run gathered.yml --mode stdout PLAY [configure VLANs] ********************************************************* TASK [use vlans resource module] *********************************************** ok: [rtr4] ok: [rtr2] TASK [copy vlan_config to file] ************************************************ changed: [rtr2] changed: [rtr4] PLAY RECAP ********************************************************************* rtr2 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 rtr4 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
-
Arista ネットワークデバイスから VLAN 設定を
収集した
新規作成ファイルを開きます。 -
2 つの Arista デバイスについて、2 つのファイルが
~/network-workshop/rtr2_vlan.yml
および~/network-workshop/rtr4_vlan.yml
に保存されました。 -
スクリーンショットを以下に示します。
- リソースモジュールは、ネットワークデバイス構文に変換できる単純なデータ構造を持ちます。この場合、VLAN ディクショナリーは Arista EOS ネットワークデバイス構文に変換されます。
- リソースモジュールはべき等で、デバイスの状態を確認するように設定できます。
- リソースモジュールは双方向です。つまり、リソースモジュールはその特定のリソースのファクトを収集すると共に、設定を適用することができます。リソースモジュールを使用してネットワークデバイスを設定していない場合でも、リソースの状態をチェックする価値がたくさんあります。
- また、双方向の動作により、ブラウンフィールドネットワーク(既存のネットワーク)は、running-configuration を構造化データに迅速に変換することもできます。これにより、ネットワークエンジニアは自動化をより迅速に運用に移行し、すばやく成功させることができます。
完成した AnsiblePlaybook は、回答キーとしてここで提供されています。
ラボ演習 4 を完了しました
前述したように、この演習では 2 つのリソースモジュールパラメーターのみが対象ですが、それ以外に 追加の演習 に説明があります。
Click here to return to the Ansible Network Automation Workshop