2021-08-31 03:15 PM 2021-08-31 03:17 PM 更新
本ドキュメントでは 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 :
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 には 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
CMX GUI 上より、MANAGE > Users より確認できます
CLI では以下のコマンドより確認できます。
[cmxadmin@kumatsum-cmx106-92 ~]$ cmxctl users list +----------+------------+-------+ | Username | Full Name | Roles | +==========+============+=======+ | admin | Admin User | Admin | +----------+------------+-------+
CLI より以下のコマンドで確認できます。
[cmxadmin@kumatsum-cmx106 ~]$ cmxos apiserver user list +----------+ | User ID | +==========+ | apiuser1 | +----------+ | apiuser2 | +----------+ | apiuser3 | +----------+
検索バーにキーワード、フレーズ、または質問を入力し、お探しのものを見つけましょう
シスコ コミュニティをいち早く使いこなしていただけるよう役立つリンクをまとめました。みなさんのジャーニーがより良いものとなるようお手伝いします