Weitere ähnliche Inhalte
Ähnlich wie スマホのセンサーでネットワークを操る ~Ansible TowerによるレガシーNW機器のAPI化~ (20)
Kürzlich hochgeladen (12)
スマホのセンサーでネットワークを操る ~Ansible TowerによるレガシーNW機器のAPI化~
- 2. 内容
1. はじめに・経緯
2. Ansible / Ansible Towerについて
3. 作ったもの・デモ
4. 仕組み
5. 感想・まとめ
2
本資料は Ansible 2.1、Ansible Tower 3.0.2 を前提としています。
@akira6592
- 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. 2.2. Ansible Towerとは
◦ Ansible の Web GUI、CLI(tower-cli)ツール
◦ Red Hat社のプロプライエタリ・ソフトウェア
◦ OSS化予定あり
◦ REST API対応
9
Software Design 2016年8月号から抜粋画面イメージ
- 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. 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. 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時スキップ
- 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時スキップ
- 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. 3.2. 仕組み(全体)
①スマホを振る ②スマホの加速度センサー
が反応してサーバーに指示
③Ansible TowerのAPIが
呼ばれ、 Playbookが実
行される
⑥Tracerouteの変化が表示される
⑤Traceroute結果に変化
が起こると、結果をク
ライアントに送られる
④ルーターの
OSPFのコストが
変更され、経路が
変わる
【C】Traceroute表示部
【A】スマホ連携部
※Playbook: 機器への操作を記述するYAML形式のファイル。
今回はルーターのインターフェースのOSPFコスト変更コマンドを記述。
【B】Ansible実行部
API
19
LT時スキップ
- 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パスワード
ポイント