Exastro IT Automation 2.4.0 のLeran(Ansible-Role)をやってみた その②

# はじめに
本記事は全部で4部作の記事になります。
先に過去の回をご覧ください。
[Exastro IT Automation 2.4.0 のLeran(Ansible-Role)をやってみた その①](https://qiita.com/y-arai-0523/private/d6ea6db897e8dcf3d3ee)
[Exastro IT Automation 2.4.0 のLeran(Ansible-Role)をやってみた その②](https://qiita.com/y-arai-0523/private/42c29e2a4516e13e2c1d)
[Exastro IT Automation 2.4.0 のLeran(Ansible-Role)をやってみた その③](https://qiita.com/y-arai-0523/private/f763725c6aa9e5f69e5b)
[Exastro IT Automation 2.4.0 のLeran(Ansible-Role)をやってみた その④](https://qiita.com/y-arai-0523/private/092ac63ef7f1105f0f97)

今回はパッケージ管理のシナリオを実施していきます。
[パッケージ管理のシナリオ](https://ita-docs.exastro.org/ja/2.4/learn/ansible_legacy_role/scenario2.html)

# シナリオ②【パッケージ管理】
対象のサーバにパッケージをインストールするシナリオです。
一度に複数インストールする場合にも対応できるようになっています。
機器情報とRole資材は、シナリオ① 【ホスト名管理】で準備したものをそのまま使います。

### オペレーション設定
基本コンソールからオペレーションを登録します。
オペレーションに作業対象とパラメータが紐づきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798829/c4c3563b-f6e2-351a-10dd-3e87d29d7832.png)
+ オペレーション名：RHEL8のパッケージ管理
+ 実施予定日時：現在時刻

### データシートの作成
設定するパラメータによっては、いくつかの固定値から選択したい場合があります。
今回のシナリオでいうと、パッケージを present (インストールされている状態)するか absent (インストールされていない状態)するかの選択です。

present / absentのようなパラメータを毎回手入力するのは面倒ですし、入力ミスも起こりやすいです。
そういった固定値のパラメータを管理する際にデータシートを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798829/0b6a2138-f3c3-3f4e-58aa-261cb5d64947.png)
以下の設定をしました。

■画面左の項目設定
+ 項目の名前：present-absent
+ 項目の名前(Rest API用)：present-absent
+ 最大バイト数：16
+ 必須：チェックを付ける
+ 一意制約：チェックを付ける

■画面右の項目設定
+ パラメータシート名：状態
+ パラメータシート名(REST)：state
+ 表示順序：99999

### データシートの設定
作成したデータシートにパラメータを設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798829/e2e7f5ee-b79b-a126-2957-a954db1c9f50.png)

### パラメータシートの作成
IPアドレスやユーザなどのように一つの機器上で複数の値を持つ場合は、バンドルというパラメータシートを使います。
パラメータシートを定義して作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798829/a4bcdcd0-cfa0-ec75-623d-2cea93e1561d.png)

■画面左の項目①の設定
+ 項目の名前：パッケージ名
+ 項目の名前(Rest API用)：package_name
+ 最大バイト数：64
+ 必須：チェックを付ける

■画面左の項目②の設定
+ 項目の名前：状態
+ 項目の名前(Rest API用)：state
+ 入力方式：プルダウン選択
+ 選択項目：入力用:状態:present-absent
+ 必須：チェックを付ける

■画面右の項目設定
+ パラメータシート名：導入パッケージ
+ パラメータシート名(REST)：packages
+ 表示順序：2
+ バンドル：チェックを付ける

作成したデータシートとパラメータシートはパラメータシート定義一覧から確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798829/c49ffba6-26fa-e0dc-cc7e-f09e6b0d084d.png)

### Movement作成
ITAでは作業(ジョブ)を Movement という単位で管理しています。
パッケージ管理のMovementを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798829/5c024fc3-9049-ba1f-ed13-99691f9dbb95.png)
+ Movement名：パッケージ管理
+ ホスト指定形式:IP(デフォルト値なのでそのままで良い)

