【Exastroシリーズ】IT AutomationでPlaybook Collection使ってみた (RHEL7基本設定編)

#【はじめに】

### 「Playbook Collection」とは何か

> Ansible Playbookのコード（Role）をExastro IT Automation（以降、ITAと表記）で簡単にインポートしてご利用いただくため**ITA向け設定ファイルを同梱したロールパッケージ**
([公式サイト](https://github.com/exastro-suite/playbook-collection-docs/blob/master/README.ja.md)より)

Playbook Collectionとは、**ExastroITAへ簡単に導入できるロールパッケージ**です。

対応OSはRHEL7, RHEL8, Windows2016, Windows2019の4つと、主要なところがカバーされています。
これらのOS向けの設定用Role&設定収集用Roleがまとめられているのです。

試しにRHEL7の設定用Roleを数えたところ、実に44件が収録されていました(+すべてのロールを実行するロールが1件)。これだけあれば、基本的な設定は一通り実現できるでしょう。

本項は、ExastroITAにPlaybook Collectionを実装したレポートです。
作業内容は単なるCentOS7のユーザ関連設定ですが、ひとつの利用例として最後までお付き合いいただければ幸いです。

### 中身を少し見てみよう
先述の通り、Playbook Collection全体は**4つのロールパッケージ**から成ります。
RHEL7用、 RHEL8用、 Windows2016用、 Windows2019用の4つです。

作業内容別にRoleが収録されており、それぞれ設定とパラメータ収集の両方が用意されています。

例としてRHEL7用のロールパッケージを見てみましょう。
(後述するITAreadmeは省略しています。)

```
OS-RHEL7
└─roles
    ├─gathering                # OS_gatheringが呼び出すロール。設定内容の収集を行う
    └─OS-RHEL7
        ├─meta
        ├─RH_ALL               # RH_ALLは全てのロールを呼び出す特殊なもの
        │  ├─OS_build
        │  └─OS_gathering
        ├─RH_chrony            # 時刻同期にまつわるロールを収録
        │  ├─OS_build          #   設定ロール
        │  └─OS_gathering      #   設定の収集ロール
        ├─RH_cron
        │  ├─OS_build         
        │  └─OS_gathering     
       (以下略)
```
「RH_●●」と名の付くディレクトリの下に、設定用ロールと収集用ロールがあります。
この組み合わせが計44件収録されている、という訳です。

#### ITA readmeとは何か
Roleが収録されているrolesディレクトリと同じ階層に、「ita_readme」と名の付くファイルが同梱されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/702786/5a6f0221-34f9-6e9c-bc00-18b53b563f65.png)

「ITA readme」とは**ITAに変数の定義を認識させるためのファイル**です。
ファイルの内容を見てみると、ITAの命名規則に従った変数(VAR_●●)が定義されています。

``` ita_readme_OS-RHEL7%RH_profile%OS_build.yml(抜粋).yml
VAR_RH_profile:
  - path: /etc/bashrc
    text:
      - '# /etc/bashrc'
      - ''
      - '# System wide functions and aliases'
      - '# Environment stuff goes in /etc/profile'
      - ''
```

ロールパッケージをアップロードすると、ITAはdefaults/main.ymlから変数の定義を読み取ります。
しかし、常にdefaults/main.ymlに必要な変数が定義されているとも限りません。

そのような場合に追加の変数定義を記述しておくのがITA readmeです。ITAはこちらのファイルも参照し、変数の定義を読み取ります。
多くの場合、ITAでロールパッケージを利用するにはITA readmeを作成することになります。

しかし、Playbook Collectionにはこの**ITA readmeが最初から同梱されており**、作成の手間を割く必要が無いのです。


### 今回使うPlaybookを確認する
ユーザ設定に関係するロールを4つ見繕いました。本稿ではこれを実行する作業を紹介します。
内容を簡単に見ていきましょう。

- RH_profile/OS_build    (ユーザ別の環境変数やエイリアスの設定)
- RH_pam/OS_build        (パスワード規約に関する設定)
- RH_group/OS_build      (グループの作成/更新/削除)
- RH_user/OS_build       (ユーザの作成/更新/削除)


#### RH_profile/OS_build

このRoleの特徴として、変数にファイルの内容を定義しています。
変数の内容に基づき、templateモジュールでファイルを配置しています。

まずは実行されているPlaybookを見てみましょう。
内容はテンプレートの配置ですね。

``` build_flat.yml
- name: Write file. ({{ parameter.path }})
  template:
    src: flat_template
    dest: "{{ parameter.path }}"
```

ではテンプレートを見てみます。
リスト 「parameter.text」の要素を順に展開するjinja2文が書かれています。

``` flat_template.
{% for item in parameter.text %}
{{ item }}
{% endfor %}
```

最後に、セットのITAreadmeです。
VAR_RH_profile[n].pathにはファイルの配置先を、
VAR_RH_profile[n].textにはファイルの内容を定義します。

``` ita_readme_OS-RHEL7%RH_profile%OS_build.yml
---
VAR_RH_profile:
  - path: /etc/bashrc  # ファイルパス
    text:              # ファイル内容
      - '# /etc/bashrc'
      - ''
      - '# System wide functions and aliases'
      - '# Environment stuff goes in /etc/profile'
      - ''
  - path: /etc/csh.cshrc
    text:
      - '# /etc/cshrc'
      - '#'
      - '# csh configuration for all shell invocations.'
      - ''
      - '# By default, we want this to get set.'
  - path: /etc/csh.login
    text:
      - '# /etc/csh.login'
      - ''
      - '# System wide environment and startup programs, for login setup'
      - ''
      - '#add sbin directories to the path'
```

#### RH_pam/OS_build
パスワードの設定規則を管理するRoleです。

RH_profile/OS_buildと同じく、変数を元にファイルを生成・配置しています。
内容がほとんど同じなため省略します。

<details><summary>【余談】その他のRoleについて</summary>
<div>ここまでの2ロールでは、VAR_RH_●●[n].textに定義したファイルの内容をtemplateモジュールで配置していることを確認しました。

全44件ある設定ロールのうち、**30件ほどは同じ手法を採用しています。**

作業によって、サービスの再起動が伴うなどの差分がありますが、主な内容は共通しています。
パッケージ間で内容が均一なため扱いやすく、分かりやすい構成となっています。
</div></details>

#### RH_group/OS_build
Linuxにおけるユーザグループの作成や削除を行うRoleです。

Playbookではparameter以下のメンバー変数に基づきグループを作成します。
parameter.actionをfalseとすることでグループの削除も可能です。

``` modify_group.yml
---
- name: Execute module. (group create/update {{ parameter.group_name }})
  group:
    name: "{{ parameter.group_name }}"
    gid: "{{ parameter.group_id }}"
  when: parameter.action == 'present'

- name: Execute module. (group delete {{ parameter.group_name }})
  group:
    state: absent
    name: "{{ parameter.group_name }}"
  when: parameter.action == 'absent'
```

Playbookで利用していたparameterは、ITAreadmeに定義されています。
リスト「VAR_RH_group」の1要素 = parameterに相当します。

``` ita_readme_OS-RHEL7%RH_group%OS_build.yml
---
VAR_RH_group:
  - action: present
    group_id: '1100'
    group_name: testgroup
  - action: present
    group_id: '1101'
    group_name: testgroup2
```

#### RH_user/OS_build
このRoleではユーザの作成や削除を行います。

Playbookではparameter以下のメンバー変数に基づきユーザを作成します。
省略していますが、parameter.actionをfalseとすることでユーザの削除も可能です。
RH_groupと同じですね。

``` (抜粋)modify_user.yml
--- 
- name: Execute module. (user create {{ parameter.user_name }})
  user:
    name: "{{ parameter.user_name }}"
    uid: "{{ parameter.user_id }}"
    group: "{{ parameter.group_id }}"
    comment: "{{ parameter.comment }}"
    home: "{{ parameter.home_dir }}"
    shell: "{{ parameter.login_shell }}"
    password: "{{ parameter.password | password_hash('sha512') }}"
  when:
    - parameter.action == 'present'
    - parameter.password_apply
(以下略)
```

同じく、ユーザの情報を入れる変数が定義されています。。
Playbookで利用していたparameterは、ITAreadmeに定義されています。
リスト「VAR_RH_user」の１要素 = parameterに相当します。

``` ita_readme_OS-RHEL7%RH_user%OS_build.yml
---
VAR_RH_user:
  - action: present
    comment: create testuser
    group_id: '1100'
    home_dir: /home/testuser
    login_shell: /bin/bash
    password: p@ssw0rd123
    password_apply: true
    user_id: '1100'
    user_name: testuser
  - action: present
    comment: update testuser2
    group_id: '1101'
    home_dir: /home/testuser2
    login_shell: /bin/bash
    password: p@ssw0rd123
    password_apply: false
    user_id: '1102'
    user_name: testuser2
```

Roleの概要はこんなところです。
では、ITAへの実装を紹介していきましょう

# 【作業編】

## 作業環境
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/702786/a5427234-aa6f-f445-c102-a2cdce38b434.png)

