Cisco DNA CenterのAPIを使ってConfigをダウンロードしてみよう！

# はじめに
初めまして、Cisco 土谷と申します。
この記事はシスコの有志による Cisco Systems Japan Advent Calendar 2022 (2枚目) の 25 日目として投稿しています!!
本日は最終日になりますね:sparkles:

https://qiita.com/advent-calendar/2022/cisco

面白い記事や有益な記事が数多くありますので、興味ある方はぜひご覧ください！


本記事では**Cisco DNA Centerで管理しているデバイスのConfigをAPIでダウンロードする方法**をご紹介いたします。
CUI操作なし・コードを一切書かず、Postmanを使って実施できますので興味のある方はぜひご覧ください！


:::note info
この記事は以下の人にオススメです！
:black_small_square:　Cisco DNA CenterのAPIを触ってみたい方
:black_small_square:　Cisco DNA Centerで管理している機器のconfigをダウンロードしたい方
:::


# 本題に入る前に
まず最初に「**なぜAPIを使ってConfigをダウンロードする必要があるのか？**」について、触れておきたいと思います。

Cisco DNA CenterではGUI上でデバイスのConfigを確認したり、Configをエクスポートできる機能が用意されております。

以下の図は、Config表示機能の画面です。
ご覧の通り、Configの一部(パスワードや証明書情報など)がマスキングされている点、お気づきかと思います。
![8_DevNet_Sandbox_dnac_config.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2987901/b31a41f7-f367-11b7-d18f-acfee2d0423d.png)

また、右上の「CUI出力のエクスポート」からConfigをダウンロードすることができます。
ただし、以下のようにダウンロードしたConfigも一部マスキングされております。
![9_DevNet_Sandbox_dnac_config-get.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2987901/9f1ad908-f39a-4342-4589-b052863130db.png)

このようにCisco DNA CenterのGUIからでは、Configの一部がマスキングされてしまいます。
Configの利用用途次第では「**マスキングされていないConfigを取得したい！**」という方も、いらっしゃるのではないでしょうか？

APIを使うことで、マスキングされていないConfigをダウンロードできますので、本記事でご紹介できればと思います。

# 検証環境のご紹介　（DevNet Sandbox）
今回はみなさまも利用可能な**DevNet Sandbox環境**を使って、進めていきます。

