スマホのセンサーで ネットワークを操る ~ ANSIBLE TOWER によるレガシー NW 機器の API 化~ 2016/10/27 NetOpsCoding#4 株式会社 エーピーコミュニケーションズ 横地 晃 1
スマホのセンサーでネットワークを操る~A N S I BL E TOWERによるレガシーN W機器のAPI化~
2016/10/27 NetOpsCoding#4
株式会社エーピーコミュニケーションズ横地 晃
1
内容
1. はじめに・経緯
2. Ansible / Ansible Towerについて
3. 作ったもの・デモ
4. 仕組み
5. 感想・まとめ
2
本資料は Ansible 2.1、Ansible Tower 3.0.2 を前提としています。
@akira6592
3
1. はじめに・経緯
1.1. はじめに
APIに対応していない
あのルーター、あのスイッチが、
もしAPI対応したら、
どんなことをしたいですか?
4
ネットワーク機器
API
1.2. 今回の取り組みの経緯
新しいネットワーク機器の中にはAPIに対応いるものがあって、自動化フレンドリーでよいなぁ。
Cisco1812JやCatalyst 3750 のような古い機器でもAPI化できたらよいのに。
5
1.2. 今回の取り組みの経緯
そういえば、Ansibleにネットワーク機器に対応したモジュールがあるな。それに、Ansible TowerはREST APIに対応している。
ということは、API化できるのでは?
6
7
2. Ansible / Ansible Towerについて
2.1. Ansible のネットワーク対応
◦ AnsibleはChefやPuppetとよく比較される構成管理ツール
◦ サーバーだけでなく、ネットワーク機器に対応したモジュールもある◦ 対応モジュール例:IOS、NX-OS、JUNOS、VyOS、F5、NETCONFなど
8ネットワークモジュール一覧
http://docs.ansible.com/ansible/list_of_network_modules.html
〇操作可能
Ansible ネットワーク機器
2.2. Ansible Towerとは
◦ Ansible の Web GUI、CLI(tower-cli)ツール
◦ Red Hat社のプロプライエタリ・ソフトウェア
◦ OSS化予定あり
◦ REST API対応
9
Software Design 2016年8月号から抜粋画面イメージ
2.3. REST APIでできること
◦ Job Template(Playbook + αの定義)の実行、確認、追加◦ 例:Job Template ID 「12」を実行する
◦ POST https://{Tower_IP_ADDRESS}/api/v1/job_templates/12/launch/
◦ Job実行時の標準出力の確認
◦ インベントリやスケジュールの確認、追加
◦ など
エンドポイント一覧◦ http://{Towe_IP_ADDRESS}/api/ をブラウザから見るのが便利
10公式ドキュメント Ansible Tower API Guide v3.0.2
https://docs.ansible.com/ansible-tower/latest/html/towerapi/
2.4. API認証方法
11
{"token": "8f17825cf08a7efea124f2638f3896f6637f8745","expires": "2016-11-05T21:46:35.729Z"
}
公式ドキュメント Auth Token API Endpoint
http://docs.ansible.com/ansible-tower/latest/html/towerapi/auth_token.html
API
(1) トークン発行リクエスト
https://{Tower_IP_ADDRESS}/api/v1/authtoken/Content-Type: application/json
{"username": "user", "password": "my pass"}
(2) トークン発行APIを叩きたいホスト
(3) トークン付きAPIリクエスト
https://{Tower_IP_ADDRESS}/api/v1/~~
Authorization: Token 8f17825cf08a7efea124f2638f3896f6637f8745
発行されたトークンを以降のAPIリクエストヘッダの「Authorization」に指定する
LT時スキップ
2.5. API認証(補足)
トークンの有効期限◦ デフォルトは1800秒(30分)
◦ /etc/tower/conf.d/session.py の「AUTH_TOKEN_EXPIRATION」で変更
トークンの有効範囲◦ 同一送信元IPアドレスのみ有効
◦ APIリクエスト元ごとにトークンの発行が必要
12公式ドキュメント Working with Session Limits
http://docs.ansible.com/ansible-tower/latest/html/administration/session_limits.html
トークンA発行
トークンB発行
期限は30分
個別にトークンを発行
ホストAユーザ1
ホストBユーザ1
LT時スキップ
13
3. 作ったもの・デモ
3. 作ったもの
(1) スマホを振ると(2) 振った方向に経路が変わる
(略)後述 ネットワーク
14
3.1. デモ
15
実際に試しますのでご覧ください
(後日追加)デモ動画URL
https://www.youtube.com/watch?v=iK8gVdYjv0M
3.1. デモ(説明用1/3)
通常時は左経路
16
[vagrant@ansible-tower ~]$ traceroute 10.0.0.100traceroute to 10.0.0.100 (10.0.0.100), 30 hops max, 60 byte packets1 192.168.1.254 (192.168.1.254) 2.947 ms 2.874 ms 2.852 ms2 10.0.101.1 (10.0.101.1) 2.998 ms 8.681 ms 8.671 ms3 10.0.102.1 (10.0.102.1) 5.353 ms 5.346 ms 5.339 ms4 10.0.0.100 (10.0.0.100) 8.623 ms * *
【事前コンフィグ抜粋】
interface FastEthernet0ip address 10.0.101.254 255.255.255.0ip ospf cost 10 ★通常時はコスト10
192.168.1.254
10.0.101.1
10.0.102.1
10.0.0.100
10.0.201.1
10.0.202.1
LT時スキップ
3.1. デモ(説明用2/3)
17
右に振る
Ansible Tower上で右に経路変更するJOB(Playbook)が実行される
LT時スキップ
3.1. デモ(説明用3/3)
右の経路に変更される
18
[vagrant@ansible-tower ~]$ traceroute 10.0.0.100traceroute to 10.0.0.100 (10.0.0.100), 30 hops max, 60 byte packets1 192.168.1.254 (192.168.1.254) 1.850 ms 1.776 ms 3.553 ms2 10.0.201.1 (10.0.201.1) 3.539 ms 3.525 ms 6.917 ms3 10.0.202.1 (10.0.202.1) 6.886 ms 6.880 ms 6.812 ms4 10.0.0.100 (10.0.0.100) 10.049 ms * *
【事後コンフィグ抜粋】
interface FastEthernet0ip address 10.0.101.254 255.255.255.0ip ospf cost 9999 ★コスト9999になった
192.168.1.254
10.0.0.100
10.0.101.1
10.0.102.1
10.0.201.1
10.0.202.1
LT時スキップ
3.2. 仕組み(全体)
①スマホを振る ②スマホの加速度センサーが反応してサーバーに指示
③Ansible TowerのAPIが呼ばれ、 Playbookが実行される
⑥Tracerouteの変化が表示される
⑤Traceroute結果に変化が起こると、結果をクライアントに送られる
④ルーターのOSPFのコストが変更され、経路が変わる
【C】Traceroute表示部
【A】スマホ連携部
※Playbook:機器への操作を記述するYAML形式のファイル。今回はルーターのインターフェースのOSPFコスト変更コマンドを記述。
【B】Ansible実行部
API
19
LT時スキップ
3.3. 仕組み【A】スマホ連携部
①スマホを振る②-1 加速度センサーが反応してサーバーに指
示
【A】スマホ連携部
L or R
②-2 パラメータに応じてAnsible REST APIを呼び出す
・スマホに搭載されている加速度センサーをブラウザからJavaScript経由で利用(DeviceMotionEvent)
・振った方向に応じたパラメータがサーバーに送られる- 左に振ると「L」- 右に振ると「R」
・サーバー側実装はNode.js上
【B】Ansible実行部へ
20
LT時スキップ
3.3. 仕組み【B】Ansible実行部1/2
【B】Ansible実行部
・呼ばれたAnsible Tower API のパラメーターに応じたPlaybookが実行される
- 左経路用Playbook- 右経路用Playbook
・「★」のインターフェースのOSPFコストを
- 左経路用Playbookで10に変更する- 右経路用Playbookで9999に変更する
③Ansible TowerのAPIが呼ばれ、 Playbookが実行される
API
【A】スマホ連携部から
ネットワーク
★
21
LT時スキップ
3.3. 仕組み【B】Ansible実行部2/2
22
【左経路用Playbook】
---- name: chane route to lefthosts: 192.168.1.254gather_facts: noconnection: local
tasks:- name: change route to leftios_config: # IOS設定用モジュール
parents:- interface FastEthernet0
lines:- ip ospf cost 10
provider: "{{ cli }}“notify: save configregister: result
- name: DEBUGdebug: var=result
handlers: # コンフィグ変更されたら保存する
- name: save configios_command:commands:
- write memoryprovider: "{{ cli }}"
register: result- name: DEBUGdebug: var=result
vars: # 説明用にPlaybook内に定義cli: # 認証情報等host: “192.168.1.254“ # 対象username: “user“ # ユーザ名password: “password“ # ログインパスワードauthorize: true # 特権モードへ移行するauth_pass: “password“ # enableパスワード
ポイント
provider オプションについて参考情報http://qiita.com/akira6592/items/f0fba66ee7743ceb0365
【右経路用Playbook】
---- name: change route to righthosts: 192.168.1.254gather_facts: noconnection: local
tasks:- name: change route to rightios_config: # IOS設定用モジュール
parents:- interface FastEthernet0
lines:- ip ospf cost 9999
provider: "{{ cli }}"notify: save config
register: result- name: DEBUGdebug: var=result
handlers: # コンフィグ変更されたら保存する
- name: save configios_command:commands:
- write memoryprovider: "{{ cli }}"
register: result- name: DEBUGdebug: var=result
vars: # 説明用にPlaybook内に定義cli: # 認証情報等host: “192.168.1.254“ # 対象username: “user“ # ユーザ名password: “password“ # ログインパスワードauthorize: true # 特権モードへ移行するauth_pass: “password“ # enableパスワード
ポイント
3.3. 仕組み【C】Traceroute表示部
【C】Traceroute表示部
・traceroute実行サーバーから送られてきた結果をグラフネットワークとして表示・グラフネットワーク描画ライブラリはCytoscape.jsを使用・クライアント側実装はJavaScript
・traceroute実行サーバーでは、定期的にtracerouteを実行し、変化があった場合のみtraceroute結果をプッシュでクライアントに送る・プッシュ送信はWebSocketを使用・サーバー側実装はNode.js上
ネットワーク
⑥tracerouteの変化が表示される
⑤Traceroute結果に変化が起こると、結果をクライアントに送られる
23
LT時スキップ
3.4. 仕組み ネットワーク機器
24
ルーターA Cisco 1812J<今回の設定変更機器>
ルーターB Catalyst3750
ルーターD Catalyst3750
ルーターC・E IX2015
純正のAPIは非対応の機器
LT時スキップ
25
4. 感想・まとめ
4. 感想・まとめ
ネットワーク方面◦ APIがないネットワーク機器でもAnsible Towerを使ってAPI化すれば、活用場面が増えそう。
サーバー方面◦ Ansible Tower をオンプレで試すにはVagrantで構築するのが便利。
◦ Ansible TowerのOSS化に期待。
プログラム方面◦ スマホのセンサーはブラウザからも取得できるのは便利。
26
参考URLAnsible初心者が始めの1カ月でやったこと
◦ http://qiita.com/akira6592/items/e46463243d858ab6c880
Ansibleで複数のCatalystのパスワードを一括変更する◦ http://qiita.com/akira6592/items/7695881f91dee1036e4a
Ansible Tower を Vagrant で構築する◦ http://qiita.com/akira6592/items/c4110140d774beef97bd
【動画】EXPLORING AND USING THE ANSIBLE TOWER REST API◦ https://www.ansible.com/exploring-and-using-the-ansible-tower-rest-api
Ansibrest (Ansible Towerとは別のAPI機能を持たせるツール)◦ http://muddydixon.hatenablog.com/entry/2016/03/08/004951
スマートフォンはセンサーの塊!たった数行のHTML5とJSで扱えるセンサーまとめ(デモ・動画あり)
◦ https://ics.media/entry/4095/2
◦ https://github.com/ics-creative/141216_sp_device/tree/master/devicemotion
Traceroute表示部で参考にした Cytoscape.jsのサンプル◦ https://gist.github.com/maxkfranz/7e2f4d29ff7ef1a1bba5
◦ http://js.cytoscape.org/demos/7e2f4d29ff7ef1a1bba5/
27