|  | OS | 用途・詳細 |
|:-|:-|:-|
| ブラウザ用  | Windows10  | ブラウザ(Google Chrome)からExastroITAを操作する |
| ITAサーバ(中央)  | CentOS7.8  | ExastroITA v1.8.0がインストールされたサーバ。<br>Ansibleのバージョンは2.10.6 |
| ターゲットサーバ(右)  | CentOS7.8  | 何の変哲もないCentOS7。Ansible実行対象サーバ  |

## Playbook CollectionからAnsible‐Roleをダウンロードする
Playbook Collectionのロールパッケージは、[Github](https://github.com/exastro-suite/playbook-collection-docs/blob/master/README.ja.md) 上で公開されています。

今回はRHEL7用のロールパッケージをダウンロードします。
Github上で画像のリンクをクリックするだけです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/702786/e39a3f75-2cec-c5fa-9ad1-7cb31504dda7.png)


## ターゲットとなる機器を登録する
ロールパッケージをアップロードする前に、ITAの下ごしらえを進めます。
まずは作業対象となるCentOS7サーバをITAに登録します。

---
【使用メニュー】 「基本コンソール」メニューグループ　/ 「機器一覧」メニュー

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

## オペレーションを登録する
オペレーション(ITAにおける作業実行の単位)を登録します。

