メモのページ - チラシの裏メモ 3枚目

通信技術や気になった事を黙々とメモし続ける

REST APIでCSR1000Vの設定 その2

前回はREST APIを利用する為の設定をCSR1000Vにて実施した。
http://d.hatena.ne.jp/debslink/20161211/1481467495

今回は、REST APIクライアントであるDHC Reslet ClientにてHTTPSを介して対象機器の情報をJSONで読み書きし、REST APIで遊んでみた。
対象となる通信機器が1台から数台程度の場合は、Tera TermやPuTTYを立ち上げて手打ちでコマンド入力する方が早い事が多いだろうが、同じ(ような)内容のコマンドを多数の通信機器に投入する場面では、強力なツールになるだろう。


[実行環境]
Windows 7 Home Premiun SP1 (32bit)
VMware Player 6.0.7
Webブラウザ: Google Chrome 54.0.2840.99
REST API Client: DHC Restlet Client ver1.3.5.5
Cisco CSR1000V: csr1000v-universalk9.03.13.02.S.154-3.S2-ext


REST API ClientではPOSTMANの方が有名。しかし当方の環境ではCSR1000Vにリクエストを投げる事が出来ず。
DHC Restlet Clientが期待するとおりに動作した為、DHC Restlet Clientを採用した。
ここではDHC Restlet Clientの導入方法は割愛。

CSR1000Vで動作するIOS-XEのバージョンに因るのだろうか、それとも下記リンク先のtypoの為なのだろうか、"Cisco IOS XE REST API Management Reference Guide"の記載内容そのままでは正常にGET/PUTしない事が少なからずあった。
このような場合は、REQUEST欄の記載内容を少しづつ変えながら実行していくしかない。


