他の言語でもお読みいただけます: 
 English, 
 日本語, 
 Español, 
 Français.
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.vlanscisco.ios.vlanscisco.nxos.vlanscisco.iosxr.vlansjunipernetworks.junos.vlansVLAN をネットワークデバイスで設定することは非常に一般的なタスクであり、設定ミスは頭痛の種で、ネットワーク障害の原因になります。また、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 つのリソースモジュールパラメーターのみが対象ですが、それ以外に 追加の演習 に説明があります。