---
【使用メニュー】 「基本コンソール」メニューグループ　/ 「オペレーション一覧」メニュー

|オペレーション名|実施予定日時|
|:--|:--|
|ユーザ環境_初期設定|2021/08/20 14:30|

## MovementとCounductorを作る
では一連のロールを実行するConductor(ITAにおけるジョブフロー、作業の一連)を作成してきます。

### Movementを登録する
Conductorは一つ以上のMovementから構成されるため、まずはMovementを作成します。

今回はロールパッケージを利用するので、作成するのはAnsible-LegacyRoleのMovementです。

---
【使用メニュー】 「Ansible-LegacyRole」メニューグループ　/ 「Movement一覧」メニュー

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/702786/44f4a480-47c8-aba6-e027-831ea4d45631.png)

|Movement名|ホスト指定形式|
|:---:|:---:|
|RHEL7_pam設定|IP|
|RHEL7_group設定|IP|
|RHEL7_user設定|IP|
|RHEL7_profile設定|IP|


### ロールパッケージの登録
ダウンロードしたロールパッケージをITAにアップロードします。

ITAreadmeが同梱されているおかげで、編集の必要がありません。感動的です。

---
【使用メニュー】 「Ansible-LegacyRole」メニューグループ　/ 「ロールパッケージ管理」メニュー

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/702786/8e749567-2d0a-1441-7908-f7b4705aa848.png)

