Exastro IT Automation(ver2.4.0)のlearnをやってみた Ansible Legacy編 その③

# はじめに
#### Exastro IT Automationとは
システム構成(IaC+パラメータ)を管理するためのフレームワークです。
[【Exastro-suite】](https://ita.exastro.org/)より

第3回目はユーザー名やパスワードなど、ユーザー情報の変更を自動化していきたいと思います。手順については、[Learn Ansible Legacy](https://ita-docs.exastro.org/ja/2.4/learn/ansible_legacy/Legacy_practice1.html#id1) を参考にしました。




今回は、以下のPlaybookを使用します。
文字コードは「UTF-8」、改行コードは「LF」、拡張子は「yml」形式で作成してください。
※ファイルアップロードができなかったり、実行エラーが発生するため、インデントにご注意ください。
```yml:user.yml
---
- name: create/update group
  group:
    name: "{{ item.0 }}"
    gid: "{{ item.1 }}"
  with_together:
    - "{{ group_name }}"
    - "{{ group_id }}"
    - "{{ group_action }}"
  when: item.2 == 'present'

- name: create/update group
  group:
    name: "{{ item.0 }}"
    gid: "{{ item.1 }}"
  with_together:
    - "{{ group_name }}"
    - "{{ group_id }}"
    - "{{ group_action }}"
  when: item.2 == 'absent'
```

```yml:group.yml
---
- name: create user
  user:
    name: "{{ item.0 }}"
    uid: "{{ item.1 }}"
    group: "{{ item.2 }}"
    comment: "{{ item.3 }}"
    home: "{{ item.4 }}"
    shell: "{{ item.5 }}"
    password: "{{ item.6 | password_hash('sha512') }}"
  with_together:
    - "{{ user_name }}"
    - "{{ user_id }}"
    - "{{ group }}"
    - "{{ comment }}"
    - "{{ home_dir }}"
    - "{{ login_shell }}"
    - "{{ password }}"
    - "{{ user_action }}"
    - "{{ password_apply }}"
  when: item.7 == 'present' and password_apply

- name: create user
  user:
    name: "{{ item.0 }}"
    uid: "{{ item.1 }}"
    group: "{{ item.2 }}"
    comment: "{{ item.3 }}"
    home: "{{ item.4 }}"
    shell: "{{ item.5 }}"
  with_together:
    - "{{ user_name }}"
    - "{{ user_id }}"
    - "{{ group }}"
    - "{{ comment }}"
    - "{{ home_dir }}"
    - "{{ login_shell }}"
    - "{{ user_action }}"
    - "{{ password_apply }}"
  when: item.6 == 'present' and not password_apply

- name: delete user
  user:
    state: absent
    name: "{{ item.0 }}"
    remove: 'yes'
  with_together:
    - "{{ user_name }}"
    - "{{ user_action }}"
  when: item.1 == 'absent'
```


以下のように、公式ドキュメントにあるシナリオを3回に分けて実施しています。
パッケージ管理
[Exastro IT Automation(ver2.4.0)のlearnをやってみた Ansible Legacy編 その①](https://qiita.com/a-naka/items/5063fa19a955ee13c4e1)

ジョブフロー
[Exastro IT Automation(ver2.4.0)のlearnをやってみた Ansible Legacy編 その②](https://qiita.com/a-naka/items/f761bde061b6d2cd2d10)

ユーザー管理
[Exastro IT Automation(ver2.4.0)のlearnをやってみた Ansible Legacy編 その③](https://qiita.com/a-naka/items/aab1096afe58dc5f07a1)

# 作業環境
前回同様、以下の環境で進めていきます。
![画像3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798801/a3b6c783-e7e5-aed3-1804-bf39f0b2060b.png)



- Exastro IT Automation 2.4.0
- RHEL8(ITAサーバ用)
- RHEL8(ターゲットマシン用)
- Windows10(クライアント)
- Google Chrome(Win10側)

# シナリオ

【事前準備】
1.パラメータシートの作成(グループ用)
2.パラメータシートの作成(ユーザ用)
3.機器一覧にターゲットマシンを登録
4.ジョブ(Movement)の登録
5.Ansible Playbookの登録
6.ジョブ(Movement)とAnsible Playbookの紐付け
7.パラメータシートの項目とPlaybookの変数を紐付け


【ユーザー追加作業】
8.作業名(オペレーション)の登録
9.パラメータシートにデータを登録(グループ用)
10.パラメータシートにデータを登録(ユーザ用)
11.事前確認
12.作業実行
13.実行結果の確認



# 事前準備

### 1.パラメータシートの作成(グループ用)
データシートを作成します。
「パラメータシート作成」メニューグループ　→　「パラメータシート定義・作成」メニューを選択します。
左上の「項目」をクリックすることで複数登録できるようになります。
![画像4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798801/02b1c554-8cd5-9a72-6f53-8a13900d42dd.png)



以下のように登録しました。
|設定項目|項目1設定値|項目2設定値|項目3設定値|
|:---:|:---:|:---:|:---:|
|項目の名前|グループ名|グループID|状態|
|項目の名前(Rest API用)|group_name|group_id|state|
|入力方式|文字列(単一行)|整数|プルダウン選択|
|最小値|(項目なし)|1000|(項目なし)|
|最第値|(項目なし)||(項目なし)|
|最大バイト数|32|(項目なし)|(項目なし)|
|正規表現||(項目なし)|(項目なし)|
|選択項目|(項目なし)|(項目なし)|入力用:状態:present-absent|
|参照項目|(項目なし)|(項目なし)||
|必須|✓|✓|✓|
|一意制約|✓|✓||


![画像76.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798801/08adde6f-ae9c-f273-2f89-4c0c9dc25906.png)

以下のように登録しました。
|設定項目|設定値|
|:---:|:---:|
|パラメータシート名|グループ|
|パラメータシート名(REST用)|groups|
|作成対象|パラメータシート（ホスト/オペレーションあり）|
|表示順序|4|
|バンドル利用|「利用する」に✓入れる|



入力後、作成をクリックします。


### 2.パラメータシートの作成(ユーザ用)
パラメータシートを作成します。
「パラメータシート作成」メニューグループ　→　「パラメータシート定義・作成」メニューを選択します。


![画像77.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798801/a96b7074-ef7f-b4ef-e651-f462c5e0176c.png)


![画像78.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798801/dfad280f-b8d5-53ed-05a2-ef5563d042c3.png)

以下のように登録しました。
|設定項目|項目1設定値|項目2設定値|項目3設定値|項目4設定値|項目5設定値|項目6設定値|項目7設定値|項目8設定値|項目9設定値|
|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|
|項目の名前|ユーザー名|ユーザーID|パスワード|パスワード設定|グループ|ホームディレクトリ|ログインシェル|コメント|状態|
|項目の名前(Rest API用)|user_name|user_id|password|password_apply|group|home_dir|login_shell|comment|state|
|入力方式|文字列(単一行)|整数|パスワード|プルダウン選択|プルダウン選択|文字列(単一行)|文字列(単一行)|文字列(単一行)|プルダウン選択|
|最大バイト数|32|(項目なし)|32|(項目なし)|(項目なし)|128|32|128|(項目なし)|
|正規表現||(項目なし)|(項目なし)|(項目なし)|(項目なし)||||(項目なし)|
|最小値|(項目なし)|1000|(項目なし)|(項目なし)|(項目なし)|(項目なし)|(項目なし)|(項目なし)|(項目なし)|(項目なし)|
|最大値|(項目なし)||(項目なし)|(項目なし)||(項目なし)|(項目なし)||(項目なし)|
|選択項目|(項目なし)|(項目なし)|(項目なし)|パラメータシート作成:選択2:True-False|入力用:グループ:グループ名|(項目なし)|(項目なし)|(項目なし)|入力用:状態:present-absent|
|参照項目|(項目なし)|(項目なし)||||(項目なし)|(項目なし)|(項目なし)||
|初期値|||(項目なし)|False|||/bin/bash|||
|必須|✓|✓|✓|✓|✓|✓|✓|✓|✓|
|一意制約|✓|✓||||||||



![画像79.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798801/ab27a79f-6546-16b9-606c-48bc048f16e4.png)

|設定項目|設定値|
|:---:|:---:|
|パラメータシート名|ユーザー|
|パラメータシート名(REST用)|users|
|作成対象|パラメータシート（ホスト/オペレーションあり）|
|表示順序|3|
|バンドル利用|「利用する」に✓入れる|



入力後、作成をクリックします。

### 3.機器一覧にターゲットマシンを登録
下記のホスト名登録を参照。
[Exastro IT Automation(ver2.4.0)のlearnをやってみた Ansible Legacy編 その③](https://qiita.com/a-naka/private/d4a1ca0996af827b0a2c)


### 4.ジョブ(Movement)の登録
ジョブ(Movement)の登録を行います。
「Ansible-Lagacy」メニューグループ　→　「Movement一覧」メニューを選択します。

![画像80.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798801/36be8f98-50dd-efea-e2c2-94671ccece40.png)

以下のように登録しました。
|Movement名|ホスト指定形式|
|:---:|:---:|
|ユーザー管理|IP|

入力後は、「編集確認」　→　「編集反映」をクリックします。


### 5.Ansible Playbookの登録
playbookを登録します。
「Ansible-Lagacy」メニューグループ　→　「Playbook素材集」メニュー　→　「登録」選択し、事前に準備しておいた「group.yml」と「user.yml」をアップロードします。

![画像81.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798801/4dab4d95-d47b-d2d5-15dd-e1de4406316f.png)


以下のように登録しました。
|Playbook素材名|Playbook素材|
|:---:|:---:|
|group|group.yml|
|user|user.yml|


入力後は、「編集確認」　→　「編集反映」をクリックします。


### 6.ジョブ(Movement)とAnsible Playbookの紐付け
「Ansible-Lagacy」メニューグループ　→　「Playbook素材集」メニュー　→　「登録」を選択し、事前に準備しておいた「group.yml」と「user.yml」をアップロードします。

以下のように登録しました。

|Movement名|Playbook素材|インクルード順序|
|:---:|:---:|:---:|
|ユーザ管理|group.yml|1|
|ユーザ管理|user.yml|2|

入力後は、「編集確認」　→　「編集反映」をクリックします。



### 7.パラメータシートの項目とPlaybookの変数を紐付け
件数が多いので登録用フォーマットを使用して一括登録したいと思います。
まず、「Ansible-Lagacy」メニューグループ　→　「代入値自動登録設定」メニューを選択します。
次に、「ダウンロード・ファイル一括登録」タブから「新規登録用ダウンロード(Excel)」をクリックし、フォーマットをダウンロードします。
![画像46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798801/5f96c9bf-3a6e-db97-8aac-7f96699bfffd.png)

ダウンロードしたフォーマットを開き、行を追加します。(今回は105行分入力します。)
設定値は [Ansible Legacy Learnのユーザー管理](https://ita-docs.exastro.org/ja/2.4/learn/quickstart/legacy/Legacy_scenario2.html) をご参照ください。

簡単に整理すると、下記の3列は105行すべてで共通です。

|C列 実行処理種別|H列 登録方式|I列 Movement名|
|:---:|:---:|:---:|
|登録|Value型|ユーザ管理

下記はgroup.ymlとuser.ymlに記載したパラメータです。
グループのパラメータが3種類、ユーザーのパラメータが9種類あります。
また、[Ansible Legacy Learnのユーザー管理](https://ita-docs.exastro.org/ja/2.4/learn/quickstart/legacy/Legacy_scenario2.html) にあるように、グループのパラメータは5行ずつ、ユーザーのパラメータは10行ずつとなっています。
|F列 メニューグループ:メニュー:項目J列 Movement名:変数名|G列K列 代入順序|行数|
|:---|:---|:---|
|代入値自動登録用:グループ:パラメータ/グループ名|ユーザー管理:group_name|5|
|代入値自動登録用:グループ:パラメータ/グループID|ユーザー管理:group_id|5|
|代入値自動登録用:グループ:パラメータ/状態|ユーザー管理:group_action|5|
|代入値自動登録用:ユーザ:パラメータ/ユーザー名|ユーザー管理:user_name|10|
|代入値自動登録用:ユーザ:パラメータ/ユーザID|ユーザー管理:user_id|10|
|代入値自動登録用:ユーザ:パラメータ/パスワード|ユーザー管理:password|10|
|代入値自動登録用:ユーザ:パラメータ/パスワード設定|ユーザー管理:password_apply|10|
|代入値自動登録用:ユーザ:パラメータ/グループ|ユーザー管理:group|10|
|代入値自動登録用:ユーザ:パラメータ/ホームディレクトリ|ユーザー管理:home_dir|10|
|代入値自動登録用:ユーザ:パラメータ/ログインシェル|ユーザー管理:login_shell|10|
|代入値自動登録用:ユーザ:パラメータ/コメント|ユーザー管理:comment|10|
|代入値自動登録用:ユーザ:パラメータ/状態|ユーザー管理:user_action|10|

「ファイル一括登録」　→　「一括登録開始」をクリックします。
![画像47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798801/a2754e4f-6957-f40f-197a-cc62b0d6db12.png)





# ユーザー追加作業

### 8.作業名(オペレーション)の登録
「基本コンソール」メニューグループ　→　「オペレーション一覧」メニュー　→　「登録」選択します。
![画像82.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798801/101e6fe5-b200-5e63-5408-71440d8d1573.png)


以下のように登録しました。
|オペレーション名|実施予定順序|
|:---:|:---:|
|Webサーバへユーザー追加作業|2024/04/01 12:00:00|

入力後は、「編集確認」　→　「編集反映」をクリックします。


### 9.パラメータシートにデータを登録(グループ用)
「入力用」メニューグループ　→　「グループ」メニュー　→　「登録」選択します。
以下のように登録します。
|ホスト名|オペレーション名|代入順序|グループ名|グループID|状態|
|:---:|:---:|:---:|:---:|:---:|:---:|
|Web01|2024/04/01 12:00:00_Webサーバへユーザー追加作業|1|www|10001|present|
|Web01|2024/04/01 12:00:00_Webサーバへユーザー追加作業|2|app|1002|present|

![画像83.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798801/7a1fdba3-9c7a-b83c-1446-66b533c21099.png)



入力後は、「編集確認」　→　「編集反映」をクリックします。


### 10.パラメータシートにデータを登録(ユーザ用)
項目が多いのでフォーマットを使用して一括登録します。
「入力用」メニューグループ　→　「ユーザ」を選択します。
「ダウンロード・ファイル一括登録」タブから「新規登録用ダウンロード(Excel)」をクリックし、フォーマットをダウンロードします。

![画像46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798801/36b15467-0b45-4012-2d69-2a61a860daab.png)

ダウンロードしたフォーマットを開き、設定値を入力していきます。
設定値は [Ansible Legacy Learnのユーザー管理](https://ita-docs.exastro.org/ja/2.4/learn/quickstart/legacy/Legacy_scenario2.html) をご参照ください。



「ファイル一括登録」　→　「一括登録開始」をクリックします。
![画像47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798801/7b16e0ae-f240-0f1b-c4bb-2f6f21e6ffcd.png)



### 11.事前確認
実行する前に現在の状態を確認します。
```
# グループ一覧の取得
cat /etc/group|grep -E "www|app"
```

```
# 何も表示されない
```

```
# ユーザー一覧の取得
cat /etc/passwd|grep -E "www|app"
```

```
# 何も表示されない
```

### 12.作業実行
「Ansible-Lagacy」メニューグループ　→　「作業実行」メニューを選択します。
実行するジョブ(Movement)を選択し、作業実行をクリックします。
![画像84.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798801/a6909698-57cc-5c60-65e2-fa95b4cca736.png)



実行するオペレーションを選択し、作業実行をクリックします。
![画像85.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798801/8eb5dba0-fb5d-246a-583e-e9a907e3d236.jpeg)





### 13.実行結果の確認
再度サーバに SSH ログインし、ホスト名が変更されていることを確認します。
```
# グループ一覧の取得
cat /etc/group|grep -E "www|app"
```

```
# 結果
www:x:10001:
app:x:10002:
```

```
# ユーザー一覧の取得
cat /etc/passwd|grep -E "www|app"
```

```
# 結果
wwwuser01:x:10001:10001:Web server mainterner:/home/wwwuser01:/bin/bash
wwwuser02:x:10002:10001:Web server mainterner:/home/wwwuser02:/bin/bash
appuser01:x:20001:10002:Application server mainterner:/home/appuser01:/bin/bash
appuser02:x:20002:10002:Application server mainterner:/home/appuser02:/bin/bash
```



# おわりに
今回は、Ansible 3モードの１つであるAnsible-Legacyを使用し、ユーザー情報の変更を実施しました。

Ansible-LegacyのLearnを3回に分けて実施してきましたが、今まで行ってきた手順を応用して他にも自動化できることがたくさんあると思います。
興味がある方は、[公式ドキュメント](https://ita-docs.exastro.org/ja/2.4/learn/ansible_legacy/index.html#ansible-legacy)にも目を通してみてはいかがでしょうか。

■クイックスタート
ホスト名管理
[Exastro IT Automation(ver2.4.0)のクイックスタートをやってみた(Ansible Legacy)](https://qiita.com/a-naka/items/2375721182ba783db0fe)


■Learn
パッケージ管理
[Exastro IT Automation(ver2.4.0)のlearnをやってみた Ansible Legacy編 その①](https://qiita.com/a-naka/items/5063fa19a955ee13c4e1)

ジョブフロー
[Exastro IT Automation(ver2.4.0)のlearnをやってみた Ansible Legacy編 その②](https://qiita.com/a-naka/items/f761bde061b6d2cd2d10)

ユーザー管理
[Exastro IT Automation(ver2.4.0)のlearnをやってみた Ansible Legacy編 その③](https://qiita.com/a-naka/items/aab1096afe58dc5f07a1)