[DevNet Sandbox](https://developer.cisco.com/site/sandbox/)とは「**Ciscoが無償提供しているAPIを試すことができる検証環境**」です。
DevNet Sandbox URL：https://developer.cisco.com/site/sandbox/

Cisco DNA Centerの実機が手元になくても、APIを試すことができる素敵な環境です。
Cisco DNA Center以外の製品もございますので、ご興味のある方はぜひ利用してみて下さい！

:::note info
DevNet Sandboxを使うには、**DevNetのアカウントが必要**です。
アカウントをお持ちでない方は「[DevNetのアカウントを作成しよう](https://community.cisco.com/t5/devnet-%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%83%93%E3%83%AA%E3%83%86%E3%82%A3%E3%83%89%E3%82%AD%E3%83%A5%E3%83%A1%E3%83%B3%E3%83%88/devnet%E3%81%AE%E3%82%A2%E3%82%AB%E3%82%A6%E3%83%B3%E3%83%88%E3%82%92%E4%BD%9C%E6%88%90%E3%81%97%E3%82%88%E3%81%86/ta-p/3923720)」をご参照ください。
:::

## DevNet Sandboxへアクセス
それでは、DevNet Sandboxへアクセスし、使用するSandboxを見てみましょう!

まずは、[DevNet Sandbox](https://developer.cisco.com/site/sandbox/)へアクセスし、「**SIGN UP FREE**」をクリックします。
![1_DevNet_Sandbox_top.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2987901/7ac14dc8-ae99-5d80-c7ec-89f7fa36e72c.png)

以下のように、ログインページへ遷移しますので、DevNetのアカウントでログインします。
![2_DevNet_Sandbox_login.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2987901/9e3a99ca-5f35-d679-d976-1ddfd407e1b1.png)

ログイン後、以下のような画面になります。
「**Get started with Sandbox**」をクリックしましょう。
![3_DevNet_Sandbox_af_login.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2987901/42e2afae-b39d-31e9-14ef-d835ce7d84fc.png)

以下のように、ラボカタログの一覧が表示されます。
今回は予約なしで利用できる「**Cisco DNA Center AO 2.2.3.4**」をクリックし、進めたいと思います。
![4_DevNet_Sandbox_dnac_always_on.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2987901/72e1172d-b9d0-6ef0-f9a4-031572c28363.png)

## ラボの概要や接続方法の確認
「Cisco DNA Center AO 2.2.3.4」をクリックすると、以下のようなラボの詳細画面へ遷移いたします。
この画面では**左側にラボの概要や接続方法**、**右側にはラボの構成情報**が表示されます。

:::note info
水色枠の部分にはCisco DNA Centerへログインする時に使用するIDやパスワードが記載されております。(本記事上ではマスキングしております。)
:::

![5_DevNet_Sandbox_dnac_network.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2987901/aa85829a-015a-175e-751e-b6731d00f415.png)


DevNet Sandboxの説明は以上です。

ここからが本題ですね！
今回はDevNet Sandbox環境(Cisco DNA Center AO 2.2.3.4)を使って、**spine1のConfigをAPIでダウンロードする方法**をご紹介いたします。

# APIを使ってConfigをダウンロードしてみよう！
まず最初に、全体の流れをご紹介いたします。
APIを使ってConfigをダウンロードするには、以下の**5つの作業**が必要です。

:one:　トークンを取得する
:two:　デバイスのIDを取得する
:three:　Configをエクスポートする
:four:　ダウンロードURLを取得する
:five:　ConfigファイルをローカルPCへダウンロードする

それでは1つずつ見ていきましょう！

## :one:　トークンを取得する
まず最初に以下のAPIを使って、トークンを取得します。

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

Postmanを起動し、リクエストメソッドは「POST」、URLは上記URLを指定します。

以下がPostmanの画面イメージです。
![10_Authentication API.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2987901/5768f2ae-4a03-9189-5b27-884efcd566d2.png)

:::note info
Authorization情報はDevNet Sandboxのラボ詳細画面(接続方法欄)に記載されていた「ユーザID」「パスワード」を使いましょう。
![25_Userid_pass.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2987901/b10497f1-b506-7f86-be49-4f147867f11b.png)
:::

入力が完了したら、「**Send**」をクリックします。
以下の通り、トークンに関するレスポンスが返ってきます。
![11_Get_Token.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2987901/d8d4c15e-cc46-c205-9da7-f4bb186d324a.png)
このトークンを使ってAPIを実行していきます。

## :two:　デバイスのIDを取得する
次に以下のAPIを使って、Cisco DNA Centerで管理しているデバイス情報を取得します。

```
GET https://sandboxdnac.cisco.com/dna/intent/api/v1/network-device
```
Postmanにてリクエストメソッドは「GET」、URLは上記URLを指定します。
入力が完了したら、「**Send**」をクリックします。
![12_Get_Device_list.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2987901/582aaba3-9537-7b99-3057-7fffac4f68de.png)

以下の通り、デバイス情報に関するレスポンスが返ってきます。
ここで**対象デバイスのid(デバイスID）をコピー**します。

今回はspine1(Catalyst 9300 Switch)のConfigをダウンロードしたいので、idは「f16955ae-c349-47e9-8e8f-9b62104ab604」です。
このidの値は次のAPIで使いますので、コピーしておきましょう！
![13_Get_Device_list_response.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2987901/c7e49af4-56c0-c1d1-3595-961d09ce28ec.png)

## :three:　Configをエクスポートする
続いて、以下のAPIを使いConfigのエクスポートを実行します。

```
POST https://sandboxdnac.cisco.com/dna/intent/api/v1/network-device-archive/cleartext
```
:::note info
このAPIでは、**デバイスIDとパスワードをBody欄に入力する必要があります。**
フォーマットはCisco DNA CenterのGUIで確認可能です。
:::

それでは、Cisco DNA Centerにてフォーマットを確認してみましょう！

Cisco DNA Center( https://sandboxdnac.cisco.com )へログインし、メニューアイコンから「**プラットフォーム > 開発者用ツールキット**」の順でクリックします。
開発者用ツールキットの画面が表示されたら、以下のように右上の検索ボックス上で「Archive」で検索し、「**Export Device configurations**」をクリックしましょう。

![14_Export_Device_configurations_dnac01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2987901/3fab03b7-394e-b1c3-181c-9555073cf99c.png)

「**MODEL SCHEMAS**」欄に、フォーマットが表示されますので、コピーしましょう。
![15_Export_Device_configurations_dnac02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2987901/bff663b0-370d-a673-bb3c-d89f2ed3cc2f.png)
フォーマットは以下の通りです。
```
{
    "deviceId": [
        "string"
    ],
    "password": "string"
}
```

Cisco DNA Centerでの作業はここまでです。

次にPostmanにてリクエストメソッドは「Post」、URLは以下のURLを指定します。
```
POST https://sandboxdnac.cisco.com/dna/intent/api/v1/network-device-archive/cleartext
```
また、先程コピーしたフォーマットをBody欄へコピーします。

以下の通り、**deviceIdのstring欄には1つ前で取得したデバイスのid（f16955ae-c349-47e9-8e8f-9b62104ab604)を入力**し、**passwordのstring欄には任意のパスワードを入力**します。

入力が完了したら、「**Send**」をクリックします。
※今回はTest0001!というパスワードを使っています。
![16_Export_Device_configurations.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2987901/9cde2143-c3a5-0542-23aa-2957a5a9994c.png)

:::note info
ここで設定したパスワードを使って各種ConfigファイルがZIP圧縮されますので、解凍時にこのパスワードが必要になります。
:::

以下の通り、タスク情報に関するレスポンスが返ってきます。
taskIdは次のAPIで使うので、**taskId（254eec0d-e620-47dd-a41e-1158fae52199）をコピー**します。
![17_Export_Device_configurations_response.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2987901/eb45617a-7ca2-8e00-362c-bf66dc418649.png)

## :four:　ダウンロードURLを取得する
続いて、先程エクスポートしたConfigファイルをダウンロードするには、ダウンロードURLを取得する必要がございます。

以下のAPIを使って、先程実行したConfigエクスポートのタスク内容を確認いたします。

```
GET https://sandboxdnac.cisco.com/dna/intent/api/v1/task/{taskId}
```

Postmanにてリクエストメソッドは「GET」、URLは上記URLを指定します。
{taskId}箇所には、**先程コピーしたtaskId(254eec0d-e620-47dd-a41e-1158fae52199)をコピー**し、「**Send**」をクリックします。

![18_Get_task_by_Id.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2987901/9eb830f4-c86f-0472-ec85-e09b6f489667.png)

以下の通り、タスク(詳細)に関するレスポンスが返ってきます。
additionalStatusURLはConfigファイルをダウンロードする時に使うURLです。

additionalStatusURLは次のAPIで使うので、**additionalStatusURL（/api/v1/file/ccce0264-5e39-4b4e-8c7d-b90f4ca1906d）をコピー**します。

![19_Get_task_by_Id_response.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2987901/33cb5a29-9211-3e24-42ba-8ee6560d97ed.png)


## :five:　ConfigファイルをローカルPCへダウンロードする
最後に以下のAPIを使って、Configファイルをダウンロードします。

```
GET https://sandboxdnac.cisco.com/dna/intent/api/v1/file/{fileId}
```

Postmanにてリクエストメソッドは「GET」、URLは上記URLを指定します。

「/api/v1/file/{fileId}箇所」に先程コピーした**additionalStatusURL（/api/v1/file/ccce0264-5e39-4b4e-8c7d-b90f4ca1906d）を貼り付け**、「**Send and Download**」をクリックします。
![20_Download_a_file_by_fileId.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2987901/8a043d72-dcf7-83d9-1914-37a03e369507.png)

以下の通り、Configファイルをダウンロードできます。
![21_Download_a_file_by_fileId_result01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2987901/f9b4930d-fd80-ceb5-33d9-80383c1b49c4.png)

Configファイルを開くと、パスワードが聞かれます。
先程指定したパスワード（今回はTest0001!）を入力します。
![22_Download_a_file_by_fileId_result02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2987901/8ccbc636-d245-e483-e545-42850065a261.png)

ご覧の通り、**無事にConfigファイル(Running-config, Startup-config, vlan.dat)の取得ができました!**
![23_Download_a_file_by_fileId_result03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2987901/b7c348d1-9cb5-ff10-609b-66cf20b1f415.png)

では、Configを開いてみましょう！
左側がCisco DNA CenterのGUIで取得したConfig、右側が本記事で紹介したAPIで取得したConfigです。
マスキングされていた部分も表示されていますね！
![24_Download_a_file_by_fileId_result04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2987901/afdf921b-ab76-c12d-1758-5fe612a902a3.png)

マスキングされていないConfigを取得されたい方は、ぜひお試しください！

# 【おまけ】 Configuration Archive機能
Cisco DNA Center 2.3.3以降では、外部サーバへConfigアーカイブできる機能が追加されております。

:::note info
本機能はCisco DNA CenterのGUIで設定可能です！
:::

Cisco DNA Centerはアップグレードして頂くことで、真の価値を感じて頂ける製品です！
本機能にご興味がある方は、Cisco DNA Centerのアップグレードもご検討されてみてはいかがでしょうか？

# まとめ
今回はCUI操作なし・コードを書かずに、Configをダウンロードする方法をご紹介いたしました。
ご興味がある方はぜひお試しください！

また、[DevNet Sandbox](https://developer.cisco.com/site/sandbox/)では、Cisco DNA Center以外の製品も用意しております。
手軽にAPIを試せますので、こちらも是非ご活用ください！

# 免責事項
本サイトおよび対応するコメントにおいて表明される意見は、投稿者本人の個人的意見であり、シスコの意見ではありません。本サイトの内容は、情報の提供のみを目的として掲載されており、シスコや他の関係者による推奨や表明を目的としたものではありません。各利用者は、本Webサイトへの掲載により、投稿、リンクその他の方法でアップロードした全ての情報の内容に対して全責任を負い、本Web サイトの利用に関するあらゆる責任からシスコを免責することに同意したものとします。