Exastro × Ansibleでやってみよう♪
ネットワーク機器の自動設定

はじめに
そもそも、なぜネットワーク機器の設定・管理がなかなか自動化されないのか？

ネットワーク機器が自動化されない理由
1. 操作対象OSが多い (Cisco, Juniper, Brocade...)2. 標準的な外部APIが確立されていない
3. 作業失敗時の影響が大きい
4. エンジニアのスキルが自動化から遠い
5. 自動化のアイディアが出づらい
6. 手作業でなんとかなる作業量
7. インフラ要員は人が減らされがち
なぜネットワーク運用自動化が進まないのか～とあるNW屋の泣き言～ より引用
https://www.slideshare.net/taijitsuchiya5/ss-47398248

ネットワーク機器が自動化されない理由
1. 操作対象OSが多い (Cisco, Juniper, Brocade...)2. 標準的な外部APIが確立されていない
3. 作業失敗時の影響が大きい
4. エンジニアのスキルが自動化から遠い
5. 自動化のアイディアが出づらい
Exastro
ITAとAnsibleモジュールを使って自動化してみます
6. 手作業でなんとかなる作業量
7. インフラ要員は人が減らされがち
なぜネットワーク運用自動化が進まないのか～とあるNW屋の泣き言～ より引用
https://www.slideshare.net/taijitsuchiya5/ss-47398248

Exastro IT Automationとは？

Exastro IT Automation：システム情報をデジタル管理するためのフレームワーク

Exastro6

Exastro IT Automation：システム情報をデジタル管理するためのフレームワーク

Exastro7

Exastro IT Automation 関連記事
• Exastro IT Automationをインストールしてみた（v1.6.0）• Exastro IT Automationを実際に動かしてみた(クイックスタート)• Exastro IT Automationのキホンの”キ”• Exastro IT Automation ver1.6.0のキホンの"キ“• Exastroコミュニティ (Github)なぜExastroか？

• ネットワーク機器は運用中に設定を切り替えたい• パラメータを少し変えて繰り返し設定するケースが多い• CMDB*を実現することが出来る*CMDB: Configuration Management DataBase 構成管理データベース

何がいいのか？
手順書と代入値を組み直すだけで新たな作業手順を作成できます。

手順書(IaC)

代入値(Nodeアドレス)

・・・

作業手順

192.168.xx.xx

初回サーバー設定

192.168.yy.yy

サーバー増設設定

ロードバランサー
Node追加デモシナリオあなたはWEB3層モデルで構築されたECサイトの管理者です運営も軌道に乗ってきたため、今回新しい機能となる売れ筋ランキング表示機能をつけようと思いました機能追加にあたりサーバーを増設することにしましたが、ネットワーク機器の設定変更が必要です・・・スクリプトを組んで個別設定していくことは可能ですが、今後も同じような作業出るかもしれない、そう考えて今回は思いましたを使って自動化してみようとサーバー増設前のネットワーク図

サーバー増設後のネットワーク図

作業環境Cisco IOS
(L3SW C3570E)
CentOS 7.8

Exastro IT Automation
1.6.0BIG-IP VM(Load Balancer)

Windows10
Ansible 2.10.4
FortiGate VM(Firewall)本日のウェビナーではCisco L3SWの自動設定について実際に操作しながらご説明します
BIG-IPとFortiGateについてはQiita記事をご覧ください

Exastro × Ansibleでやってみよう♪
ネットワーク機器の自動設定～Cisco L3SW編～

L3SW設定作業の流れ
1 物理インタフェースにVLAN ID作成
Gi0/3

L3SW

- 対象: Gi0/15, Gi0/16

2’

Vlan402 VLAN IDにIPv4アドレスを設定
172.16.10.10
192.168.10.1- 対象: Vlan11, Vlan212

192.168.20.1

192.168.21.1

192.168.12.1

2’ VLANルーティング設定(操作不要)

3 running-configをstartup-configへ保存

1Vlan10

Vlan20

Vlan21

Vlan11

Gi0/13