| ロールパッケージ名 | ロールパッケージファイル(ZIP形式) |
| :-- | :-- |
| OS-RHEL7 | OS-RHEL7.zip|

### Movementとロール名の紐づけ
作成したMovementとRoleを紐づけます。
1Movement=1Role実行で紐づけていきます。

---
【使用メニュー】 「Ansible-LegacyRole」メニューグループ　/ 「Movement-ロール紐づけ」メニュー
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/702786/3bbc66d3-832b-6bfa-75b1-e4f0b1e1ee78.png)

| Movement | ロールパッケージ名 | ロール名 | インクルード順序 |
| :-- | :-- | :-- | :-: |
|RHEL7_pam設定|OS-RHEL7 |OS-RHEL7/RH_pam/OS_build|1|
|RHEL7_group設定|OS-RHEL7|OS-RHEL7/RH_group/OS_build|1|
|RHEL7_user設定|OS-RHEL7|OS-RHEL7/RH_user/OS_build|1|
|RHEL7_profile設定|OS-RHEL7|OS-RHEL7/RH_profile/OS_build|1|

### Conductorを作成する
作成したMovementを元に、Conductorを作成します。

---
【使用メニュー】 「Conductor」メニューグループ　/ 「Movement-ロール紐づけ」メニュー

|Conductor名|内容|
|:--|:--|
|ユーザ関連設定|(下図の通り)|

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/702786/75a0201c-2807-8b03-2438-521e8b22c6ef.png)

これでMovementをまとめて実行できるようになりました。

## パラメータシートづくり
Roleで使用している変数に具体値を代入するためのパラメータシートを作成していきます。


### メニューグループの作成
この後の手順でデータシートを作成するため、これを格納するメニューグループを作成します。

一応、ITAでは作成したパラメータシートやデータシートを格納するメニューグループがデフォルトで存在しています。「入力用」と呼ばれるものです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/702786/8afac12d-5f35-5bdb-badc-9d4d120680c3.png)

ですが、ここにパラメータシートとデータシートを一緒くたに格納しては管理が複雑です。
ここはデータシート用のメニューグループを作成しておきます。

---
【使用メニュー】 「管理コンソール」メニューグループ　/ 「メニューグループ管理」メニュー

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/702786/21411061-7b8f-b9b9-c338-7485f452f2fb.png)


| メニューグループ名称 | 表示順序 |
|:-:|:-:|
| フラグ/ファイル内容管理  | 100 |

### データシートの作成
つぎに、下図のようにデータシートを2件作成します。
それぞれの用途は続く「[データシートを作る意味とは](#データシートを作る意味とは)」項で解説します。

---
【使用メニュー】 「メニュー作成」メニューグループ　/ 「メニュー定義・作成」メニュー

| メニュー名 |
|:-:|
| フラグ管理_present_absent |

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/702786/4a940088-be9c-bec9-b96f-fda14f93bf7c.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/702786/22f459d4-f899-aa61-10d9-b795867244a4.png)

---

| メニュー名 |
|:-:|
| ファイル内容管理| 

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/702786/cb392c2d-9ed9-f93a-8e2b-aeba6b531c90.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/702786/498ae38a-09e6-70dd-2751-363ca02b40a0.png)

####データシートを作る意味とは
さてデータシートが完成しました。
パラメータシートは変数の代入値を管理するために用いられますが、
データシートは直接に代入値を管理することはできません。

では、**データシートは何に用いるのでしょうか？**
まず、単にITA上の表で情報を管理する場合に利用できますが、別の用途もあります。

##### 【基礎】プルダウン項目の管理用として
データシートは**プルダウン項目の参照元として利用できます。**
今回の**「フラグ管理_present_absent」データシートはこの用途で作成しました。**

他のパラメータシートやデータシートのプルダウンで選択する項目の参照元として利用することで、表記ゆれや入力ミスを予防できます。[^1]

