1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Catalyst Center API 【CCIEメモ_20260608-9】

1
Posted at

参考資料・時間

資料:
INE Network Security

勉強時間:
20260608 : 約2.5時間
20260609 : 約2時間

参考資料

学習内容

Catalyst Center(旧名:Cisco DNA Center)に対してAPIを用いて設定取得・変更を行う。
Catalyst CenterのAPIを利用するには、認証トークンの取得が必要となる。

設定取得を実施する場合、以下の流れになる。
⓵Catalyst Center から認証トークンを取得。(POST)
⓶取得したトークン情報をHTTPヘッダに付与してAPIを実行し情報の取得(GET)

設定変更・削除を行う場合、⓶で実行するHTTPメソッドがPOSTやPUT、DELETE等になる。

これらはPythonスクリプトを作成することで実施する。

Token取得

■ Catalyst Centerへのアクセス

プラットフォーム > 開発者用ツールキットから、
API一覧が閲覧可能。
image.png

https://sandboxdnac.cisco.com
Login with credentials [devnetuser/Cisco123!]

■ Catalyst CenterへのGUIログインページ
https://sandboxdnac.cisco.com/auth/login

POST  https://sandboxdnac.cisco.com/dna/system/api/v1/auth/token

import requests
import base64
import json

# Token取得用のURI
URI = "https://sandboxdnac.cisco.com/dna/system/api/v1/auth/token"

# User/PWの指定
user = "devnetuser"
password = "Cisco123!"

token = ""
authorizationBase64 = ""

# Basic認証用にUser/PWのBase64エンコード
byte_string = (f"{user}:{password}").encode("ascii")
authorizationBase64 = base64.b64encode(byte_string).decode()


# ヘッダ情報の作成。"Basic"の後に半角スペース必須
headers = {
    "content-type": "application/json",
    "Authorization": "Basic " + authorizationBase64,
}

# headersのprint結果
# {
#    'content-type': 'application/json', 
#    'Authorization': 'Basic ZGV2bmV0dXNlcjpDaXNjbzEyMyE='
# }

# Tokenのリクエスト。POSTで実行。
# 自己証明書を使用している場合は"verify=False"が必要(証明書を信頼していれば不要)
res = requests.request(
    "POST",
    URI,
    headers=headers,
    verify=False,
)


# res.txtはstr型なので、json.loadsでdict型に変換しTokenの値を取得
token = json.loads(res.text)["Token"]

# res.textのprint結果
# {
#  "Token": "eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9.eyJhY3RpdmVSRCI6IjliZjZiMjViMGM1ZTQwM2Q1MTc5ZmM5ZDQxZDViYWQ0ZjM4N2RjNDUiLCJhdWQiOiJDRE5BIiwiYXV0aFNvdXJjZSI6ImxlZ2FjeSIsImNsaWVudElkIjoiZGV2bmV0dXNlciIsImVtYWlsIjoianVhbkBjcm9zc2JyaWRnZS5jb20iLCJleHAiOjE3ODA5MzcwNTgsImZpcnN0TmFtZSI6ImRldm5ldHVzZXIiLCJpYXQiOjE3ODA5MzM0NTgsImlzcyI6ImRuYWMiLCJyZHMiOlsiOWJmNmIyNWIwYzVlNDAzZDUxNzlmYzlkNDFkNWJhZDRmMzg3ZGM0NSJdLCJyZXNvdXJjZUdyb3VwcyI6Ikg0c0lBQUFBQUFBQS80cXVWaW91U2c1S0xjNHZMVXBPOVV4UnNsTFNVdEpSS3Frc1NGV3lVaXJPTEVsVnFvMEZCQUFBLy8rY3ZYZktKUUFBQUE9PSIsInJvbGVzIjpbIk9CU0VSVkVSIl0sInNlc3Npb25JZCI6ImJlZjJiYzlhLWYxY2EtNTliNi04NjIxLTE5NDdiZDdjNzBiNyIsInN1YiI6IjY5Mzk5NTk5YmI1YTZiMDA1MDdhNzAxMCIsInRlbmFudElkIjoiNjdiOTM1YzU5MTU1ZjUwMDEzNTE1ZDFjIiwidGVuYW50TmFtZSI6IlROVDAiLCJ1c2VybmFtZSI6ImRldm5ldHVzZXIifQ.sfbvp4i_8eXCOC_AJrrwgcKSDEpOx0fX8zFlId2jzd1ej0-_kzVC8_cr3G5TTPiFXCWRWXpVieqYUmQIJCdaxA",
#  "message": ""
# }



