Top Banner
スマホのセンサーで ネットワークを操る ANSIBLE TOWER によるレガシー NW 機器の API 化~ 2016/10/27 NetOpsCoding#4 株式会社 エーピーコミュニケーションズ 横地 1
27

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

Jan 13, 2017

Download

Technology

akira6592
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: スマホのセンサーでネットワークを操る  ~Ansible TowerによるレガシーNW機器のAPI化~

スマホのセンサーでネットワークを操る~A N S I BL E TOWERによるレガシーN W機器のAPI化~

2016/10/27 NetOpsCoding#4

株式会社エーピーコミュニケーションズ横地 晃

1

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

内容

1. はじめに・経緯

2. Ansible / Ansible Towerについて

3. 作ったもの・デモ

4. 仕組み

5. 感想・まとめ

2

本資料は Ansible 2.1、Ansible Tower 3.0.2 を前提としています。

@akira6592

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

3

1. はじめに・経緯

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

1.1. はじめに

APIに対応していない

あのルーター、あのスイッチが、

もしAPI対応したら、

どんなことをしたいですか?

4

ネットワーク機器

API

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

1.2. 今回の取り組みの経緯

新しいネットワーク機器の中にはAPIに対応いるものがあって、自動化フレンドリーでよいなぁ。

Cisco1812JやCatalyst 3750 のような古い機器でもAPI化できたらよいのに。

5

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

1.2. 今回の取り組みの経緯

そういえば、Ansibleにネットワーク機器に対応したモジュールがあるな。それに、Ansible TowerはREST APIに対応している。

ということは、API化できるのでは?

6

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

7

2. Ansible / Ansible Towerについて

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

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 ネットワーク機器

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

2.2. Ansible Towerとは

◦ Ansible の Web GUI、CLI(tower-cli)ツール

◦ Red Hat社のプロプライエタリ・ソフトウェア

◦ OSS化予定あり

◦ REST API対応

9

Software Design 2016年8月号から抜粋画面イメージ

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

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/

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

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時スキップ

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

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時スキップ

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

13

3. 作ったもの・デモ

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

3. 作ったもの

(1) スマホを振ると(2) 振った方向に経路が変わる

(略)後述 ネットワーク

14

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

3.1. デモ

15

実際に試しますのでご覧ください

(後日追加)デモ動画URL

https://www.youtube.com/watch?v=iK8gVdYjv0M

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

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時スキップ

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

3.1. デモ(説明用2/3)

17

右に振る

Ansible Tower上で右に経路変更するJOB(Playbook)が実行される

LT時スキップ

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

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時スキップ

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

3.2. 仕組み(全体)

①スマホを振る ②スマホの加速度センサーが反応してサーバーに指示

③Ansible TowerのAPIが呼ばれ、 Playbookが実行される

⑥Tracerouteの変化が表示される

⑤Traceroute結果に変化が起こると、結果をクライアントに送られる

④ルーターのOSPFのコストが変更され、経路が変わる

【C】Traceroute表示部

【A】スマホ連携部

※Playbook:機器への操作を記述するYAML形式のファイル。今回はルーターのインターフェースのOSPFコスト変更コマンドを記述。

【B】Ansible実行部

API

19

LT時スキップ

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

3.3. 仕組み【A】スマホ連携部

①スマホを振る②-1 加速度センサーが反応してサーバーに指

【A】スマホ連携部

L or R

②-2 パラメータに応じてAnsible REST APIを呼び出す

・スマホに搭載されている加速度センサーをブラウザからJavaScript経由で利用(DeviceMotionEvent)

・振った方向に応じたパラメータがサーバーに送られる- 左に振ると「L」- 右に振ると「R」

・サーバー側実装はNode.js上

【B】Ansible実行部へ

20

LT時スキップ

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

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時スキップ

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

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パスワード

ポイント

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

3.3. 仕組み【C】Traceroute表示部

【C】Traceroute表示部

・traceroute実行サーバーから送られてきた結果をグラフネットワークとして表示・グラフネットワーク描画ライブラリはCytoscape.jsを使用・クライアント側実装はJavaScript

・traceroute実行サーバーでは、定期的にtracerouteを実行し、変化があった場合のみtraceroute結果をプッシュでクライアントに送る・プッシュ送信はWebSocketを使用・サーバー側実装はNode.js上

ネットワーク

⑥tracerouteの変化が表示される

⑤Traceroute結果に変化が起こると、結果をクライアントに送られる

23

LT時スキップ

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

3.4. 仕組み ネットワーク機器

24

ルーターA Cisco 1812J<今回の設定変更機器>

ルーターB Catalyst3750

ルーターD Catalyst3750

ルーターC・E IX2015

純正のAPIは非対応の機器

LT時スキップ

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

25

4. 感想・まとめ

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

4. 感想・まとめ

ネットワーク方面◦ APIがないネットワーク機器でもAnsible Towerを使ってAPI化すれば、活用場面が増えそう。

サーバー方面◦ Ansible Tower をオンプレで試すにはVagrantで構築するのが便利。

◦ Ansible TowerのOSS化に期待。

プログラム方面◦ スマホのセンサーはブラウザからも取得できるのは便利。

26

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

参考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