
APIC-EM REST APIのはじめ方 (1)
Cisco Application Policy Infrastructure Controller Enterprise Module (APIC-EM)がリリースされました。DevNet の APIC-EM のサイトで EFT バージョンの情報や Sandbox によるリモート アクセス ラボが無料で提供されているのでご存知の方もいるかと思います。APIC-EM には GUI も用意されており、API でも GUI の機能が実行可能となっています。今回は GUI の機能と API を比較していきます。実行環境は、実機でもSandboxでも可能です。
Postman で REST API へ簡易アクセス
APIC-EM は認証にトークンを使用しているため、ブラウザのみでは REST API を試すことができません。ただし、例えば Google Chrome のプラグイン「Postman」を利用することで GUI で REST API を試すことができるようになります。
手順は『APIC-EM “Hello World” for Northbound REST API』の「Make a request with a GUI」をご覧ください。
REST API を使ってどんな情報が取得できるかは Postman だけでも確認できます。他の API についてもリファレンスを参考にしながら試してみてください。
Python で REST API へアクセス
CMX API の記事で Python を利用したときと同じ環境でインタラクティブ モードを使っていきます。
シェル(Windows の場合、コマンドプロンプト)で「python」と入力するとプロンプト「>>>」が表示され、インタラクティブ モードが起動します。まずは「変数 = 値」という形式で変数に APIC-EM の情報を代入しておきます。
(以下、すべて大文字の単語は環境に合わせた値、イタリック体はレスポンスです)
>>> controller_url = ‘https://<APIC-EM>/api/v1/’
>>> auth = {'username': 'USERNAME', 'password': 'PASSWORD'}
>>> print controller_url, auth
https://<APIC-EM>/api/v1/ {'username': 'USERNAME', 'password': 'PASSWORD'}
APIC-EM の REST API は JSON 形式なので、Requests モジュールと JSON モジュールをインポートし、ヘッダーで content-type に application/json を指定しておきます。まずはトークンとなる Service Ticket を取得する API へアクセスします。
>>> import requests
>>> import json
>>> ticket = requests.post(controller_url + 'ticket', data=json.dumps(auth), headers={'content-type': 'application/json'})
>>> print ticket.text
{"response":{"serviceTicket":"ST-12-ABCDEFGHIJKLMNOPQRST-CAS"},"version":"1.0"}
JSON 形式でレスポンスが返ってきて、Service Ticket を取得できていることがわかります。この Service Ticket を文字列にして API へアクセスするときにヘッダーへ入れます。
>>> service_ticket = ticket.json()['response']['serviceTicket']
>>> print service_ticket
ST-12-ABCDEFGHIJKLMNOPQRST-CAS
では、最初の例として GUI の Navigation Pane にある Device Inventory の情報を取得する API にアクセスすることにします。
>>> get_device = requests.get(controller_url + 'network-device', headers={'X-Auth-Token': service_ticket})
>>> print get_device.text
{"response":[{…},…],"version":"1.0"}
JSON の構造を理解しやすいようにインデントを入れた形でエンコーディングしてみます。
>>> print json.dumps(get_device.json(), indent=4)
{
"version": "1.0",
"response": [
{
…
},
…
]
}
“response”の内容がGUIのDevice Inventoryの情報を網羅しているのが確認できます。
次に GUI のNavigation Paneにある Host Inventory の情報を取得する API へアクセスし、Python で値を扱うため、JSON の配列とオブジェクトをそれぞれ Python のリストと辞書へ変換します。
>>> get_host_json = requests.get(controller_url + 'host', headers={'X-Auth-Token': service_ticket}).json()
>>> print get_host_json
{u'version': u'1.0', u'response': [{…, u'hostIp': u'65.1.1.83', …}, {…, u'hostIp': u'212.1.10.20', …}, …]}
“response”の内容が GUI の Host Inventory の情報と同等であることが確認できます。
次回、Host IP をプログラム内で利用するために Host IP をリストで取り出しておきます。
>>> host_list = [i['hostIp'] for i in get_host_json['response']]
>>> print host_list
[u'65.1.1.83', u'212.1.10.20',…]
最後にGUIで実装しているアプリの1つ、Topology の情報を取得する API へアクセスしてみます。
>>> print json.dumps(requests.get(controller_url + 'topology/physical-topology', headers={'X-Auth-Token': service_ticket}).json(), indent=4)
{
"version": "1.0",
"response": {
"nodes": [
{
…,
"id": "01234567-89ab-cdef-0123-456789abcdef",
…,
},
{
…,
"id": "fedcba98-7654-3210-fedc-ba9876543210",
…,
},
…
],
"links": [
{
…,
"target": "01234567-89ab-cdef-0123-456789abcdef ",
…,
"source": " fedcba98-7654-3210-fedc-ba9876543210",
…
},
…
]
}
}
“nodes”の”id”を参照して”links”の”source”と”target”をつなぐとGUIのTopologyと同様なことが確認できます。
例えばネットワーク図を描写するようなモジュールを使い、これらの情報を利用すれば以下のような簡易的なネットワーク図も自動的に作成できます。
次回は複数のAPIを組み合わせて、GUIで実装しているアプリである Path Trace を API で実行してみます。
Tags:
- #クラウド
- #データセンター
- 2017
- 2021年度
- 3gpp
- 5G
- 5G ショーケース
- 5G 重点施策
- 5Gサイバーセキュリティ
- 5Gデモ
- ACI
- API
- APIC
- APIC EM
- Architecture
- ASR 9000
- ASR 9006
- ASR 9901
- ASR9904
- Best of Show Award
- Buzzword
- Catalyst
- catalyst 9600
- CGN
- Cisco 8201-32FH
- Cisco ACI
- Cisco AI/ML
- Cisco Aironet 3800
- Cisco ASR 1009X
- Cisco ASR 9902
- Cisco Crosswork
- Cisco Data Center Solution Day
- Cisco EPN Day
- Cisco Hierarchical Controller
- Cisco Network Services Orchestrator
- Cisco Nexus
- Cisco NFM(Nexus Fabric Manager)
- Cisco NSO
- Cisco Prime DCNM(Data Center Network Manager)
- Cisco Routed Optical Networking
- Cisco SD-WAN
- Cisco Silicon One
- Cisco Tetration Analytics
- Cisco VTS(Virtual Topology System)
- Cisco Webex
- Cisco Webex Meetings
- Cisco Webex Teams
- CiscoJapan2020BlogRelay
- CiscoSDWAN
- Cloud Days
- Cloud Native
- CPAK
- Data Center Anywhere
- DC インターコネクト
- Dis-Aggregation
- DNA Center
- DWDM
- eMBB
- EPN
- Ethernet ファブリック
- Evolved Programmable Network
- Firepower
- HCO
- HotStage
- HyperFlex
- IBN
- IDC
- Internet for the Future
- Interop
- Interop 2023
- Interop Tokyo
- Interop Tokyo 2016
- Interop tokyo 2018
- interop tokyo 2019
- Interop Tokyo 2021
- Interop Tokyo 2023
- INTEROP2021
- Interop21
- Introp
- IoT
- IP ファブリック
- JANOG48
- KT(Knowledge Transfer)
- Level 3
- LightSpeed Plus
- LISP
- M2M
- mGig
- ML
- mMTC
- Multi-Pod
- NaaS
- NCS
- NCS 55A1
- NetFusion
- Netrounds
- Network Architecture
- Nexus
- Nexus 7000/7700
- Nexus 9000
- Nexus 9000 スイッチ
- Nexus 92160YC
- NFV
- nso
- NX-OS
- PBB-EVPN
- PGW
- programmability
- Remote Leaf
- REST API
- Routed Optical Networking
- Sandbox
- SD-WAN
- SDN
- SDWAN
- Sedona Systems
- Segment Routing over IPv6
- ShowNet
- SHOWNET2021
- ShowNetツアー
- Silicon One
- SP ネットワーク
- SR Hand Off
- SRv6
- Stealthwatch
- Supervisor Engine 6T
- Tail-F
- Team Space
- Tetration Analytics
- TheatGRID
- ThousandEyes
- URLLC
- VXLAN
- VXLAN ファブリック
- WeareCisco
- Web スケール
- Wi-Fi
- YANG
- にょロボてぃくす
- アナリティクス
- アプリケーション
- アーキテクチャ
- イノベーション
- インテル Xeon プロセッサ
- インテントベース
- インテントベース ネットワーキング
- インフラストラクチャ プログラマビリティ、ネットワーク、ネットワーク プログラマビリティ、SDN、ソフトウェア定義型、IT の未来
- エグゼクティブ
- エンタープライズ ネットワーキング
- エンドツーエンド
- オーケストレーション
- カスタマー エクスペリエンス
- カスタマーサクセス
- コネクテッドカー
- サイバーセキュリティ
- サービス プロバイダー
- サービスプロバイダー
- シスコ
- シスコが考えるサービスプロバイダー エンドツーエンドアーキテクチャ
- スイッチ
- スケジュール済みファブリック
- スマートシティ
- セキュリティ
- セグメント ルーティング
- セグメントルーティング
- テクノロジー
- テレワーク
- デジタル
- デジタルデバイド
- デジタルトランスフォーメーション
- データセンターネットワーク
- データン
- トレンド
- ネットワーク
- ネットワーク アーキテクチャ
- ネットワークアーキテクチャ
- ネットワークエンジニア
- ネットワークシステム
- ネットワーク保証
- ネットワーク監視
- ネットワーク管理
- ネットワーク自動化
- ハイパーコンバージドインフラ
- ハイパースケール
- パケット コア
- パケットコア
- ビッグデータ
- ファブリック
- ブログリレー
- ブース紹介
- プロアクティブな運用
- プログラマブル ネットワーク
- プログラマブル ファブリック
- ホワイトペーパー
- マルチクラウド
- モバイルネットワーク
- モバイル通信事業者
- ルータ
- ロケーションベースのサービス
- ローカル5G
- 事業戦略
- 事業戦略説明会
- 人工知能(AI)
- 仮想化
- 働きがいのある会社
- 働き方改革
- 光伝送装置
- 合併・買収
- 在宅勤務
- 変革のハブ
- 富士通
- 新入社員
- 楽天モバイル
- 機械学習(ML)
- 次世代 IPS
- 注目
- 連載:ネットワーク アーキテクチャ考
- 開発