1. はじめに
こんなこととかそんなこと
というわけで、ansibleのcoreのnetwork moduleが充実したみたいです。
# 取り上げるの遅いですよね…
## さらには続編書くのもおそいorz
(いろいろ省略…前回記事等をごらんくださいませ)
使ったのは
- ios_config.py
でして、動作環境などは2016年3月時点の状況です。
2. 実行環境
items | version | notes |
---|---|---|
mac OSX | 10.10.x | 母艦OS |
Oracle Virtualbox | 5.0.16 r105871 | HV用途 |
CentOS | 7.2 | ansible machine |
ansible | 2.0.1.0 | ここからげっと |
Catalyst 3560E | IOS12.2 | 弄れるのがこれしかなかた |
3. Vlan addするサンプルコード
[cisco]
192.168.199.2
192.168.199.3
[cisco:vars]
ansible_ssh_user=operator
ansible_ssh_pass=operators_password
enable_pass=enable
---
- hosts: all
gather_facts: no
tasks:
- name: add vlan
local_action:
module: ios_config
authorize: yes
auth_pass: a
username: "{{ ansible_ssh_user }}"
password: "{{ ansible_ssh_pass }}"
host: "{{ inventory_hostname }}"
lines:
- description *** config by ansible ***
- switchport access vlan 3112
- switchport mode access
parents: ['interface GigabitEthernet 0/27']
replace: block
2台分のCisco機器のGi0/27にVlan 3112が設定されます。
4. playbook解説
-
基本的な組み立て
手でやるなら以下です。$ enable Password: # conf t #(config) int Gi 0/27 #(config-if) description *** config by ansible *** #(config-if) switchport access vlan 3112 #(config-if) switchport mode access
-
add vlan タスク
例によって
local_action module内で、cisco moduleを呼びます。
local_actionじゃなくとも、こちらの記事では別のやり方が紹介されています。
ここからも確認できる通り、connection: local がスマートなんだと思います!で、中身は以下の通り。
playbook_detaillocal_action: module: ios_config //使いたいモジュールを宣言 authorize: yes //特権モードに移行 auth_pass: "{{ enable_pass}}" //特権モードのパスワード username: "{{ ansible_ssh_user }}" //初回ログイン時ユーザ password: "{{ ansible_ssh_pass }}" //初回ログイン時ユーザのパスワード host: "{{ inventory_hostname }}" //ループ用 lines: //ここから設定コマンドに入ります - description *** config by ansible *** //description追加 - switchport access vlan 3112 //vlan3112を追加 - switchport mode access //tagしないので parents: ['interface GigabitEthernet 0/27'] //1階層上=I/Fを定義 replace: block //一種の誤り制御っぽい
特筆すべきは、parents: と replace:だと考えます。
parents: はlines: に並んだconfigを叩く階層を指示することができ、
今回はGi0/27にvlan 3112を足したいのでこのように書きました。だがしかし、どうもlinesのみを使って対話的な設定作業を想像しながら以下のように書いても問題なく動くようでした。
playbook_detail_othertasks: - name: add vlan (中略) lines: - interface Gi0/27 - description *** config by ansible *** - switchport access vlan 3112 - switchport mode access replace: block
あと一つ、replace: ですが、これはlines: に並んだ入力が誤っていた場合にプッシュしないなどの制御をするような説明がありました。これの有用性はまだ検証できていません。
5. 留意点(2016/6更新)
2016年6月現在、構成上の留意点は特になくなりました!
参考までに以前書いていたこと↓
- RedHat印のansibleでのみ動作可
- mac OSXのbrew installで入るversionにはNW関連のupdateが含まれない(version 1.9.4)
- yum installで入れるansibleにも同じくupdateが含まれない
- githubにはあるのでcloneしても可
6. あとがき
真のネットワーク屋さんたちはNETCONFで頑張っている感があります。
この辺はNetOpsCoding #3に幸運にも参加できることになったので
そこで情報収集したいと思います。
なぜAnsibleを頑張るかというと、オペレータ向けのオペレーションツールにおいて、
統一先候補として有力じゃないかと考えたためです。
システム運用に従事するオペレータの方々はなるだけオペ手段を統一した方が
ツール学習コストやら引き継ぎやらが楽だと考えます。
Ansibleがサーバで結構使えるということはみなさまご存知だと思いますが、
これがネットワーク機器へも適用可能だとなれば、オペはAnsibleでいいよね
というようにならんかな…という妄想がモチベーションなのです。
まだまだ道は遠いですけれども。