IntersightをCLIでさくっと自動化 (isctlを試してみよう！)

# :santa_tone1: はじめに

この記事はシスコの有志による Cisco Systems Japan Advent Calendar 2023 の 23日目として投稿しています。

* 2017年版: https://qiita.com/advent-calendar/2017/cisco
* 2018年版: https://qiita.com/advent-calendar/2018/cisco
* 2019年版: https://qiita.com/advent-calendar/2019/cisco
* 2020年版 1枚目: https://qiita.com/advent-calendar/2020/cisco
* 2020年版 2枚目: https://qiita.com/advent-calendar/2020/cisco2
* 2022年版(1,2): https://qiita.com/advent-calendar/2022/cisco
* 2023年版: https://qiita.com/advent-calendar/2023/cisco<---こちら

## :santa_tone5: IntersightをCLIで操作するのって何がうれしいの？
IntersightはMerakiのようなイメージでクラウド上でデータセンターインフラを一元的に管理できます。基本的にはブラウザベースのGUIが提供され、直感的にわかりやすく操作ができるようになっています。

![whatisIntersight.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215274/765c7958-cb82-ae14-136d-7f1f79c8e7bc.png)

ただし、以下のようなケースでは、今回ご紹介するCLI(isctl)を使っていただくと、より深い情報をパワフルかつ、簡単に取得したり、設定変更を行ったりできますので、知っておいていただくと便利です。
## CLIが便利なユースケース

* 資産管理対応のため特定サーバにどのパーツが搭載されているかを即座に把握したい。
* パーツ交換のためパーツのシリアル番号一覧表を作成したい。
* 日常運用で一元化された大量のインフラの設定を自動化したい。(Server ProfileやPolicy作成・変更など)

## CLI(isctl)を導入しよう! (3Stepでかんたん):thumbsup:
isctlはCiscoの社員が開発したツールです。
https://developer.cisco.com/codeexchange/github/repo/cgascoig/isctl/

本記事では、Linuxの端末にインストールする場合を例に説明します。
https://github.com/cgascoig/isctl
### :one:
以下より、最新のリリースをDLします。
https://github.com/cgascoig/isctl/releases/latest
そして、.tar.gz ファイルを展開し、isctl binaryを移動します (例 /usr/local/bin).

### :two: 
API Keyの入手
isctl は Cisco Intersight REST APIを使用します。そのためにAPI keyの入手が必要です。
Intersight SaaS 管理ポータルにログオンし、System-Settings-API Keys- Generate API Keyを押下します。

![intersight-apikey1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215274/a6d14dae-37fb-a72e-5446-986c499f3474.png)
Generate API Key画面ではAPI Key Purposeをschema version 2を選んで、Generateを押下します。

![intersight-apikey2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215274/2b057e85-f414-5df2-fa7b-f4fa53eb6a43.png)

API KeyIDとSecret Keyをエクスポートして、Localに配置しておきます。

![intersight-apikey3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215274/7ddcaa1f-ca53-3ff6-7d2f-7f490425c5be.png)

### :three: 
初期セットアップとして、Step2で入手したAPI KetとSecret Keyを登録します。
登録したIntersightアカウントに対してのみ、操作可能です。
```shell:Intersightの特定アカウントに対する設定開始
❯ isctl configure
```
```shell-session:API Key IDの入力
❯ isctl configure
keyID is currently ''
Enter new keyID or press Enter to keep existing:
61970b917564612d333d4d41/61970b917564612d333d4d46/626f24e57564612d335c906d
key filename is currently ''
Enter new key file name or press Enter to keep existing:
```

```shell:API Secret Key Fileの入力
❯ isctl configure
keyID is currently ''
Enter new keyID or press Enter to keep existing:
61970b917564612d333d4d41/61970b917564612d333d4d46/626f24e57564612d335c906d
key filename is currently ''
Enter new key file name or press Enter to keep existing: ~/dev/api-keys/intersight-cgascoig-clus-demo.pem
Intersight API server is currently 'intersight.com'
Enter new Intersight API server or press Enter to keep existing: <CR>
INFO[0053] Writing config file                          
❯
```
これだけで準備完了！では、CLIの世界へ！