ロール「RHEL7_user設定」や「RHEL7_group設定」では、ユーザを作成するか削除するかを管理するパラメータを必要とします。
そのため、「absent」か「present」をプルダウンで選択できるよう、「フラグ管理_present_absent
」を作成しました。

参考: [ExastroITAコミュニティサイトFAQより 【メニュー作成/Q1】 「パラメータシートとデータシートの違いは何？」](https://exastro-suite.github.io/it-automation-docs/faq_ja.html)

##### 【発展】プルダウン利用時の「参照項目」設定
あるシートの項目がプルダウンを利用している場合、参照元の項目とは別の項目のデータも合わせて登録用データとして利用することができます。
この機能を「参照項目」と呼びます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/702786/07aeb00b-2b31-575f-e507-0d3b993185fe.png)


今回のデータシート**「ファイル内容管理」はこの用途で作成しました。**

ロール「RHEL7_pam設定」や「RHEL7_profile設定」では、配置するファイルの内容を変数として定義している必要があります。
ですが、これらの変数に紐づくレコードを登録する度にファイルの内容を登録していては非効率です。入力ミスの増加にも繋がります。

何より、同じファイルの内容がサーバごとに全て異なるような作業ではありません。
パスワード規約の設定など、数通りから選択できればそれで十分だという場合が殆どではないでしょうか。

そのため、パラメータシートへの登録時はプルダウンで選択できるようにしました。
「RHEL7_pam設定」や「RHEL7_profile設定」で使用するファイルの内容自体は、参照項目機能によってデータシートから回収する、ということです。

### パラメータシートの作成
次はパラメータシートを作成していきます。
pam設定用、グループ設定用、ユーザ設定用をそれぞれ作成します。
(profile設定はuser設定メニューにまとめています。)

---
【使用メニュー】 「メニュー作成」メニューグループ　/ 「メニュー定義・作成」メニュー

| メニュー名 |
|:-:|
| pam設定 |

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/702786/c9da5a03-6dea-eeda-8344-ef687b52b026.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/702786/4f458742-51bf-bb35-51f5-0f53c24f6e12.png)

#### 【備考】リピート機能と縦メニュー
パスとファイル内容のように、決まった組み合わせを複数定義する場合リピート機能を利用できます。
設定した値に応じた回数だけ項目が追加されます。
縦メニューとは、この機能を用いて作成したメニューを指します。

詳細は[公式マニュアル](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_%E3%83%A1%E3%83%8B%E3%83%A5%E3%83%BC%E4%BD%9C%E6%88%90%E6%A9%9F%E8%83%BD.pdf)を参考にしてください。

---
| メニュー名 |
|:-:|
| グループ設定 |

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/702786/d6f37ea2-7722-f2ea-1088-9b0b122f3cba.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/702786/0d6776c3-a567-0bc8-06cf-8fabcf2538d9.png)

---
| メニュー名 |
|:-:|
| ユーザ設定 |

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/702786/86888645-9860-c2d9-9986-064081fadfa7.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/702786/cb713f54-7803-7381-af54-0a771f8bcaaf.png)


### 代入値自動登録設定
パラメータシートのパラメータと、Role中の変数を紐づけます。
これにより、パラメータシートに入力すると変数への代入値が自動的に定義されるようになります。

---
【使用メニュー】 「メニュー作成」メニューグループ　/ 「メニュー定義・作成」メニュー

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/702786/cbdfb042-9251-3f31-a469-9f8db67468ed.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/702786/9e2a0fdc-4040-2498-cd7d-cf162de38a60.png)


** Movement「pam設定」向けの設定**

共通設定

| メニューグループ:メニュー | 登録方式 | Movement | 変数名 |
|:-|:-|:-|:-|
| pam設定  |  value型 |RHEL7_pam設定|VAR_RH_pam |

|項目|メンバ変数名|代入順序|
|:-|:-|:-|
|パラメータ/ファイルパス|[0].path|-|
|パラメータ/ファイル内容|[0].text|1|
|パラメータ/ファイル内容_予備|[0].text|2|
|パラメータ/ファイルパス[2]|[1].path|-|
|パラメータ/ファイル内容[2]|[1].text|1|
|パラメータ/ファイル内容_予備[2]|[1].text|2|

