Exercise 4 - Jinja2 template を使ったネットワーク設定

別の言語で読む: uk English, japan 日本語.

Table of Contents

Objective

ネットワーク構成をテンプレート化して機器に送ります。

Guide

Step 1

このステップでは Ansible の変数を作成して Playbook の中で利用します。この演習では以下のIPアドレスを rtr1 と rtr2 のループバックアドレスとして利用します:

Device Loopback100 IP
rtr1 192.168.100.1/32
rtr2 192.168.100.2/32

変数の情報は host_vars と group_vars に格納することができます。この演習のために group_vars という名前のディレクトリを作成します:

[student1@ansible network-workshop]$ mkdir ~/network-workshop/group_vars

そしてこのディレクトリ内に all.yml という名前のファイルを好きなエディタで作成してください。コントローラーノードでは vim か nano がインストールされています。

[student1@ansible network-workshop]$ nano group_vars/all.yml

インターフェースとIPアドレスの情報は Playbook から利用できるように、変数として上記のファイルに格納されている必要があります。上記のテーブル表を格納するためにシンプルな YAML の辞書データを作ることから始めます。トップレベルの変数(例えば nodes)を使用し、inventory_hostname に基づいて検索可能となるよう以下のように定義します:

nodes:
  rtr1:
    Loopback100: "192.168.100.1"
  rtr2:
    Loopback100: "192.168.100.2"

group_vars/all.yml ファイルに上記の YAML 辞書データを記入して保存します。

全てのデバイスはデフォルトで all グループの一部です。もし cisco グループを作成し、このグループにしか所属しないデバイスがあったとしても、この変数にはアクセスすることができます。

Step 2

template.j2 という名前のファイルを作成します:

[student1@ansible network-workshop]$ nano template.j2

以下を template.j2 ファイルに記述します:

{% for interface,ip in nodes[inventory_hostname].items() %}
interface {{interface}}
  ip address {{ip}} 255.255.255.255
{% endfor %}

ファイルを保存します。

Step 3

このステップでは新しく作成された template.j2 ファイルの各行について詳しく説明します。

{% for interface,ip in nodes[inventory_hostname].items() %}

変数 inventory_hostname は自動的に提供される magic variable です。

interface {{interface}}
  ip address {{ip}} 255.255.255.255

最終行:

{% endfor %}

Step 4

config.yml という Playbook を作成します:

[student1@ansible network-workshop]$ nano config.yml

以下を config.yml へと記述します:

---
- name: configure network devices
  hosts: rtr1,rtr2
  gather_facts: false
  tasks:
    - name: configure device with config
      cli_config:
        config: "{{ lookup('template', 'template.j2') }}"

Step 5

Playbook を実行します:

[student1@ansible network-workshop]$ ansible-playbook config.yml

出力は以下のようになるはずです。

[student1@ansible ~]$ ansible-playbook config.yml

PLAY [rtr1,rtr2] ********************************************************************************

TASK [configure device with config] ********************************************************************************
changed: [rtr1]
changed: [rtr2]

PLAY RECAP ********************************************************************************
rtr1                       : ok=1    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
rtr2                       : ok=1    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

Step 6

show ip int br コマンドを実行して、ネットワークデバイスに設定されたIPアドレスを確認します。

[student1@ansible network-workshop]$ ssh rtr1

rtr1#show ip int br | include Loopback100
Loopback100            192.168.100.1   YES manual up                    up

Takeaways

Solution

完成したPlaybookはここから参照できます: config.yml.

完成したJinja2 templateはここから参照できます: template.j2.


Complete

以上で exercise 4 は終了です。

Click here to return to the Ansible Network Automation Workshop