キャンセル
次の結果を表示 
次の代わりに検索 
もしかして: 
cancel
告知

Python Script を用いて CMX の REST API の動作を確認する

319
閲覧回数
0
いいね!
0
コメント

 

 

はじめに

本ドキュメントでは Cisco Connected Mobile Experiences ( CMX ) の REST API の動作を Python Script を用いて確認する動作例を記載しています。

※ サンプルコードについては、動作環境によっては正しく動作しない可能性がございますので、予めご了承ください。本ドキュメントでは以下の環境で確認しています。

CMX Version : 10.6.2.89 ( Virtual 版 )
Client OS : Ubuntu 18.04.5
Python : 2.7.17

主なパッケージとそのバージョン

certifi 2021.5.30
chardet 4.0.0
cryptography 2.1.4
idna 2.10
pip 20.3.4
pyasn1 0.4.8
pycrypto 2.6.1
pycurl 7.43.0.1
pygobject 3.26.1
pyliblzma 0.5.3
pysqlite 1.0.1
pyxdg 0.25
requests 2.26.0
urlgrabber 3.10.2
urllib3 1.26.6

   

サンプルコード

 

import requests
requests.packages.urllib3.disable_warnings()
from requests.auth import HTTPBasicAuth
import json
import base64

def main():
   print("*********************************************************");
   print("* Cisco CMX Command Line REST API Python Utility        *");
   print("* Please provide the input in the following format      *");
   print("*                                                       *");
   print("* REST URL: https://[ip]/api/location/v2/clients/count  *");
   print("* Username: [username]                                  *");
   print("* Password: [password]                                  *");
   print("*                                                       *");
   print("*                                                       *");
   print("* Control C to exit                                     *");
   print("*********************************************************");

   storedCredentials = False
   username = None
   password = None

   while True:
       restURL = raw_input("\nREST URL: ")

       if not storedCredentials:
           username = raw_input("Username: ")
           password = raw_input("Password: ")
           storedCredentials = True

           print("----------------------------------")
           print("Authentication string: "+ username+":"+password)
           print("Base64 encoded auth string: " + base64.b64encode(username+":"+password))
           print("----------------------------------")

       try:
           request = requests.get(
           url = restURL,
           auth = HTTPBasicAuth(username,password),
           verify=False)

           parsed = json.loads(request.content)
           print json.dumps(parsed, indent=2)

       except requests.exceptions.RequestException as e:
           print(e)

       print("\nControl C to Exit");

if __name__ == "__main__":
   main()
 

NOTE :

  • CMX の内部ドキュメントで公開されているサンプルコードです
  • requests モジュールを事前にインストールする必要があります

サンプルコード解説

import requests
requests.packages.urllib3.disable_warnings()
from requests.auth import HTTPBasicAuth
import json
import base6

上記の部分では必要なモジュールのインポートを行っています。

def main():
   print("*********************************************************");
   print("* Cisco CMX Command Line REST API Python Utility        *");
   print("* Please provide the input in the following format      *");
   print("*                                                       *");
   print("* REST URL: https://[ip]/api/location/v2/clients/count  *");
   print("* Username: [username]                                  *");
   print("* Password: [password]                                  *");
   print("*                                                       *");
   print("*                                                       *");
   print("* Control C to exit                                     *");
   print("*********************************************************");
   

上記部分では、スクリプト実行時のメッセージのプリントを行っています。REST URL と Username、Password の入力を促しています。

   storedCredentials = False
   username = None
   password = Non

上記部分では変数の初期化を行っています。

   while True:
       restURL = raw_input("\nREST URL: ")

       if not storedCredentials:
           username = raw_input("Username: ")
           password = raw_input("Password: ")
           storedCredentials = True

           print("----------------------------------")
           print("Authentication string: "+ username+":"+password)
           print("Base64 encoded auth string: " + base64.b64encode(username+":"+password))
           print("----------------------------------")

上記部分では REST URL の受付を行い、変数 restURL に格納します。
クレデンシャルがまだ格納されていない場合は、Username と Password を続けて入力させる画面に移ります。

       try:
           request = requests.get(
           url = restURL,
           auth = HTTPBasicAuth(username,password),
           verify=False)

           parsed = json.loads(request.content)
           print json.dumps(parsed, indent=2)

       except requests.exceptions.RequestException as e:
           print(e)

       print("\nControl C to Exit");

Python の requests モジュールを使い、GET リクエストを送信します。
Basic 認証を使ってアクセスしています。

GET リクエストでエラーが発生した場合は、エラーの内容を出力させます。

    

動作例

上記のスクリプトを実行すると以下のような、REST URL とクレデンシャルの入力を促されます。

kumatsum@kumatsum-virtual-machine:~/cmx_python$ python Sample_code.py
*********************************************************
* Cisco CMX Command Line REST API Python Utility        *
* Please provide the input in the following format      *
*                                                       *
* REST URL: https://[ip]/api/location/v2/clients/count  *
* Username: [username]                                  *
* Password: [password]                                  *
*                                                       *
*                                                       *
* Control C to exit                                     *
*********************************************************

REST URL:

この動作例では、CMX のバージョンを確認するための REST URL を渡します。v1 の API となるため、入力するクレデンシャルは CMX の GUI アクセスのユーザアカウントを使用しています。

結果が出力として返ってきています。

REST URL: https://172.22.4.98/api/config/v1/version/image
Username: admin
Password: CmxXXXXXXXX
----------------------------------
Authentication string: admin:Cmx123Cmx123$$
Base64 encoded auth string: YWRtaW46Q214MTIzQ214MTIzJCQ=
----------------------------------
{"cmx_rpm_versions":["cisco_cmx_connect-10.6.2-12","cisco_cmx_wips-10.2.0-96","cisco_cmx-10.6.2-419"],"cmx_image_version":"CISCO_CMX-10.6.2-89.cmx"}

Control C to Exit

REST URL:

 

続けて確認したい REST URL 入力を行えます。

アクセスする際のユーザアカウントを変更したい場合は、一度 Ctrl+C でスクリプトを終了し、再度 Python スクリプトの実行が必要となります。

CMX API を利用する際の注意点

CMX の API には v1, v2, v3 のバージョンがございますが、v1, v2 を利用する場合は CMX の GUI アクセスするためのユーザ、v3 を利用する場合は API ユーザでアクセスする必要があります。

API ユーザで v1, v2 の API にアクセスをした場合、以下のような System Error が返ってきます。

REST URL: https://172.22.xx.xx/api/location/v1/rogueaps/count
Username: apiuser3
Password: apiuser3
----------------------------------
Authentication string: apiuser3:apiuser3
Base64 encoded auth string: YXBpdXNlcjM6YXBpdXNlcjM=
----------------------------------
CMX: System error

 

GUI アクセスするためのユーザアカウントの確認方法

CMX GUI 上より、MANAGE > Users より確認できます

2021-08-31-12-30-18.png

CLI では以下のコマンドより確認できます。

 

[cmxadmin@kumatsum-cmx106-92 ~]$ cmxctl users list
+----------+------------+-------+
| Username | Full Name  | Roles |
+==========+============+=======+
| admin    | Admin User | Admin |
+----------+------------+-------+

 

API ユーザの確認方法

CLI より以下のコマンドで確認できます。

[cmxadmin@kumatsum-cmx106 ~]$ cmxos apiserver user list
+----------+
| User ID  |
+==========+
| apiuser1 |
+----------+
| apiuser2 |
+----------+
| apiuser3 |
+----------+