Exastro IT Automation ver1.6.0のキホンの"キ"

#関連リンク
+ [Exastro IT Automationをインストールしてみた（v1.6.0）](https://qiita.com/standsetx/private/54ff0786db151d980026)
+ [Exastro IT Automationを実際に動かしてみた(クイックスタート)](https://qiita.com/standsetx/items/902ea7eeac2c0f0347a2)
+ [Exastroコミュニティ](https://exastro-suite.github.io/it-automation-docs/index_ja.html)
+ [利用手順マニュアル メニュー作成機能](https://exastro-suite.github.io/it-automation-docs/asset/Documents_ja/Exastro-ITA_利用手順マニュアル_メニュー作成機能.pdf)
+ [Exastro IT Automationのキホンの”キ”](https://qiita.com/wakky0328/items/136ee1009edfdde03375)
+ [Exastro IT Automation ver1.5.0のキホンの"キ"](https://qiita.com/wakky0328/items/cf29c22cbf7cb42d462b)


#はじめに
2020/11/25にExastro IT Automation Ver1.6.0（以下ITAver1.6.0）がリリースされました。

ITAver1.6.0で追加された機能として、主に以下の4点があります。

 + メインメニュー画面にWidgetを配置することができ、リンクや画像も配置可能になった。
 + アクセス権がロール・メニュー紐付管理のメニュー単位での管理に加え、レコード単位での管理となった。
 + パラメータシートのカラムにパスワード、フィルアップロード、リンクが作成できるようになった。
 + サーバなどの機器へパラメータを収集するplaybookを実施し、収集した値をパラメータシートに自動登録することができるようになった。


本記事では[Exastro IT Automation ver1.5.0のキホンの"キ"](https://qiita.com/wakky0328/items/cf29c22cbf7cb42d462b)を参考に、ITAver1.6.0で進めようと思います。
また、Conductor実施時には（簡単にですが）分岐機能を使っての処理を追加してみたいと思います。



###作業環境

2台のターゲットサーバにそれぞれ異なるディレクトリを作成します。

![図1-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/761097/136dbfb6-26bc-0c57-e25f-bd57bd425eed.png)


+ Exastro IT Automation 1.6.0
+ CentOS Linux 7.8(ITAサーバ用)
+ CentOS Linux 7.8(ターゲットマシン用)×2
+ Windows 10(クライアント)
+ Google Chrome 83.0.4103.116(Win10側)


#今回紹介するシナリオ

まず、Playbookを実行できるようにし、パラメータシートとPlaybookの変数を紐付けを行います。
次に、CMDBにパラメータシートを設定し、データを登録します。
そして、高度なジョブフロー(Conductor)を実行します。


【仕込編】1. Playbookをアップロードしてジョブ(Movement)に紐付ける
【仕込編】2. ジョブ(Movement)をジョブフロー(Conductor)に組み込む
【仕込編】3. CMDBにパラメータシートを設定
【仕込編】4. パラメータシートの項目とPlaybookの変数の紐づけ
【仕込編】5. ITAのCMDBの機器一覧(デフォルト)にターゲットとなるLinuxマシンを登録
【実行編】6. 作業名(Operation)の登録
【実行編】7. パラメータシートにデータを登録
【実行編】8. ジョブフロー(Conductor)の実行
【実行編】9. 実行結果の確認

![図1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/761097/b41daed5-1cc4-398c-c769-a4b76f588d1f.png)


今回は以下のPlaybookを利用します。

```yml:mkdir.yml
- name: Make Directory
  file:
    path: "{{ VAR_dir_name }}"
    owner: "{{ VAR_owner }}"
    group: "{{ VAR_group }}"
    mode: "{{ VAR_mode }}"
    state: directory
```

```error_output.yml
- name: Error Output
  shell: echo "`date '+%Y/%m/%d %H:%M:%S'` failed to make directory "{{ VAR_dir_name }}"" >> /tmp/error_log
```



##【仕込編】1. Playbookをアップロードしてジョブ(Movement)に紐付ける
###1.1 Movementを登録
「Ansible-Legacy 」メニューグループ >> 「Movement一覧」メニュー
を選択し、登録します。

登録したデータは以下です。

|Movement名|ホスト指定形式|
|:---:|:---:|
|ディレクトリ作成|IP|
|エラーファイル出力|IP|

![図2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/761097/9c0a43f3-57d9-f023-391e-0000a874df9c.png)


<details><summary>ITA 1.6.0で追加されたアクセス権</summary><div>
ITA1.5.0以前では、メニュー単位でのアクセス権管理（ロール・メニュー紐付管理）のみとなっていましたが、
ITA1.6.0から登録するレコード単位でアクセス権の設定が可能となっています。
![図4-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/761097/31465ce8-79e5-8aca-4e89-bb11e573d555.png)


</div></details>


###1.2 Playbookアップロード
「Ansible-Legacy 」メニューグループ >> 「プレイブック素材集」メニュー
を選択し、用意した```mkdir.yml```、```error_output.yml```をプレイブック素材にアップロードを行います。

登録するデータは以下です。

|プレイブック素材名|プレイブック素材|
|:---:|:---:|
|mkdir|*mkdir.yml*|
|error_output|*error_output.yml*|

![図3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/761097/fc25da6a-bfcd-e3d5-76bd-442b38ddd047.png)

<details><summary>ファイルをアップロードするときのハマりどころ</summary><div>
playbookをアップロードする際には、事前アップロードボタンを押してから登録ボタンを押す必要があります。
![図4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/761097/4fe5bd34-d81e-2bbf-82d4-c4ac634a5920.png)
</div></details>


###1.3 アップロードしたplaybookをMovementに紐付け
「Ansible-Legacy 」メニューグループ >> 「Movement詳細」メニュー
を選択し、登録します。

登録するデータは以下です。

|Movement|プレイブック素材|インクルード順序|
|:---:|:---:|:---:|
|1:ディレクトリ作成|mkdir|1|
|2:エラーファイル出力|error_output|1|

![図5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/761097/a0328b01-883f-9846-11a3-a5ea696d788f.png)


**<details><summary>インクルード順序って何？</summary><div>
今回のシナリオでは１ジョブ(Movement)に対して1つのplaybookを紐付けましたが、
１つのジョブ(Movement)に複数のplaybookを紐づけられます。
playbookが様々なジョブ(Movement)に再利用できます。
![図5-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/761097/38e3d942-9dbf-cbef-c362-5919586cab89.png)
</div></details>**

##【仕込編】2. ジョブ(Movement)をジョブフロー(Conductor)に組み込む
「Conductor」メニューグループ >> 「Conductorクラス編集」メニュー
を選択し、Nameを設定し、右側のMovementタブから作成したMovementをドラッグ＆ドロップします。
今回のシナリオでは2つのMovementを扱い、エラー時の動作も準備します。
functionタブには条件分岐や別のジョブフロー(Conductor)を呼び出す部品群がありますので、作成したいジョブフロー(Conductor)に合わせて利用することが可能となっています。

![図6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/761097/55ec3f94-5a64-7e94-3814-59de7f2ca709.png)
![図6-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/761097/08364d42-6209-3d4a-5471-dd2e14e0b62b.png)



##【仕込編】3. CMDBにパラメータシートを設定

ところで、ITAのメニューグループとメニューの関係について、改めて整理してみました。
下図のように、メニューグループ内にたくさんのメニューが入っていて、
メニュー＝パラメータシートと考えてよいと思います。

![図7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/761097/5b2d58a2-2614-7c9e-6b01-031b8071f3b0.png)


今回、新しいパラメータシートを設定する、つまりメニューを作ることになります。
作成するメニューにはその置き場となるメニューグループが必要ですので、
まずはメニューグループを登録します。
それから、メニュー(＝パラメータシート)を設定します。

![図8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/761097/107a72be-fd9d-dc7d-75d6-606d0f3138c3.png)


詳しくは、ITAの[利用手順マニュアル メニュー作成機能](https://exastro-suite.github.io/it-automation-docs/asset/Documents_ja/Exastro-ITA_利用手順マニュアル_メニュー作成機能.pdf)を参照ください。



###3-1. パラメータシートのメニュー名を定義する
「メニュー作成」メニューグループ >> 「メニュー定義/作成」メニュー
を選択し、登録します。

下記図の②で登録するデータは以下です。

|メニュー名|作成対象|表示順序|
|:---:|:---:|:---:|
|ディレクトリ設定|パラメータシート(ホスト/オペレーション含む)|1|

![図12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/761097/51703901-654f-b004-dc5f-e93d572f3364.png)


下記図の⑦で登録するデータは以下です。
単一行以外の表記については、[利用手順マニュアル メニュー作成機能](https://exastro-suite.github.io/it-automation-docs/asset/Documents_ja/Exastro-ITA_利用手順マニュアル_メニュー作成機能.pdf)に記載がありますが、今後、パラメータシートの作成詳細編を記事公開したいと思います。

|項目名|入力方式|最大バイト数|
|:---:|:---:|:---:|
|path|文字列(単一行)|32|
|owner|文字列(単一行)|32|
|group|文字列(単一行)|32|
|mode|文字列(単一行)|32|

![図13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/761097/30844bdd-f1d9-e7f2-0329-2a68931f57cc.png)



***

###3-2. 作成したパラメータシートを確認する

「メニュー作成」メニューグループ >> 「メニュー作成履歴」メニュー
から作成したパラメータシートを確認します。

![図14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/761097/56be39be-f88f-119a-d65b-549d5a75409f.png)


<details><summary>メニューを再作成するときのハマりどころ</summary><div>
既存のメニューに対してメニュー作成開始ボタンを押下すると、メニューの再作成として、登録済みのデータは削除されます。
</div></details>


##【仕込編】4. パラメータシートの項目とPlaybookの変数の紐付け
パラメータシートの項目とPlaybookの変数を紐付けます。
一度紐付け設定を行っておけば、パラメータシートにデータを登録するだけで、Playbook実行時に登録データが利用できます。

「Ansible-Legacy」メニューグループ >> 「代入値自動登録設定」メニュー
を選択し、登録します。

登録するデータは以下です。

|メニューグループ:メニュー|項目|登録方式|Movement|Value変数<br>変数名|
|:---:|:---:|:---:|:---:|:---:|
|1:サーバ基本設定:1:ディレクトリ設定|パラメータ/path|Value型|1:mkdir|1:VAR_dir_name|
|1:サーバ基本設定:1:ディレクトリ設定|パラメータ/owner|Value型|1:mkdir|2:VAR_owner|
|1:サーバ基本設定:1:ディレクトリ設定|パラメータ/group|Value型|1:mkdir|3:VAR_group|
|1:サーバ基本設定:1:ディレクトリ設定|パラメータ/mode|Value型|1:mkdir|4:VAR_mode|
|1:サーバ基本設定:1:ディレクトリ設定|パラメータ/path|Value型|2:error_output|5:VAR_dir_name|

![図15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/761097/eab2931a-d91e-d284-a696-965dad46857b.png)



##【仕込編】5. ITAのCMDBの機器一覧(デフォルト)にターゲットとなるLinuxマシンを登録
「基本コンソール」メニューグループ >> 「機器一覧」メニュー
を選択し、登録します。

登録するデータは以下です。

|HW機器種別|ホスト名|IPアドレス|ログインユーザID|ログインパスワード<br>管理|ログインパスワード|Legacy/Role利用情報<br>認証方式|
|:---:|:---:|:---:|:---:|:---:|:---:|:---:|
|SV|target101|10.197.18.77|root|●|********|パスワード認証|
|SV|target102|10.197.18.79|root|●|********|パスワード認証|

![図16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/761097/d5309e12-8cae-75ef-41b6-f85ab9734870.png)


##【実行編】6. 作業名(Operation)の登録
「基本コンソール」メニューグループ >> 「投入オペレーション一覧」メニュー
を選択し、登録します。

登録するデータは以下です。

|オペレーション名|実施予定日時|
|:---:|:---:|
|ディレクトリ作成作業|2020/12/04 12:00|

![図17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/761097/1db5dabb-4678-5bae-7dd8-36e3c046cbc2.png)



##【実行編】7. パラメータシートにデータを登録
いよいよターゲットマシンに設定するデータの登録を行います。
データの登録先は前の手順で設定したパラメータシートです。

「入力用」メニューグループ >> 「ディレクトリ設定」メニュー
を選択し、登録します。

登録するデータは以下です。

|ホスト名|オペレーション|path|owner|group|mode|
|:---:|:---:|:---:|:---:|:---:|:---:|:---:|
|target101|2020/12/04 12:00_1:ディレクトリ作成作業|/work1|root|root|0644|
|target102|2020/12/04 12:00_1:ディレクトリ作成作業|/work2|root|root|0755|

![図18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/761097/6111e457-e76e-8f39-5b20-cb1d7b981889.png)




##【実行編】8. ジョブフロー(Conductor)の実行
最後に、ターゲットマシンへ登録データを設定します。

「Conductor」メニューグループ >> 「Conductor作業実行」メニュー
を選択し、作成したジョブフロー(Conductor)と作業名(Operation)のラジオボタンを選択し、実行ボタンをクリックします。

![図19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/761097/698b6815-e82d-f68a-2a25-9277089b1e37.png)


ジョブ(Movement)を選択し、右側のOperation statusをクリックすると詳細を確認することができます。
詳細画面のInputDataから実行時のplaybook一式(host_varsやinventryを含む)をダウンロードできます。
また、ResultDataから実行結果をダウンロードできます。

![図20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/761097/c88c0426-3355-8287-d0fc-e550953c0edd.png)



ジョブフロー(Conductor)が正常終了すると、以下の画面が表示されターゲットマシンへの設定も完了です。

![図21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/761097/719e3f93-7d6b-f588-dd29-76ebfd3afe70.png)



ディレクトリ作成が失敗した場合、条件分岐が行われエラーファイル出力が実行されます。
![図22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/761097/2f284dbf-ba54-4911-af31-410169475ce7.png)



##【実行編】9. 実行結果の確認
パラメータシートに登録したデータが反映できているか確認しました。
ターゲットマシンに接続して、作成したディレクトリを確認しました。

```言語:target101
$ ll / | grep work
drw-r--r--   2 root root    6 Dec  4 21:17 work1
```

```言語:target102
$ ll / | grep work
drwxr-xr-x   2 root root    6 Dec  4 21:17 work2
```

パラメータシートに登録したデータが設定されていることを確認できました。


ディレクトリ作成が失敗した場合には、エラーファイル出力が実行され、エラーログが出力されます。

```
$ cat /tmp/error_output
2020/12/04 21:17:30 failed to make directory /work1
```


#まとめ

[Exastro IT Automation ver1.5.0のキホンの"キ"](https://qiita.com/wakky0328/items/cf29c22cbf7cb42d462b)をITAver1.6.0で実施してみました。


今回はシンプルなシナリオに、成否での分岐機能を追加してみましたが、
Conductorには、平行処理機能や一時停止機能、
他のジョブフロー(Conductor,Symphony)呼出など様々な機能があります。
それらを組み合わせることで、より複雑な作業を自動化できると考えています。


#関連リンク
+ [Exastro IT Automationをインストールしてみた（v1.6.0）](https://qiita.com/standsetx/private/54ff0786db151d980026)
+ [Exastro IT Automationを実際に動かしてみた(クイックスタート)](https://qiita.com/standsetx/items/902ea7eeac2c0f0347a2)
+ [Exastroコミュニティ](https://exastro-suite.github.io/it-automation-docs/index_ja.html)
+ [利用手順マニュアル メニュー作成機能](https://exastro-suite.github.io/it-automation-docs/asset/Documents_ja/Exastro-ITA_利用手順マニュアル_メニュー作成機能.pdf)
+ [Exastro IT Automationのキホンの”キ”](https://qiita.com/wakky0328/items/136ee1009edfdde03375)
+ [Exastro IT Automation ver1.5.0のキホンの"キ"](https://qiita.com/wakky0328/items/cf29c22cbf7cb42d462b)