Gi0/14

Gi0/16

Gi0/15

Exastro ITAでの登録作業
機器の登録

オペレーションの作成
メニュー定義と具体値入力

対象となるL3SWの登録
2つの物理インタフェースにVLAN IDとIPアドレスを設定

オペレーションに必要な変数一覧と実行時に代入される具体値を設定

Playbookの登録作成したPlaybookを登録

Movementの登録登録したPlaybookを組み合わせてMovementを作成

代入値登録

2つのオペレーションに必要な代入値を登録

Cisco L3SWの登録機器の登録対象となるL3SWの登録

オペレーションの作成

3つの物理インタフェースにVLAN IDとIPアドレスを設定

メニュー定義の作成

オペレーションに必要な変数一覧（メニュー）を作成

Playbookの登録作成したPlaybookを登録

Movementの登録登録したPlaybookを組み合わせてMovementを作成

代入値登録

2つのオペレーションに必要な代入値を登録

2

1

3
4

NW

ciscoL3SW

10.197.19.172

ログインユーザー名を入力

ログインパスワードを入力

今回はパスワードログインを使用するため●を入力

パスワード認証Ansibleで使用するインベントリファイル情報を記載します。
ansible_connection: network_cli
ansible_network_os: cisco.ios.ios
ansible_become_pass: {{ ansible_ssh_pass}}

オペレーションの作成
機器の登録

オペレーションの作成
メニュー定義と具体値入力

対象となるL3SWの登録
2つの物理インタフェースにVLAN IDとIPアドレスを設定

オペレーションに必要な変数一覧と実行時に代入される具体値を設定

Playbookの登録作成したPlaybookを登録

Movementの登録登録したPlaybookを組み合わせてMovementを作成

代入値登録

2つのオペレーションに必要な代入値を登録

21

34

新機能WEBサーバー用
L3SW設定現在時刻を設定※
登録をクリック※Exastro ITA内部で保持するデータであり、実際にオペレーションを実施する時刻ではありません。

メニュー定義と具体値入力
機器の登録

オペレーションの作成
メニュー定義と具体値入力

対象となるL3SWの登録
2つの物理インタフェースにVLAN IDとIPアドレスを設定オペレーションに必要な変数一覧と実行時に代入される具体値を設定

Playbookの登録作成したPlaybookを登録

Movementの登録登録したPlaybookを組み合わせてMovementを作成

代入値登録

2つのオペレーションに必要な代入値を登録

パラメータ一覧となるメニュー定義の作成
2

1

メニュー定義の作成
オペレーションに必要な変数一覧（メニュー）を作成

変数名 (分かりやすいもの)
プルダウンから選択

文字の最大バイト数
正規表現で入力制限も可能新しい項目が追加

実行時に代入される具体値の設定

2

1

3

4

設定機器名

具体値を代入したいオペレーション

オペレーション実行時に代入する具体値

Playbookの登録
機器の登録

オペレーションの作成
メニュー定義と具体値入力

対象となるL3SWの登録
2つの物理インタフェースにVLAN IDとIPアドレスを設定

オペレーションに必要な変数一覧と実行時に代入される具体値を設定

Playbookの登録作成したPlaybookを登録

Movementの登録登録したPlaybookを組み合わせてMovementを作成

代入値登録

2つのオペレーションに必要な代入値を登録

2

1

3
4

登録したPlaybookの名称
ローカルからPlaybookを選択してアップロード

事前アップロードを忘れずにMovementの登録
機器の登録

オペレーションの作成
メニュー定義と具体値入力

対象となるL3SWの登録
2つの物理インタフェースにVLAN IDとIPアドレスを設定

オペレーションに必要な変数一覧と実行時に代入される具体値を設定

Playbookの登録作成したPlaybookを登録

Movementの登録登録したPlaybookを組み合わせてMovementを作成

代入値登録

2つのオペレーションに必要な代入値を登録

21

34

登録するMovement名称

今回はIPを選択