**Movement「RHEL7_group」向けの設定**

共通設定

| メニューグループ:メニュー | 登録方式 | Movement | 変数名 |
|:-|:-|:-|:-|
| グループ設定  |  value型 |RHEL7_group設定|VAR_RH_group |

設定項目

|項目|メンバ変数名|代入順序|
|:-|:-|:-|
|パラメータ/アクション|[0].action|-|
|パラメータ/グループID|[0].group_id|-|
|パラメータ/グループ名|[0].group_name|-|
|パラメータ/アクション[2]|[1].action|-|
|パラメータ/グループID[2]|[1].group_id|-|
|パラメータ/グループ名[2]|[1].group_name|-|

**Movement「RHEL7_user」向けの設定**

共通設定

| メニューグループ:メニュー | 登録方式 | Movement | 変数名 |
|:-|:-|:-|:-|
| ユーザ設定  |  value型 |RHEL7_user設定| VAR_RH_user |

設定項目

|項目|メンバ変数名|代入順序|
|:-|:-|:-|
|パラメータ/アクション|[0].action|-|
|パラメータ/ユーザー名|[0].user_name|-|
|パラメータ/ユーザーID|[0].user_id|-|
|パラメータ/グループID|[0].group_id|-|
|パラメータ/コメント|[0].comment|-|
|パラメータ/ホームディレクトリ|[0].home_dir|-|
|パラメータ/ログインシェル|[0].login_shell|-|
|パラメータ/パスワード|[0].password|-|
|パラメータ/パスワード設定の有無|[0].password_apply|-|
|パラメータ/アクション[2]|[1].action|-|
|パラメータ/ユーザー名[2]|[1].user_name|-|
|パラメータ/ユーザーID[2]|[1].user_id|-|
|パラメータ/グループID[2]|[1].group_id|-|
|パラメータ/コメント[2]|[1].comment|-|
|パラメータ/ホームディレクトリ[2]|[1].home_dir|-|
|パラメータ/ログインシェル[2]|[1].login_shell|-|
|パラメータ/パスワード[2]|[1].password|-|
|パラメータ/パスワード設定の有無[2]|[1].password_apply|-|


**Movement「RHEL7_profile」向けの設定**

共通設定

| メニューグループ:メニュー | 登録方式 | Movement | 変数名 |
|:-|:-|:-|:-|
| ユーザ設定  |  value型 |RHEL7_profile設定|VAR_RH_profile |

設定項目

|項目|メンバ変数名|代入順序|
|:-|:-|:-|
|bashrcファイルパス|[0].path|-|
|ファイル内容|[0].text|1|
|ファイル内容_予備|[0].text|2|
|bashrcファイルパス[2]|[1].path|-|
|ファイル内容[2]|[1].text|1|
|ファイル内容_予備[2]|[1].text|2|

## パラメータの登録
では、データシートとパラメータシートへ登録を行います。
まずはプルダウン参照元となるデータシートへのレコード登録から進めます。

### データシート/フラグ管理_present_absent
presentとabsentを選択できれば良いので、登録は2件だけです。

---
【使用メニュー】 「フラグ/ファイル内容管理」メニューグループ　/ 「フラグ管理_present_absent」メニュー

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/702786/e352b8e0-8dea-001f-ad98-6cc133b84d4a.png)


|| フラグ |
|:-|:-|
|1件目| absent |
|2件目| present  |

### データシート/ファイル内容管理
【使用メニュー】 「フラグ/ファイル内容管理」メニューグループ　/ 「フラグ管理_present_absent」メニュー

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/702786/d1dfc2a2-7836-cf0e-fa76-b871a3e4fae6.png)

---
まずは/etc/login.defsの内容を登録します。

| ファイル識別子 | ファイル内容 | ファイル内容_予備 |
|:-|:-|:-|
|/etc/login.defs① |(下記)   | - |

