Exastro IT AutomationをAPIから触ってみる（ExcelVBA編）

#はじめに

ITA（Exastro IT Automation）は、システム設定をIaC（Infrastructure as Code）化して一元管理や自動実行するためのオープンソースフレームワークです。
システム構成に関するさまざまな情報（機器情報、設定値、作業履歴など）を管理することと、AnsibleなどのPF構築ツールと連携してシステム構築や運用設定などを実行する機能を備えています。

今回はExcelVBAを使って、事前に準備したITAに対して簡単な操作を行ってみます。
詳細なドキュメントは↓をご覧ください。
[ITA API利用手順マニュアル](https://exastro-suite.github.io/it-automation-docs/asset/Documents_ja/Exastro-ITA_%E5%88%A9%E7%94%A8%E6%89%8B%E9%A0%86%E3%83%9E%E3%83%8B%E3%83%A5%E3%82%A2%E3%83%AB_RestAPI.pdf)

#使用環境
Exastro IT Automation 1.6.0
CentOS7（ITAサーバ）
Windows 10(クライアントPC)
Excel2016
![image (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/570777/ea414ac7-0c31-7f2b-cc54-8cbedc4c8376.png)

##1.ITAサーバの準備
APIリクエストを送付するITAサーバを作成します。
こちらの記事で詳細に説明されていますので、作成時に参照してください。
[Exastro IT Automationをインストールしてみた（v1.6.0）](https://qiita.com/standsetx/items/54ff0786db151d980026)
ログイン後にメインメニューが確認できればOKです。
##2.APIで操作するパラメータシートを作成
ITAの機能の1つである【メニュー作成】機能を使ってメニューを作成します
そのメニューにパラメータシートを準備し、APIリクエストを送って操作をしてみたいと思います。
###2-1メニューグループ作成
・メニューグループより【管理コンソール】をクリック
・【メニューグループ管理】メニューを選択、登録ボタンをクリック
今回は以下のように登録します。

| カラム名| メニューグループ（ID:名称） | 表示順序 |
| :-- | :-- | :-- |
| パラメータ | Sample_menu-group | 999 |
![image (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/570777/43e0f14d-9965-1e95-6ca3-f758da5f5e6a.png)
###2-2メニュー作成
・【メインメニュー】を選択し、【メニュー作成】をクリック
・【メニュー定義/作成】を選択し以下参考に入力
以下のように入力し【登録】ボタンをクリックしてください。

| カラム名| 項目1 | 最大バイト数 | 項番 | メニュー名 | 作成対象 | 表示順序 | 対象メニューグループ |
| :-- | :-- | :-- | :-- | :-- | :-- | :-- | :-- |
| パラメータ | param1 | 256 | 1 | Sample_sheet | データシート | 1 | Sample_menu-group |
![image (3).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/570777/6bdaa3e8-bbb9-edee-f000-412ed3353176.png)
###2-3ロール・メニュー紐づけ管理

・【メインメニュー】を選択し、【メニュー作成】をクリック
・メニューグループより【管理コンソール】をクリック
・【ロール・メニュー紐付管理】を選択、登録ボタンをクリック

以下のように入力し【登録】ボタンをクリックしてください。

| カラム名| ロール（ID:名称） | メニューグループ:メニュー | 紐付 |
| :-- | :-- | :-- | :-- |
| パラメータ | 1:システム管理者 | 1:Sample_menu-roup:1:Sample_sheet | メンテナンス可 |
登録を完了した後に【メインメニュー】に戻ると、作成した【Sample_menu-group】がメニューグループに表示されているはずです。
![キャプチャ1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/570777/639231b3-dd86-3ae2-af64-3c6082540ad9.png)
実際に作成されたメニュー
![image (6).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/570777/d70c22e1-d59b-df48-4da1-a835b103070c.png)
これでパラメータシートの準備は完了です。
##3.ExcelVBAの準備
パラメータシートの作成が完了したところで、ExcelVBAの作成に取り掛かるわけですが・・・

**ご用意したものがこちらです**
[githubからツールをダウンロード](https://github.com/exastro-suite/knowledges/blob/main/Exastro_IT_Automation%E3%82%92Excel%E3%81%8B%E3%82%89API%E3%81%A7%E6%93%8D%E4%BD%9C%E3%81%99%E3%82%8B%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB(VBA).zip)

簡単に使用方法を説明しますと、
・接続情報、操作したいメニューのメニューIDを入力
・メニューに対する操作を選択（出力、登録、更新など）
・必要に応じてパラメータをjson形式で入力
すると結果をインプット/アウトプットしてくれるツールになっています。

~~このツールを紹介するための記事といっても過言ではありません。~~
**注意事項として、ExcelVBAの参照可能なライブラリとして「Microsoft XML, v6.0」にチェックが入っている必要があります。**
##4.APIリクエストを送ってみる
というわけで早速APIリクエストを送ってみましょう。
作成したメニュー【Sample_sheet】の【param1】カラムに対して、パラメータを登録します。
###4-1カラム数の確認
パラメータシートに対して更新を行う場合、「**そのメニューの何番目のカラムを操作するか**」
を指定してリクエスト内容を記載する必要があります。
まずはカラム数の確認のために、X-Commandに【INFO】を指定して、対象のメニューの列情報を取得してみます。
以下のように値を入力します。

| カラム名| パラメータ |
| :-- | :-- |
| URL | http://＜IPアドレスかhostname＞/default/menu/07_rest_api_ver1.php?no=＜【Sample_sheet】のメニューID＞ |
| Port | 80 |
| UserID | administrator |
| UserPW | ＜設定したパスワード＞ |
| Method | POST |
| X-Command | INFO |
| Parameter | ＜空欄＞ |

【リクエスト送信】をクリックすると、以下のようにレスポンスが返ってきました。

`retCode 200`
`retText	{"status":"SUCCEED","resultdata":{"CONTENTS":{"INFO":["実行処理種別","廃止","No","param1","備考","最終更新日時","更新用の最終更新日時","最終更新者"]}}}`

着目したいのは`"INFO"`より後ろの部分です。
`["実行処理種別","廃止","No","param1","備考","最終更新日時","更新用の最終更新日時","最終更新者"]`
これが列情報です。今回パラメータを登録したい【param1】は4番目にあります。
カラムの数え方は0からはじまるので、【param1】は3カラム目にあることがわかりました。

※補足として、カラムはメニュー画面からも確認が可能です。
メニューの説明は以下のドキュメントを参照してください。
カラム周りの話は[Exastro-ITA_利用手順マニュアル_管理コンソール 31ページ](https://exastro-suite.github.io/it-automation-docs/asset/Documents_ja/Exastro-ITA_%E5%88%A9%E7%94%A8%E6%89%8B%E9%A0%86%E3%83%9E%E3%83%8B%E3%83%A5%E3%82%A2%E3%83%AB_%E7%AE%A1%E7%90%86%E3%82%B3%E3%83%B3%E3%82%BD%E3%83%BC%E3%83%AB.pdf)に記載されています。
###4-2パラメータを登録する
登録したいパラメータは何カラム目にあるか確認することができました。
それでは実際に登録してみましょう。

| カラム名| パラメータ |
| :-- | :-- |
| URL | http://＜IPアドレスかhostname＞/default/menu/07_rest_api_ver1.php?no=＜【Sample_sheet】のメニューID＞ |
| Port | 80 |
| UserID | administrator |
| UserPW | ＜設定したパスワード＞ |
| Method | POST |
| X-Command | EDIT |
| Parameter | {"0":{"0":"登録","3":"parameter1"}} |
・上記の入力ができたら、【リクエスト送信】のマクロボタンをクリック
`retCode 200`
`retText {"status":"SUCCEED","resultdata":{"LIST":{"NORMAL":{"register":{"name":"登録","ct":1},"update":{"name":"更新","ct":0},"delete":{"name":"廃止","ct":0},"revive":{"name":"復活","ct":0},"error":{"name":"エラー","ct":0}},"RAW":[["000","201",""]]}}}`

成功しました。
【登録】の欄の【ct】(レコード数)が1になっていますね。
早速ITAのwebコンソールに戻って結果を確認してみましょう。

・【Sample_sheet】の【表示フィルタ】の【廃止】から【全レコード】を選択
![image (5).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/570777/008607ee-2791-fe4e-ef03-9975be69249b.png)
登録されていれば成功です。
###補足_登録結果を確認する
事前の確認、登録をAPIを使って行ったので事後の確認も行ってみましょう。

【X-Command】にFILTERを選択することで、
【Parameter】に合致したレコードの情報を取得することができます。
※【Parameter】を空欄にすることで全件取得が可能。
今回は【Parameter】に登録したパラメータを指定することで、合致したレコードのみ取得できるはずです。

| カラム名| パラメータ |
| :-- | :-- |
| URL | http://＜IPアドレスかhostname＞/default/menu/07_rest_api_ver1.php?no=＜【Sample_sheet】のメニューID＞ |
| Port | 80 |
| UserID | administrator |
| UserPW | ＜設定したパスワード＞ |
| Method | POST |
| X-Command | FILTER |
| Parameter | {"3":{"NORMAL":"parameter"}} |

・上記の入力ができたら、【リクエスト送信】のマクロボタンをクリック

`retCode 200`
`retText {"status":"SUCCEED","resultdata":{"CONTENTS":{"RECORD_LENGTH":2,"BODY":[["実行処理種別","廃止","No","param1","備考","最終更新日時","更新用の最終更新日時","最終更新者"],[null,"","1","parameter1",null,"2020\/12\/21 01:42:03","T_20201221014203531030","システム管理者"]],"UPLOAD_FILE":[]}}}`

上記のようにレコードの情報が取得できれば成功です。
##まとめ
作成したITAサーバに対して、ExcelVBAからAPIリクエストを送付してみました。
ほとんどのメニューで今回行った操作が可能で、ConductorやMovementの登録や実行なども行えるようです。
次回はshellスクリプトからAPIリクエストの送付を行ってみたいと思います。
##索引
[ExastroSuite コミュニティページ](https://exastro-suite.github.io/docs/index_ja.html)
[Exastro IT Automation](https://exastro-suite.github.io/it-automation-docs/index_ja.html)
[Exastro-ITA_利用手順マニュアル_管理コンソール](https://exastro-suite.github.io/it-automation-docs/asset/Documents_ja/Exastro-ITA_%E5%88%A9%E7%94%A8%E6%89%8B%E9%A0%86%E3%83%9E%E3%83%8B%E3%83%A5%E3%82%A2%E3%83%AB_%E7%AE%A1%E7%90%86%E3%82%B3%E3%83%B3%E3%82%BD%E3%83%BC%E3%83%AB.pdf)
[Exastro-ITA_利用手順マニュアル_RestAPI](https://exastro-suite.github.io/it-automation-docs/asset/Documents_ja/Exastro-ITA_%E5%88%A9%E7%94%A8%E6%89%8B%E9%A0%86%E3%83%9E%E3%83%8B%E3%83%A5%E3%82%A2%E3%83%AB_RestAPI.pdf)
[Exastro IT Automationをインストールしてみた（v1.6.0）](https://qiita.com/standsetx/items/54ff0786db151d980026)