Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

スマホのセンサーでネットワークを操る ~Ansible TowerによるレガシーNW機器のAPI化~

2,220 views

Published on

NetOpsCoding#4 LT資料です。

デモの動画こちらです。
https://www.youtube.com/watch?v=iK8gVdYjv0M

Published in: Technology

スマホのセンサーでネットワークを操る ~Ansible TowerによるレガシーNW機器のAPI化~

  1. 1. スマホのセンサーで ネットワークを操る ~ANSIBLE TOWERによるレガシーNW機器のAPI化~ 2016/10/27 NetOpsCoding#4 株式会社 エーピーコミュニケーションズ 横地 晃 1
  2. 2. 内容 1. はじめに・経緯 2. Ansible / Ansible Towerについて 3. 作ったもの・デモ 4. 仕組み 5. 感想・まとめ 2 本資料は Ansible 2.1、Ansible Tower 3.0.2 を前提としています。 @akira6592
  3. 3. 3 1. はじめに・経緯
  4. 4. 1.1. はじめに APIに対応していない あのルーター、あのスイッチが、 もしAPI対応したら、 どんなことをしたいですか? 4 ネットワーク機器 API
  5. 5. 1.2. 今回の取り組みの経緯 新しいネットワーク機器の中にはAPI に対応いるものがあって、自動化フ レンドリーでよいなぁ。 Cisco1812JやCatalyst 3750 のような古 い機器でもAPI化できたらよいのに。 5
  6. 6. 1.2. 今回の取り組みの経緯 そういえば、Ansibleにネットワーク 機器に対応したモジュールがあるな。 それに、Ansible TowerはREST APIに対 応している。 ということは、API化できるのでは? 6
  7. 7. 7 2. Ansible / Ansible Towerについて
  8. 8. 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 ネットワーク機器
  9. 9. 2.2. Ansible Towerとは ◦ Ansible の Web GUI、CLI(tower-cli)ツール ◦ Red Hat社のプロプライエタリ・ソフトウェア ◦ OSS化予定あり ◦ REST API対応 9 Software Design 2016年8月号から抜粋画面イメージ
  10. 10. 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/
  11. 11. 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時スキップ
  12. 12. 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. 13. 13 3. 作ったもの・デモ
  14. 14. 3. 作ったもの (1) スマホを振ると (2) 振った方向に 経路が変わる (略) 後述 ネットワーク 14
  15. 15. 3.1. デモ 15 実際に試しますのでご覧ください (後日追加)デモ動画URL https://www.youtube.com/watch?v=iK8gVdYjv0M
  16. 16. 3.1. デモ(説明用1/3) 通常時は左経路 16 [vagrant@ansible-tower ~]$ traceroute 10.0.0.100 traceroute to 10.0.0.100 (10.0.0.100), 30 hops max, 60 byte packets 1 192.168.1.254 (192.168.1.254) 2.947 ms 2.874 ms 2.852 ms 2 10.0.101.1 (10.0.101.1) 2.998 ms 8.681 ms 8.671 ms 3 10.0.102.1 (10.0.102.1) 5.353 ms 5.346 ms 5.339 ms 4 10.0.0.100 (10.0.0.100) 8.623 ms * * 【事前コンフィグ抜粋】 interface FastEthernet0 ip address 10.0.101.254 255.255.255.0 ip 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時スキップ
  17. 17. 3.1. デモ(説明用2/3) 17 右に振る Ansible Tower上で 右に経路変更するJOB(Playbook)が実行される LT時スキップ
  18. 18. 3.1. デモ(説明用3/3) 右の経路に変更される 18 [vagrant@ansible-tower ~]$ traceroute 10.0.0.100 traceroute to 10.0.0.100 (10.0.0.100), 30 hops max, 60 byte packets 1 192.168.1.254 (192.168.1.254) 1.850 ms 1.776 ms 3.553 ms 2 10.0.201.1 (10.0.201.1) 3.539 ms 3.525 ms 6.917 ms 3 10.0.202.1 (10.0.202.1) 6.886 ms 6.880 ms 6.812 ms 4 10.0.0.100 (10.0.0.100) 10.049 ms * * 【事後コンフィグ抜粋】 interface FastEthernet0 ip address 10.0.101.254 255.255.255.0 ip 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時スキップ
  19. 19. 3.2. 仕組み(全体) ①スマホを振る ②スマホの加速度センサー が反応してサーバーに指示 ③Ansible TowerのAPIが 呼ばれ、 Playbookが実 行される ⑥Tracerouteの変化が表示される ⑤Traceroute結果に変化 が起こると、結果をク ライアントに送られる ④ルーターの OSPFのコストが 変更され、経路が 変わる 【C】Traceroute表示部 【A】スマホ連携部 ※Playbook: 機器への操作を記述するYAML形式のファイル。 今回はルーターのインターフェースのOSPFコスト変更コマンドを記述。 【B】Ansible実行部 API 19 LT時スキップ
  20. 20. 3.3. 仕組み【A】スマホ連携部 ①スマホを振る ②-1 加速度センサーが 反応してサーバーに指 示 【A】スマホ連携部 L or R ②-2 パラメータに応じて Ansible REST APIを呼び出す ・スマホに搭載されている加速度センサーをブラウザか らJavaScript経由で利用(DeviceMotionEvent) ・振った方向に応じたパラメータがサーバーに送られる - 左に振ると「L」 - 右に振ると「R」 ・サーバー側実装はNode.js上 【B】Ansible実行部へ 20 LT時スキップ
  21. 21. 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時スキップ
  22. 22. 3.3. 仕組み【B】Ansible実行部2/2 22 【左経路用Playbook】 --- - name: chane route to left hosts: 192.168.1.254 gather_facts: no connection: local tasks: - name: change route to left ios_config: # IOS設定用モジュール parents: - interface FastEthernet0 lines: - ip ospf cost 10 provider: "{{ cli }}“ notify: save config register: result - name: DEBUG debug: var=result handlers: # コンフィグ変更されたら保存する - name: save config ios_command: commands: - write memory provider: "{{ cli }}" register: result - name: DEBUG debug: 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 right hosts: 192.168.1.254 gather_facts: no connection: local tasks: - name: change route to right ios_config: # IOS設定用モジュール parents: - interface FastEthernet0 lines: - ip ospf cost 9999 provider: "{{ cli }}" notify: save config register: result - name: DEBUG debug: var=result handlers: # コンフィグ変更されたら保存する - name: save config ios_command: commands: - write memory provider: "{{ cli }}" register: result - name: DEBUG debug: var=result vars: # 説明用にPlaybook内に定義 cli: # 認証情報等 host: “192.168.1.254“ # 対象 username: “user“ # ユーザ名 password: “password“ # ログインパスワード authorize: true # 特権モードへ移行する auth_pass: “password“ # enableパスワード ポイント
  23. 23. 3.3. 仕組み【C】Traceroute表示部 【C】Traceroute表示部 ・traceroute実行サーバーから送られてきた結果を グラフネットワークとして表示 ・グラフネットワーク描画ライブラリはCytoscape.js を使用 ・クライアント側実装はJavaScript ・traceroute実行サーバーでは、定期的にtraceroute を実行し、変化があった場合のみtraceroute結果を プッシュでクライアントに送る ・プッシュ送信はWebSocketを使用 ・サーバー側実装はNode.js上 ネットワーク ⑥tracerouteの変化が表示される ⑤Traceroute結果に変化 が起こると、結果をク ライアントに送られる 23 LT時スキップ
  24. 24. 3.4. 仕組み ネットワーク機器 24 ルーターA Cisco 1812J <今回の設定変更機器> ルーターB Catalyst3750 ルーターD Catalyst3750 ルーターC・E IX2015 純正のAPIは非対応の機器 LT時スキップ
  25. 25. 25 4. 感想・まとめ
  26. 26. 4. 感想・まとめ ネットワーク方面 ◦ APIがないネットワーク機器でもAnsible Towerを使っ てAPI化すれば、活用場面が増えそう。 サーバー方面 ◦ Ansible Tower をオンプレで試すにはVagrantで構築す るのが便利。 ◦ Ansible TowerのOSS化に期待。 プログラム方面 ◦ スマホのセンサーはブラウザからも取得できるのは 便利。 26
  27. 27. 参考URL Ansible初心者が始めの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

×