Playbookの先頭～tasksセクションまでの記載を編集可能。
デフォルトで以下が入力されている。
- hosts: all
remote_user: “{{ __loginuser__ }}”gather_facts: no
become: yes

MovementとPlaybookの紐付け

21

34

先ほど登録した
Movementを選択

先ほど登録した
Playbookを選択

Playbookを実行する
順序を入力インクルード順序とは？
MovementPlaybook素材

Cisco L3SW VLAN作成

Cisco VLAN ID作成

Cisco IPv4アドレス設定

12

実行順序を指定したい！

①で作成したVLAN IDを②で呼び出すため順序を指定して実行しなければならない
インクルード順序で指定

Movementの登録

インクルード順序を指定

これでMovementの登録とPlaybookとの紐付けが完了しましたPlaybookの確認
01_create_vlan.yml--# 物理インターフェースにVlan IDを設定- name: set Vlan ID to physical interface
ios_command:commands:- config terminal- vlan {{ VAR_vlan_id }}- interface {{ VAR_physical_intfc_name }}- switchport access vlan {{ VAR_vlan_id }}実行内容
01_create_vlan.yml--# 物理インターフェースにVlan IDを設定- name: set Vlan ID to physical interface
ios_command:commands:- config terminal

グローバルコンフィギュレーション
モードに移行VLANを作成し、VLANコンフィギュ
レーションモードに移行- vlan {{ VAR_vlan_id }}- interface {{ VAR_physical_intfc_name }}インターフェースコンフィギュレー
ションモードに移行- switchport access vlan {{ VAR_vlan_id }}物理インタフェースにVLANを割当

Ansibleモジュール
01_create_vlan.yml--# 物理インターフェースにVlan IDを設定- name: set Vlan ID to physical interface

ios_command:

Ansibleのios_commandモジュールを使用します。

commands:- config terminal- vlan {{ VAR_vlan_id }}- interface {{ VAR_physical_intfc_name }}- switchport access vlan {{ VAR_vlan_id }}commands以降の命令をターミナルに一行ずつ入力して実行するイメージです。

変数の刈り取り
01_create_vlan.yml--# 物理インターフェースにVlan IDを設定- name: set Vlan ID to physical interface
ios_command:commands:- config terminal- vlan {{ VAR_vlan_id }}Exastro ITAは、以下の条件を満たす文字列をPlaybook内の変数として認識・登録されます。
• 二重の波括弧で括られている• 文字列の先頭が『VAR_』- interface {{ VAR_physical_intfc_name }}- switchport access vlan {{ VAR_vlan_id }}代入値登録機器の登録

オペレーションの作成
メニュー定義と具体値入力

対象となるL3SWの登録
2つの物理インタフェースにVLAN IDとIPアドレスを設定

オペレーションに必要な変数一覧と実行時に代入される具体値を設定

Playbookの登録作成したPlaybookを登録

Movementの登録登録したPlaybookを組み合わせてMovementを作成

代入値登録

2つのオペレーションに必要な代入値を登録

ここまでの作業の整理
オペレーション

代入値自動登録設定

Movement

新機能APサーバー用
L3SW設定新APサーバー用
変数設定

VLAN作成Playbookと変数

メニュー定義1. create_vlan.yml

Vlan ID

VAR_vlan_id
VAR_physical_intfc_namePhysical Interface
2. set_ipv4addres.yml
新機能DBサーバー用
L3SW設定新DBサーバー用
変数設定

VAR_intfc_name
VAR_ipv4_address
VAR_subnetmask

Virtual Interface

Ipv4 addressconfigファイル保存

3. save_config.yml
VAR_save_when

Subnetmask

Save When1. オペレーション登録

オペレーション

代入値自動登録設定

Movement新機能APサーバー用
L3SW設定新APサーバー用
変数設定

VLAN作成Playbookと変数

メニュー定義1. create_vlan.yml

Vlan ID

VAR_vlan_id
VAR_physical_intfc_namePhysical Interface
2. set_ipv4addres.yml
新機能DBサーバー用
L3SW設定新DBサーバー用
変数設定