```
# パスワードの管理
PASS_MAX_DAYS   99999   # 同一パスワードの最大利用日数
PASS_MIN_DAYS   0       # パスワードが変更できるまでの最短日数
PASS_MIN_LEN    5       # パスワードに求められる最小の文字数
PASS_WARN_AGE   7       # パスワードの有効期限がくる前に警告を出す期間の日数

# ユーザID の 範囲
UID_MIN                  1000
UID_MAX                 60000

# システムアカウントの ユーザID の 範囲
SYS_UID_MIN               201
SYS_UID_MAX               999

# グループID の 範囲
GID_MIN                  1000
GID_MAX                 60000

# システムアカウントの グループID の 範囲
SYS_GID_MIN               201
SYS_GID_MAX               999

# useradd時のホームディレクトリ作成有無
CREATE_HOME     yes

# マスク値
UMASK           077

# その他
USERGROUPS_ENAB yes
ENCRYPT_METHOD SHA512
```

---
次は/etc/pam.d/system-authです。
デフォルトより、パスワードに必要な文字種やパスワード入力の限界回数が厳しくなっています。

| ファイル識別子 | ファイル内容 | ファイル内容_予備 |
|:-|:-|:-|
|/etc/pam.d/system-auth① |(下記)   | -  |

```
#%PAM-1.0
auth        required      pam_env.so
auth        required      pam_faildelay.so delay=2000000
auth        sufficient    pam_unix.so nullok try_first_pass
auth        requisite     pam_succeed_if.so uid >= 1000 quiet_success
auth        required      pam_deny.so
auth        required pam_tally2.so   deny=5 unlock_time=7200 # 追加。

account     required      pam_unix.so
account     sufficient    pam_localuser.so
account     sufficient    pam_succeed_if.so uid < 1000 quiet
account     required      pam_permit.so

password    requisite     pam_pwquality.so try_first_pass local_users_only retry=6 authtok_type= maxsequence=3 minclass=3 # 追記箇所
password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok remember=2
password    required      pam_deny.so

session     optional      pam_keyinit.so revoke
session     required      pam_limits.so
-session     optional      pam_systemd.so
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session     required      pam_unix.so
```

---
次はbashrcの内容です。
開発者の気持ちが分からないながらも、雑にgitのエイリアスを追記してあります。

| ファイル識別子 | ファイル内容 | ファイル内容_予備 |
|:-|:-|:-|
|bashrc_開発者 | (下記)  |-   |

```
# .bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

# Uncomment the following line if you don't like systemctl's auto-paging feature:
# export SYSTEMD_PAGER=

# User specific aliases and functions
alias g='git'
alias ga='git add'
alias gd='git diff'
alias gs='git status'
alias gp='git push'
alias gb='git branch'
alias gst='git status'
alias gco='git checkout'
alias gf='git fetch'
alias gc='git commit'
```

---
bashrcに2パターン目です。
rmコマンド実行に確認を挟むエイリアスやcdコマンドのエイリアスを追記しました。


| ファイル識別子 | ファイル内容 | ファイル内容_予備 |
|:-|:-|:-|
|bashrc_運用者 |(下記)   | -  |

```
# .bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

# Uncomment the following line if you don't like systemctl's auto-paging feature:
# export SYSTEMD_PAGER=

# User specific aliases and functions
alias vlm='cd /var/lib/mysql'
alias ehc='cd /etc/httpd/conf.d'

alias la='ls -a'
alias rm='rm -i'
```

### パラメータシート/ pam設定
次はパラメータシートで、実際に代入値を登録していきます。
まずはpam設定です。

--
【使用メニュー】 「入力用」メニューグループ　/ 「pam設定」メニュー
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/702786/100ee685-b742-c717-9043-0ee310d403bd.png)


| ホスト | オペレーション | 代入順序 | ファイルパス | ファイル選択 |
|:-|:-|:-|:-|:-|
| PBC_target  | ユーザ環境_初期設定  |  1 | /etc/login.defs  | /etc/login.defs①  |
| PBC_target  | ユーザ環境_初期設定  |  2|  /etc/pam.d/system-auth | /etc/pam.d/system-auth① |