1.まず最初にToken-IDの取得
ステータスの確認や設定投入の前に、認証に必要なToken-IDを取得する必要が有る。Token-IDの取得は毎回実施する必要は無い。
IPアドレスの設定に関しては、前回(http://d.hatena.ne.jp/debslink/20161211/1481467495)の設定内容を参照。

REQUEST欄
プロトコル: HTTPSを選択
URL: 192.168.1.16:55443/api/v1/auth/token-services
HTTP Method: POSTを選択

HEADERS欄
accept: application/jsonを選択

"set an authentication"をクリックしCSRにログインする際に使用するuser nameとPasswordを入力。setをクリックするとAuthenticationの行が追加され、暗号化されたuser nameとpasswordが見える。

Sendをクリックすると、RESPONSEの欄にて200 OKの出力。
"token-id:"の行に44文字程度の、意味の無い英数文字列が出力されていればOK。


2.running-configの取得
Token-ID取得後は下記のとおりの順番でなくても良い。
上記にて取得したToken-IDを"X-auth-token:"に貼り付けすれば、次回以降はREST APIで機器の操作が可能になる。

REQUEST欄
プロトコル: HTTPSを選択
URL: 192.168.1.16:55443/api/v1/global/running-config
HTTP Method: GETを選択

HEADERS欄
Accept: text/plainを選択
Authorization: 上記で設定したusernameとパスワード。改めて入力する必要は無い。
X-auth-token: 上記で出力した英数文字列を貼り付け

Acceptにてtext/plainを指定すると、Tera TermやPuTTYで出力されるフォーマットになる。
Sendをクリックすると、RESPONSEの欄にshow running-configの出力内容が出力される。


3.Interfaceのno shutdown
ここではinterface GigabitEthernet4をno shutdownする。

REQUEST欄
プロトコル: HTTPSを選択
URL: 192.168.1.16:55443/api/v1/interfaces/GigabitEthernet4/state
HTTP Method: PUTを選択

HEADERS欄
Accept: application/jsonを選択
Authorization: 変更無し
X-auth-token: 変更無し
Content-Type: application/jsonを選択

BODY欄
{
  "if-name" : "gigabitEthernet4",
  "enabled" : true
}

Sendをクリックすると、RESPONSE欄に204 NO CONTENTを出力される。これはエラーではなく応答メッセージを返す必要が無い処理である事を示す。
エラー時の応答は400番代である。
Tera TermやPuTTY等でログインしshow ip interface briefを叩くとstatus/protocol共にupになっている事が分かる。


4.Interfaceの設定
ここではinterface GigabitEthernet5にIP AddressやDescription等簡単な設定を投入する。
IOS-XEバージョン3.14以降ではIPv6のアドレス設定が可能である。

REQUEST欄
プロトコル: HTTPSを選択
URL: 192.168.1.16:55443/api/v1/interfaces/GigabitEthernet5
HTTP Method: PUTを選択

HEADERS欄
Accept: application/jsonを選択
Authorization: 変更無し
X-auth-token: 変更無し
Content-Type: application/jsonを選択

BODY欄
{
  "type": "ethernet",
  "description": "Connection to Server Segment",
  "ip-address": "192.168.100.1",
  "subnet-mask": "255.255.255.0",
  "proxy-arp": false,
  "icmp-unreachable": false,
  "ipv6-enable": false,
  "nat-direction": "",
  "icmp-redirects": false,
  "verify-unicast-source": false
}

Sendをクリックすると、RESPONSE欄に204 NO CONTENTを出力されるものの、Tera TermやPuTTY等でログインし show run int gi5を叩くと上記のBODY欄に記載した内容が投入されている事が分かる。
no shutdownの状態で投入したい場合は、"enabled" : trueを追記する。


5.Static Routeの設定
OSPFやBGPやEIGRP等ダイナミックルーティングプロトコルの設定も可能である。

REQUEST欄
プロトコル: HTTPSを選択
URL: 192.168.1.16:55443/api/v1/routing-svc/static-routes
HTTP Method: POSTを選択

HEADERS欄
Accept: application/jsonを選択
Authorization: 変更無し
X-auth-token: 変更無し
Content-Type: application/jsonを選択

BODY欄
{
 "destination-network": "0.0.0.0/0",
 "next-hop-router":"192.168.27.1",
 "admin-distance": 250
}

SENDをクリックすると、RESPONSE欄に201 CREATEDが出力される。
show runを叩くと上記で記載した ip route 0.0.0.0 0.0.0.0 192.168.27.1 250 が追加されている事が分かる。


6.設定内容の保存。
copy running-config startup-configもREST APIで実行可能である。

REQUEST欄
プロトコル: HTTPSを選択
URL: 192.168.1.16:55443/api/v1/global/save-config
HTTP Method: PUTを選択

HEADERS欄
Accept: application/jsonを選択
Authorization: 変更無し
X-auth-token: 変更無し

SENDをクリックすると204 NO CONTENTを出力されるが、Tera TermやPuTTY等でログインしshow runを叩くと、show run出力内容の頭の方の "! NVRAM config last updated at"の行にて保存した時刻が出力している事が分かる。



※これまで正常に設定内容やステータスの読み書きが出来ていたにも関わらず 401 UNAUTHORIZEDが出力された場合、再度Token-IDを取得する必要がある。この事象の主な要因は、REST APIのセッションタイムアウトである5分が経過した事である。
再取得したToken-IDを"X-auth-token:"に貼り付ける事で、作業は再開出来る。



https://restlet.com/products/dhc/?utm_source=DHC (DHC Restlet Client)
http://www.cisco.com/c/en/us/td/docs/routers/csr1000/software/restapi/restapi.html (Cisco IOS XE REST API Management Reference Guide)
http://www.cisco.com/c/en/us/products/routers/cloud-services-router-1000v-series/index.html (Cisco CSR1000V)
https://developer.cisco.com/media/mim-ref/ (APIC Management Information Model Reference)
http://d.hatena.ne.jp/debslink/20161211/1481467495 (REST APIでCSR1000Vの設定 その1)
http://d.hatena.ne.jp/debslink/20161213/1481620753 (REST APIでCSR1000Vの設定 その2)
http://d.hatena.ne.jp/debslink/20161217/1481967626 (REST APIでCSR1000Vの設定 その3)