VAR_intfc_name
VAR_ipv4_address
VAR_subnetmask

Virtual Interface

Ipv4 addressconfigファイル保存

3. save_config.yml
VAR_save_when

Subnetmask

Save When2. 具体値登録

2. メニュー定義

オペレーション

代入値自動登録設定

Movement

新機能APサーバー用
L3SW設定新APサーバー用
変数設定

VLAN作成Playbookと変数

メニュー定義1. create_vlan.yml

Vlan ID

VAR_vlan_id
VAR_physical_intfc_namePhysical Interface
2. set_ipv4addres.yml
新機能DBサーバー用
L3SW設定新DBサーバー用
変数設定

VAR_intfc_name
VAR_ipv4_address
VAR_subnetmask

Virtual Interface

Ipv4 addressconfigファイル保存

3. save_config.yml
VAR_save_when

Subnetmask

Save When3. Playbookの登録

オペレーション

代入値自動登録設定

Movement

新機能APサーバー用
L3SW設定新APサーバー用
変数設定

VLAN作成Playbookと変数

メニュー定義1. create_vlan.yml

Vlan ID

VAR_vlan_id
VAR_physical_intfc_namePhysical Interface
2. set_ipv4addres.yml
新機能DBサーバー用
L3SW設定新DBサーバー用
変数設定

VAR_intfc_name
VAR_ipv4_address
VAR_subnetmask

Virtual Interface

Ipv4 addressconfigファイル保存

3. save_config.yml
VAR_save_when

Subnetmask

Save When4. Movementの登録

オペレーション

代入値自動登録設定

Movement

新機能APサーバー用
L3SW設定新APサーバー用
変数設定

VLAN作成Playbookと変数

メニュー定義1. create_vlan.yml

Vlan ID

VAR_vlan_id
VAR_physical_intfc_namePhysical Interface
2. set_ipv4addres.yml
新機能DBサーバー用
L3SW設定新DBサーバー用
変数設定

VAR_intfc_name
VAR_ipv4_address
VAR_subnetmask

Virtual Interface

Ipv4 addressconfigファイル保存

3. save_config.yml
VAR_save_when

Subnetmask

Save Whenデモシナリオにおける代入値一覧
Vlan ID

物理インタ
フェース

仮想インタフェース

IPアドレスサブネットマスク

新機能APサーバー用
L3SW設定11

Gi0/15

Vlan11

192.168.11.1

255.255.255.0

新機能DBサーバー用
L3SW設定21Gi0/16

Vlan21

192.168.21.1

255.255.255.0

オペレーション

21

3
4

作成したメニューを選択作成したメニューの項目を選択

代入値を紐付けたい
Movementを選択

登録方式を選択（ここではValue型）

Movementに紐付いた
Playbook内の変数を選択

Conductorを使って作成したオペレーションをまとめて実行してみましょう12

パレット操作

Conductor名称やRoleの設定登録したMovement一覧

実行したいMovementをドラッグ・アンド・ドロップ

ノード同士をドラッグ・アンド・ドロップで連結Movementタブ→Functionへ切り替え

Parallel branchで分岐作成
Parallel mergeで合流

Parallel branch

Parallel merge

1

2

3
作成したConductor選択

4
実行したいオペレーション選択

5

6

Conductorが表示されたことを確認

L3SWにログインして設定が変わっていることを確認しましょう物理インタフェースにVLAN IDが設定

VLAN IDにIPv4アドレスが設定

補足
L3SWやBIG-IP、FortiGateの設定は本番環境ではもっと複雑な設定が入力されています。
• 冗長構成• SSL等々今回の設定はウェビナー用に簡略化したものになっています。
『こんなときは？』といったご相談・ご質問があればアンケートの方へご記載下さい。

終わりに
BIG-IPとFortiGateの設定方法は以下のQiita記事をご覧ください。
Exastro × Ansibleでやってみよう♪ ネットワーク機器の自動設定 – Qiita
https://qiita.com/medius/items/b75bf8b3032ad25378c6

ご清聴ありがとうございました