## isctlの基本コマンド例
```shell:Intersightに登録されているNTP Policyを表示する
[root@localhost ~]# isctl get ntp policy
-----------------------------  -----------------------------  ----------------------------  ------------  ------------------------  ------------------
                        Name                           Moid       AuthenticatedNtpServers       Enabled                NtpServers            Timezone
-----------------------------  -----------------------------  ----------------------------  ------------  ------------------------  ------------------
                   ATX-Demo2       643f748062757231010bbaab                                        true                   2.2.2.2          Asia/Tokyo
               ATX-DemoJimbo       64411f0c6275723101950a53                                        true                   4.4.2.2          Asia/Tokyo
                     IMM-NTP       644f5d366275723101a3f54f                                        true               10.64.58.51        Pacific/Niue
      restapi-readonly-check       65370f266275723101819986                                        true             192.168.1.254          Asia/Tokyo
                api-test-ntp       65372372627572310189be26                                        true               192.168.1.1        Pacific/Niue
                     NtpTest       65694f316275723101c97167                                        true                   1.1.1.1        Pacific/Niue
 -----------------------------  -----------------------------  ----------------------------  ------------  ------------------------  -----------------
  
```
```shell:Intersightに登録されているサーバ名、モデルを取得する
❯ # Get all rack servers
[root@localhost ~]# isctl get compute rackunit --select Name,Model
-------------------------------------------  -----------------------------  ------------------------
                                      Name                           Moid                     Model
-------------------------------------------  -----------------------------  ------------------------
                         CS-FI6248-infra-3       6376cf3e76752d31361ffb74            UCSC-C220-M5SX
                         CS-FI6248-infra-1       6376cf3e76752d31361ffb9c            UCSC-C220-M5SX
                         CS-FI6248-infra-2       6376cf4076752d31361ffc94            UCSC-C220-M5SX
                          C220-WZP23380ZQQ       6392e67e76752d3232b3c3e0                DN2-HW-APL
                          C220-FCH2013V1SS       6392e71e76752d3232b40476            APIC-SERVER-M2
                          C220-FCH2224V13Q       6392e73876752d3232b40dfe                DN1-HW-APL
                          C220-WZP24241EDD       64365ba276752d3201ebc359            UCSC-C220-M5SX
                          C220-WZP22060AWK       6549a3d976752d3201e8c387            UCSC-C220-M5SX
                            CS-HXFI-6332-2       6556d5e776752d32016d38e6               HX220C-M5SX
                            CS-HXFI-6332-1       6556d5e776752d32016d38f6               HX220C-M5SX
                            CS-HXFI-6332-3       6556d5e776752d32016d3903               HX220C-M5SX
                            CS-HXFI-6332-4       655b3f2276752d32019108c5               HX220C-M5SX
    HITACHI-HA8000V/DL360 Gen10-SGH927X0FC       655d869776752d3201b122cf       HA8000V/DL360 Gen10
                           CS-FI6454-IMM-1       65702a3076752d3201cccd16            UCSC-C220-M5SX
-------------------------------------------  -----------------------------  ------------------------
```
```shell:Intersightアカウントに対して、ServerProfileを作成する
　 isctl create server profile --Name SP-CreatedbyisCTL --Organization default  --TargetPlatform "FIAttached" 
```
![create-serverprofile.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215274/78e64c37-dab6-f70e-69fb-400c064bfcd3.gif)


## isctlの応用コマンド例

資産管理やパーツ交換の際にシリアルを一覧で出力したいケースがあります。
そんな時こそ、isctlの出番です。GUIだと手間がかかる調査も、isctlなら痒い所に手が届きます。

```shell:Intersightに登録されている全てのサーバに搭載済みメモリのシリアル番号を取得する
  isctl get memory unit --filter "Serial ne ''" --select Serial --jsonpath '$[*].Serial'
```

## まとめ
今回はCLIで便利にintersightを使いこなすための方法についてお知らせしました。
別途、isctlを使用した応用方法について、私のチームのサクセスぽーたるで詳しくご紹介する予定です。
ぜひ、以下のポータルもご注目ください！
サクセスぽーたる
https://community.cisco.com/t5/-/-/ta-p/4791205



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