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/practice1.html)

# シナリオ④【ユーザー管理（演習問題）】
最後のシナリオは、演習問題になっています。
ここまでのシナリオで構築した Web サーバに対してユーザー管理が出来るようにする問題です。
利用するRoleのplaybookは、提供されている資材に含まれています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798829/b7b7b8e3-2cfe-5dad-87e4-52e1ba93eeb2.png)

### オペレーションの作成
基本コンソールからオペレーションを登録します。
オペレーションに作業対象とパラメータが紐づきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798829/25d54043-46ce-3735-ad12-810562d55cb4.png)
+ オペレーション名：ユーザ管理
+ 実施予定日時：現在時刻

### Movement一覧の作成
ITAでは作業(ジョブ)を Movement という単位で管理しています。
ユーザ管理のMovementを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798829/c2bbcfd1-95b1-74df-e3ae-90899fd532c4.png)
+ Movement名：ユーザ管理
+ ホスト指定形式:IP(デフォルト値なのでそのままで良い)

### Movement と Ansible Role の紐付け
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798829/42f3e47f-c608-68a8-ec2c-5889177333f7.png)
■項目①
+ Movement名：ユーザ管理
+ ロールパッケージ名："OS-RHEL8:OS-RHEL8/RH_group/OS_build"
+ インクルード順序：1

■項目②
+ Movement名：ユーザ管理
+ ロールパッケージ名："OS-RHEL8:OS-RHEL8/RH_user/OS_build"
+ インクルード順序：2

### パラメータシート作成
パラメータシートの作成に関しては解答を見ながら設定しました。
プルダウン選択にするところなどパラメータの設計に関してはある程度知識が求められると感じました。

グループ設定用のパラメータシート
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798829/33fea375-179b-b83c-d148-9a4d4c815c4d.png)
■画面左の項目①の設定
+ 項目の名前：グループ名
+ 項目の名前(Rest API用)：group_name
+ 最大バイト数：32
+ 必須：チェックを付ける
+ 一意制約：チェックを付ける

■画面左の項目②の設定
+ 項目の名前：グループID
+ 項目の名前(Rest API用)：group_id
+ 入力方式：整数
+ 最小値：1000
+ 必須：チェックを付ける
+ 一意制約：チェックを付ける

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

■画面右の項目設定
+ パラメータシート名：グループ
+ パラメータシート名(REST)：groups
+ 表示順序：4
+ バンドル：チェックを付ける

ユーザ設定用のパラメータシート
※項目が多いためキャプチャを2枚にしています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798829/b740075d-56e7-4be2-900a-7254977f4a4d.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798829/518d3d0a-aaef-6643-625e-48d9a3a1eca5.png)

■画面左の項目①の設定
+ 項目の名前：ユーザー名
+ 項目の名前(Rest API用)：user_name
+ 最大バイト数：32
+ 必須：チェックを付ける
+ 一意制約：チェックを付ける

■画面左の項目②の設定
+ 項目の名前：ユーザーID
+ 項目の名前(Rest API用)：user_id
+ 入力方式：整数
+ 最小値：1000
+ 必須：チェックを付ける
+ 一意制約：チェックを付ける

■画面左の項目③の設定
+ 項目の名前：パスワード
+ 項目の名前(Rest API用)：password
+ 入力方式：パスワード
+ 最大バイト数：32
+ 必須：チェックを付ける

■画面左の項目④の設定
+ 項目の名前：パスワード設定
+ 項目の名前(Rest API用)：password_apply
+ 入力方式：プルダウン選択
+ 選択項目："パラメータシート作成:選択2:True-False"
+ 初期値：False
+ 必須：チェックを付ける

■画面左の項目⑤の設定
+ 項目の名前：グループ
+ 項目の名前(Rest API用)：group
+ 入力方式：プルダウン選択
+ 選択項目："入力用:グループ:グループ名"
+ 必須：チェックを付ける