### Movement と Ansible Role パッケージの紐づけ
Movement と Ansible Role パッケージの紐付けを行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798829/ce261e5a-4b55-1f38-88f2-585cfe867f6b.png)
+ Movement名：パッケージ管理
+ ロールパッケージ名："OS-RHEL8:OS-RHEL8/RH_rpm/OS_build"
+ インクルード順序：1

### 変数ネスト設定
管理できるパッケージ数の上限を定義します。
パッケージの場合は、1台のサーバー上に複数のパッケージを管理することがあり得るため、VAR_RH_rpm は複数の変数のセットを配列で管理する多段変数として扱うように定義されてるようです。
※詳細はLearnのドキュメントを参照してください。

管理する多段変数の上限数を予め決めておく必要があり、今回は管理するパッケージの上限を10とします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798829/fd581d98-c6de-718e-cff3-47392561584f.png)
+ 最大繰返数：10

### 代入値自動登録設定
パラメータシートの項目と Ansible Role の変数の紐付けです。
今回は10個分のレコードを登録する必要があるので、全件ダウンロード・ファイル一括登録の機能を使ってエクセルでまとめて登録しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798829/7362223e-efa7-b1a6-4d91-52c2015f4c62.png)

設定するパラメータはドキュメントに記載されていたのと同様です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798829/16d80db8-219f-a540-79f1-a720046d0ec7.png)

ちなみにエクセルはこんな感じになりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798829/e5916edc-170d-66c4-d793-66127e5b38ed.png)

### パッケージのインストール実施(1回目)
パラメータシートにパラメータを設定します。
パラメータシートをバンドル設定にしたことで状態の項目はabsent/presentをプルダウンで選べます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798829/11bec635-8d80-de4b-4093-bfa9050fbc70.png)
+ ホスト名：db01
+ オペレーション名：RHEL8のパッケージ管理
+ 代入順序：1
+ パッケージ名：postgresql-server
+ 状態：present

#### 作業実行
事前の状態では、postgresql-server はインストールされていません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798829/da53fd5e-f449-65af-6a03-41ad0526e861.png)

作業実行すると正常終了しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798829/d6ded6aa-64f2-8da4-6db5-3a9edb347094.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798829/88126d1c-67b1-4989-c665-6fd0870ea74e.png)

postgresql-server もインストールされていました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798829/0dcb0e87-9145-84ae-62f5-54bb65277d17.png)

### パッケージのインストール実施(2回目)
2回目の実行は postgresql-server のパッケージを削除して代わりに mariadb-server をインストールします。

先ほどパラメータシートに設定したpostgresql-server の状態を present からabsent に変更、
mariadb-server の項目を追加して状態を present にします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798829/883e9639-6228-e354-58e1-15ab62a60fd4.png)
■項目①
+ ホスト名：db01
+ オペレーション名：RHEL8のパッケージ管理
+ 代入順序：1
+ パッケージ名：postgresql-server
+ 状態：absent

■項目②
+ ホスト名：db01
+ オペレーション名：RHEL8のパッケージ管理
+ 代入順序：2
+ パッケージ名：mariadb-server
+ 状態：present

#### 作業実行
事前状態では mariadb-server はインストールされていません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798829/52dbb17f-33a0-dd3d-231c-7de4338e2223.png)

先ほどと同様にパッケージ管理を実行し、正常終了を確認。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798829/a59aa064-4b53-f478-e83d-fe914470cada.png)

postgresql-server がアンインストールされて、mariadb-serverがインストールされていました！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798829/38d1477e-7270-156e-7a63-d063635f443b.png)

# まとめ
今回実施したパッケージ管理のシナリオでは、以下のようなことを学ぶことができました。
・入力値が確定していて選択するだけな様な場合は、データシートを利用して入力ミスを防ぐことが出来る。
・複数かつ数が不定のパラメータを管理する場合は、「バンドル」を利用する。
・大量のパラメータを設定する場合には、「全件ダウンロード・ファイル一括登録」を利用することでファイルからのデータ登録を行うことが出来る。

次回はジョブフローのシナリオの実施します。
[Exastro IT Automation 2.4.0 のLeran(Ansible-Role)をやってみた その③](https://qiita.com/y-arai-0523/private/f763725c6aa9e5f69e5b)