他の言語でもお読みいただけます: 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 設定は複数のネットワークスイッチで同じになるため、自動化の優れたユースケースです。
この演習では、以下について説明します。
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 つのパラメーターがあります。
この演習では、これらのパラメーターの中の 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
に保存されました。
スクリーンショットを以下に示します。
完成した AnsiblePlaybook は、回答キーとしてここで提供されています。
ラボ演習 4 を完了しました
前述したように、この演習では 2 つのリソースモジュールパラメーターのみが対象ですが、それ以外に 追加の演習 に説明があります。