### パラメータシート/ グループ設定
作成するグループの情報を入力していきます。

---
【使用メニュー】 「入力用」メニューグループ　/ 「グループ設定」メニュー

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/702786/d9013184-fdc4-a208-e289-13973db5ce23.png)

| ホスト  | オペレーション | 代入順序  | アクション | グループID | グループ名 |
|:-:|:-:|:-:|:-:|:-:|:-:|
| PBC_target  | ユーザ環境_初期設定 | 1  | present  | 1010  | Developer |
| PBC_target  | ユーザ環境_初期設定 | 2 | present  | 1020  | Operator  |


### パラメータシート/ ユーザ設定
最後に作成ユーザの情報を登録します。

---
【使用メニュー】 「入力用」メニューグループ　/ 「ユーザ設定」メニュー
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/702786/d44be3ba-c653-234a-3304-330823197687.png)


|  | ホスト  | オペレーション | 代入順序 | アクション  | ユーザー名 | ユーザーID |
|:-|:-|:-|:-|:-|:-|:-|
| 1件目  | PBC_target | ユーザ環境_初期設定   | 1 | present  | dev1  | 1101  |
| 2件目  | PBC_target | ユーザ環境_初期設定   | 2 | present    | ope1  | 1201  |

↓続き

|  | グループID | コメント | ホームディレクトリ| ログインシェル  | パスワード | パスワード設定の有無 |bashrcファイルパス|bashrcファイル|
|:-|:-|:-|:-|:-|:-|:-|:-|:-|
| 1件目  | 1010 | - | 1 | /home/dev1  | /bin/bash  | ****  |True|/home/dev1/.bashrc|bashrc_開発者|
| 2件目  | 1020| - | 2 | /home/opre1  | /bin/bash  | ****  |True|/home/ope1/.bashrc|bashrc_運用者|

## Conductorの実行
これで全ての準備が終了しました。
最後にConductorを実行しましょう。

---
【使用メニュー】 「Conductor」メニューグループ　/ 「Conductor作業実行」メニュー
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/702786/242c1c4b-ba70-730b-b56a-e5a8cbcc6d9a.png)

## 作業結果の確認
実行後は自動で作業確認画面に遷移します。
ノード(Movement)をクリックすることでステータスや詳細結果を確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/702786/62195bbb-4482-5ed5-a0bf-6e971864bc49.png)

無事に作業を終了し、
意図した設定が行われたことを確認できました。


# 【おわりに】
今回はPlaybook CollectionとITAを利用して、ターゲットへのユーザ関連設定を行いました。

やはりITAreadmeが同梱されている分、ITAへの実装が省力化されている点が好印象でした。
ExastroITAサーバがあれば、後はGithubからPlaybook Collectionをダウンロードするだけで使用開始できます。

今回の作業は模擬的かつシンプルなものでしたが、Playbook Collection全体では非常に多様なRoleが公開されています。
これらを活用すれば、OSの基本設定作業を大きく効率化できるのではないでしょうか。

さて次回([作成中]())は設定作業ではなく、パラメータ情報の収集Roleを使用してみたいと思います。
請うご期待！

# 関連リンク
+ [【随時更新】Exastroの参考になる記事をまとめてみた](https://qiita.com/ooif/items/79952398fb03ca3ec7fd)<br>Exastro関連記事を一覧できます。<p></p>
+ [Exastro-Suite公式サイト](https://exastro-suite.github.io/docs/index_ja.html)<br>各種の公式情報です。<p></p>
+ [Exastro Playbook Collection](https://github.com/exastro-suite/playbook-collection-docs/blob/master/README.ja.md)<br>Playbook Collectionの配布ページです。利用ガイドやその他情報を確認できます。

[^1]: パラメータシートの項目でも、プルダウン参照元とすることは可能です。