EVE-NGでAnsibleを触ってみるための環境構築メモ。
手順
- VMWare Playerで仮想マシンのNIC追加
- Ubuntu VMを立てる
- Ansible 入れる
- Playbook試す
VMWare Playerで仮想マシンのNIC追加
シミュレータ上でUbuntuをたて, apt-getでAnsibleをインストールするために外部接続用のNICを追加する。
ブリッジタイプのvNICを追加 |
外部ネットワークとの接続設定の確認。
eth1はCloud1に, eth2はCloud2というようにブリッジの設定が入っている。
# Cloud devices
iface eth1 inet manual
auto pnet1
iface pnet1 inet manual
bridge_ports eth1
bridge_stp off
iface eth2 inet manual
auto pnet2
iface pnet2 inet manual
bridge_ports eth2
bridge_stp off
今回はeth1が外部接続用のネットワークとなる。
簡単な構成イメージ |
Ubuntu VMを立てる
ubuntuイメージは以下からダウンロードする。
linux_image_for_eve_pro
ちなみにバージョンは16.04.4。
その後はオフィシャルにある通りのやり方でイメージを登録する。
# cp ./virtioa.qcow2 /opt/unetlab/addons/qemu/linux-ubuntu-srv-16.04.4-webmin/
# /opt/unetlab/wrappers/unl_wrapper -a fixpermissions
これでVMを登録できる。
Linuxが選択できるようになる |
追加したubuntuのイメージで起動 今回はNICは2つ |
Cloud1とUbuntuを接続してInternetにつながるか確認。
テスト環境はこんな感じ 「To Internet」とあるのがCloud1 |
Ansibleインストール
UbuntuにログインしてアップデートからのAnsibleインストール。
オフィシャルドキュメントに従っていけばOK。
ただし, このイメージだとwebminのリポジトリがリンク切れ?なのかエラーになるので, これをコメントアウトする。
# vi /etc/apt/sources.list
# deb http://download.webmin.com/download/repository sarge contrib
Ansibleインストール。
# apt-get update
# apt-get install software-properties-common
# apt-add-repository ppa:ansible/ansible
# apt-get update
# apt-get install ansible
完了。
Playbookお試し
ルータ4台構成し, バナーメッセージを変更するPlaybookを作成して試行する。
事前準備として, ルータにはIPアドレス設定とSSH設定までは行っておく必要がある。(AnsibleはSSH接続前提のため)
まず最初に /etc/ansible/hosts の設定をする。ここに管理対象となる機器のIPアドレス(ないしはホスト名)を記述する。今回は簡単にルータのIPアドレスを記述し, それらをCiscoというグループでまとめる。
# vi /etc/ansible/hosts
[Cisco]
10.10.10.2
10.10.10.3
10.10.10.4
10.10.10.5
[Cisco:vars] # Ciscoグループ共通のパラメータ設定
ansible_connection=network_cli # ネットワーク機器なので network_cli を指定する
ansible_network_os=ios # Ciscoのiosを指定する
ansible_user=cisco # SSHのログインユーザ名
ansible_ssh_pass=cisco # SSHのログインパスワード(本番環境では非推奨)
ansible_become=yes # 特権モードになるか
ansible_become_method=enable # Ciscoなのでenable
ansible_become_pass=cisco # enable パスワード
Playbook準備。
# vi ~/playbook/ios.yml
- hosts: Cisco # Ciscoグループ対象
gather_facts: no # 機器情報取得しない
tasks: # タスクを登録
- name: insert banner # 1つ目。バナー入れるタスク
ios_banner: # ios_banner というモジュールを利用
banner: motd # motd を対象
text: | # バナーメッセージ登録
You are logged in on $(hostname)
state: present # 登録。absent ならバナー削除
- name: save running to startup when modified # 設定保存するタスク
ios_config: # iso_config というモジュール利用
save_when: modified # 変更されていれば保存実行
実行結果。
# ansible-playbook ios.yml
root@ubuntu:~/playbook# ansible-playbook ./ios.yml
PLAY [Cisco] *********************************************************************************************************************************************************
TASK [insert banner] *************************************************************************************************************************************************
changed: [10.10.10.5]
changed: [10.10.10.4]
changed: [10.10.10.3]
changed: [10.10.10.2]
TASK [save running to startup when modified] *************************************************************************************************************************
changed: [10.10.10.2]
changed: [10.10.10.4]
changed: [10.10.10.3]
changed: [10.10.10.5]
PLAY RECAP ***********************************************************************************************************************************************************
10.10.10.2 : ok=2 changed=2 unreachable=0 failed=0
10.10.10.3 : ok=2 changed=2 unreachable=0 failed=0
10.10.10.4 : ok=2 changed=2 unreachable=0 failed=0
10.10.10.5 : ok=2 changed=2 unreachable=0 failed=0
すっごい簡単。
ログインしてみると・・・。
ちゃんと変わっている |
Ansibleは冪等性といわれる「何度やっても同じ結果が得られる」というコンセプトのもと開発されているので, このPlaybookを2回目やってみると,
root@ubuntu:~/playbook# ansible-playbook ./ios.yml
PLAY [Cisco] *********************************************************************************************************************************************************
TASK [insert banner] *************************************************************************************************************************************************
ok: [10.10.10.3]
ok: [10.10.10.5]
ok: [10.10.10.4]
ok: [10.10.10.2]
TASK [save running to startup when modified] *************************************************************************************************************************
ok: [10.10.10.3]
ok: [10.10.10.4]
ok: [10.10.10.2]
ok: [10.10.10.5]
PLAY RECAP ***********************************************************************************************************************************************************
10.10.10.2 : ok=2 changed=0 unreachable=0 failed=0
10.10.10.3 : ok=2 changed=0 unreachable=0 failed=0
10.10.10.4 : ok=2 changed=0 unreachable=0 failed=0
10.10.10.5 : ok=2 changed=0 unreachable=0 failed=0
このように, 「changed=0」と変更したものは無いよ, という結果になる。スバラシイ。マクロよりも全然よいと思われる。
まだ手を付け始めたばかりのため理解及んでいませんが, これはすごい楽しい未来がやってくる気がする。なので, これからどんどん試していく。
なお, ネットワーク機器においてのAnsibleはこちらのスライドが超絶わかりやすいのでオススメです。