■画面左の項目⑥の設定
+ 項目の名前：ホームディレクトリ
+ 項目の名前(Rest API用)：home_dir
+ 最大バイト数：128
+ 必須：チェックを付ける

■画面左の項目⑦の設定
+ 項目の名前：ログインシェル
+ 項目の名前(Rest API用)：login_shell
+ 初期値：/bin/bash
+ 最大バイト数：32
+ 必須：チェックを付ける

■画面左の項目⑧の設定
+ 項目の名前：コメント
+ 項目の名前(Rest API用)：comment
+ 最大バイト数：128
+ 必須：チェックを付ける

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

■画面右の項目設定
+ パラメータシート名：ユーザー
+ パラメータシート名(REST)：users
+ 表示順序：3
+ バンドル：チェックを付ける

### 変数ネスト管理
ここも回答を見て作成しました。
管理できるグループ数とユーザ数の上限を定義します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798829/55949c1a-1274-5908-8e8e-38c897c5a340.png)
■グループ数(VAR_RH_group)
+ 最大繰返数：5

■ユーザ数(VAR_RH_user)
+ 最大繰返数：10

### 代入値自動登録設定
こちらも回答を見て作成しました。
エクセルを使って一括登録をしましたが、数が多く間違えやすいと思います。
私は間違えてしまって実行時にエラーが出ました。
エクセルの画像は修正して正常動作した代入値設定です。

設定するパラメータはドキュメントに記載されていたのと同様です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798829/6c824099-438b-6a40-d1f6-cf58b869d61c.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798829/ea2c7934-fc38-80a9-3cc1-5f4d88701470.png)

グループ設定用代入値設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798829/58599b0f-03ab-6d65-9ac8-7b1fcb04a773.png)

ユーザ設定用代入値設定
※画像は割愛しますが10セット分作成しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798829/5acab8a3-e8d8-071d-1f72-3d3333eebf20.png)

### パラメータ設定
問題の内容に沿って各パラメータを設定しました
。
今回のシナリオでは、db01 というホストに対して httpd のパッケージをインストールしますが前のシナリオで mariadb-server のパッケージがインストール済みの状態となっています。
そのため、mariadb-server パッケージの状態を absentにして、httpd パッケージの状態を present にします。
ホスト名も db01 から web01 に設定します。

グループの設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798829/b90520bd-2ad4-3920-6ea7-04e7940f316d.png)
■項目①
+ ホスト名：web01
+ オペレーション名：ユーザ管理
+ 代入順序：1
+ グループ名：www
+ グループID：10001
+ 状態：present

■項目②
+ ホスト名：web01
+ オペレーション名：ユーザ管理
+ 代入順序：2
+ グループ名：app
+ グループID：10002
+ 状態：present

ユーザーの設定
こちらは項目が少し多いのでエクセルで登録しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798829/94555a0d-4f88-9ad2-943b-ccf500a5ab64.png)

### ジョブフローへの追加
ジョブフローにユーザ管理のMovementを追加しました。
その際、各Movementに個別オペレーションを設定する必要があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798829/1cfe4935-a2eb-85d8-b101-0180af0ab21c.png)

### 作業実行
事前状態を確認。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798829/fdc409b4-d88a-2a86-c994-98b390acb442.png)

ジョブフローから作業を実行して正常終了を確認しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798829/3b1e9fde-2979-c59e-f56c-7f3de0a7bd91.png)

ユーザとグループも想定通り作成されているようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798829/501a5714-cd1d-83f3-656f-5b787ab91fda.png)

# まとめ
ITAのver2.4のAnsible-Legacy-Roleの「Learn」を実際に試してみました。
すべてやりきるとなかなかボリュームがありますが、Ansible Role を使った自動化を体系的に学ぶことが出来ると思います。
興味がある方はぜひ試してみると良いと思います。
「Learn」で紹介されていない機能もあるようなので他の機能についてもいずれ触ってみたいと思います。