# 以下の方法でも取得可能

headers = {
    "content-type": "application/json",
    "Authorization": "Basic"
}

# authでuser, passwordを指定
res = requests.request(
    "POST",
    URI,
    headers=headers,
    auth = (user, password),
    verify=False,
)

# ---------------------------------

# Headersを指定せず、request.postでPOSTを実施
res = requests.post(
    url,
    auth=(username, password),
    verify=False
)

Catalyst Centerのノード情報取得

ノード取得ではトークン取得の場合とは異なるURIに対してAPIを実行する。
GET  https://sandboxdnac.cisco.com/dna/intent/api/v1/nodes-config


# 前章の続き。tokenにトークンキーがある前提とする。
token = json.loads(res.text)["Token"]

# ノード情報取得用のURIを指定
nodeinfo_url = "https://sandboxdnac.cisco.com/dna/intent/api/v1/nodes-config"

# 認証トークンをHTTPヘッダーに設定
nodeinfo_headers = {"X-Auth-Token": token}

# リクエストを実行。Token取得時とは異なり、User/passwordは不要
nodeinfo_res = requests.request(
    "GET",
    nodeinfo_url,
    headers=nodeinfo_headers,
    verify=False,
)

#リクエストの実行結果
"""
{
 "version": "2.0",
 "response": {
  "nodes": [
   {
    "ntp": {
     "auth": false,
     "keys": null,
     "server_parms": null,
     "servers": null
    },
    "network": [
     {
      "inet": {
       "gateway": "10.10.20.254",
       "host_ip": "10.10.20.85",
       "host_secondary_ip": "",
       "netmask": "255.255.255.0",
       "routes": []
      },
      "inet6": {
       "gateway": "",
       "host_ip": "",
       "host_secondary_ip": "",
       "netmask": "",
       "routes": null
      },
      "interface": "enterprise",
      "intra_cluster_link": false,
      "lacp_mode": false,
      "lacp_supported": true,
      "slave": [
       "ens160"
      ]
     },
     {
      "inet": {
       "gateway": "",
       "host_ip": "169.254.6.66",
       "host_secondary_ip": "",
       "netmask": "255.255.255.128",
       "routes": []
      },
      "inet6": {
       "gateway": "",
       "host_ip": "",
       "host_secondary_ip": "",
       "netmask": "",
       "routes": null
      },
      "interface": "cluster",
      "intra_cluster_link": true,
      "lacp_mode": false,
      "lacp_supported": true,
      "slave": [
       "mks-icl"
      ]
     }
    ],
    "proxy": {
     "http_proxy": "",
     "https_proxy": "",
     "https_proxy_clear_text_password": "",
     "https_proxy_password": "",
     "https_proxy_username": "",
     "no_proxy": []
    },
    "platform": {
     "product": "DN-SW-APL",
     "provider": "VMware, Inc.",
     "serial": "VMware-42 3f 1b cc 7f 4e e0 c1-2b 58 33 be 2b 9d 1e 90",
     "uuid": "CC1B3F42-4E7F-C1E0-2B58-33BE2B9D1E90",
     "vendor": "Cisco Systems Inc"
    },
    "id": "9b9cc1b6-2494-4a7e-98d1-248f49661628",
    "name": "node-0"
   }
  ]
 }
}
"""

POSTMANでのAPI実行

Postmanにユーザ名載ってるせいで、うっかり本名晒しそうになった。ワハハ…
なんか人名みたいな文字列があったらこっそり教えてね。

Token取得

Catalyst Centerのプラットフォーム > 開発者用ツールキットから、Authentication APIを選択。
※記事冒頭の画像を参照。

URI↓をコピー
https://sandboxdnac.cisco.com/dna/system/api/v1/auth/token

1.Authorization欄で、「Auth Type」に Basicを選択。
 username は「devnetuser」, Passwordは「Cisco123!」を入力

image.png

2.Headers欄で「Content-Type:Application/json」を入力。
3.[Send]を押下。

image.png

下画面にトークン情報が表示された。
このトークンをヘッダに格納してCatalyst Centerへリクエスト実行を行う。


認証Tokenを用いたリクエスト実行

以下を実行する。
Catalyst Centerの「Get Device list」参照
GET https://sandboxdnac.cisco.com/dna/intent/api/v1/network-device

image.png

1.認証Tokenをヘッダーに設定するため、前の手順で取得したTokenをコピー(""無し)
2.Headers欄に「x-auth-token:[トークン値]」を設定
3.[Send]を押下。

これにより、取得できた情報が下画面に表示される。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?