Exastro IT Automation 2.4でAnsible-LegacyRoleを使ってみた

# はじめに
今回はAnsible-LegacyRoleとAnsibleGalaxyのロールパッケージを使用して、sudoの設定ファイルを編集してみたいと思います。

### 作業環境

- Exastro IT Automation 2.4.0
- RHEL8(ITAサーバ)
- RHEL8(targetサーバ)
- Windows 10(ITAクライアント)
- Google Chrome(Win10側)


![作業環境2.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798801/65d679e2-3eb2-262b-7101-1d1f1ed5f8ad.png)


# Ansible-LegacyRoleとは
Ansible-LegacyRoleとは、ロールパッケージを登録して利用できるモードです。
そもそもRoleとは、playbookで読み込む、Ansible標準のファイル構成で作られた設定のようなものです。
決められたファイル構成にすることで、Ansible側で解釈して設定を読み込んでくれます。
単純な処理だと1つのPlaybookで問題ありませんが、複雑な処理の場合はplaybookを適切なRoleに分割してインクルードさせることで、再利用性や可読性がよくなるというわけです。
自分が作成したRoleや、Ansible Galaxyから取得したRoleをITAに登録して使うことができますが、ITAreadmeを作成することで、パッケージ中のファイルを変更することなく変数定義に必要な変更を加えることができます。

# 作業フロー
![画像15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798801/ea6a57c0-ed11-0008-385c-b3e6cee69863.png)


具体的な手順は以下のようになります。
1.事前準備
2.パラメータシートの作成
3.Movementの作成
4.ロールパッケージの登録
5.MovementとRoleを紐付け
6.パラメータシートの項目とMovementの変数を紐付け
7.機器一覧にターゲットマシンを登録
8.オペレーションを作成
9.事前確認
10.作業実行
11.結果確認

# 1.事前準備

今回はAnsible-GalaxyからダウンロードしたRoleをITAに登録し、実行します。
使用するRoleは以下のURLからダウンロードします。
https://galaxy.ansible.com/weareinteractive/sudo

![画像4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798801/6d0b9eee-ea69-7681-d185-eeffa3b3555f.png)

![画像7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798801/5c311626-60be-403c-500a-1daa204d5bb4.png)

Ansible Galaxy等から取得したRoleは、任意の部分の設定がコメントアウトされていたり、デフォルトの値が入っていたりします。
ITAreadmeを作成することで、パッケージ中のファイルを変更することなく変数定義に必要な変更を加えることができます。


ITAreadmeを下記のように作成します。
<details><summary>ITAreadmeとは</summary>

変数の定義を追加・変更するための設定ファイルのこと。
Playbook中に直接変数を定義したくない場合など、defaults変数定義ファイルに変数が定義されていない際に、ITA readmeファイルに変数の定義を設定することで、代入値管理機能で変数の値を指定することができます。
詳しくはこちらを参照。→[ITAreadme の記述](https://ita-docs.exastro.org/ja/2.4/manuals/ansible-driver/ansible_legacyrole.html#ita-readme)

</details>

```yml:ita_readme_ansible-sudo-master.yml
sudo_users:
 - name: 
```


「roles」フォルダを作成し、展開した「ansible-sudo-master」を入れます。 その後、「roles」フォルダと「ITAreadme」をまとめてzipで圧縮します。

![画像1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798801/883d748d-5867-2d0b-97ca-5504e14080e4.png)


作成したroles.zipは以下の階層になります。
![画像1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798801/dd1c601a-bf8d-edaa-b728-ae0ac86933af.png)

LegacyRoleは下記2つの条件を満たすフォルダをRoleとして扱うため、誤りがないようご注意ください。rolesフォルダがない場合は登録時にエラーとなります。
1.「roles」フォルダの配下に存在する
2.「tasks」フォルダを含む。

# 2. パラメータシートの作成
今回使用するRoleは、sudo権限を許可するための設定ファイルを/etc/sudoers.d配下に追加します。
どのユーザに権限を付与するか、どのようなファイル名で作成するかの情報を登録するためのパラメータシートを作成していきます。

「パラメータシート作成」メニューグループ　→　「パラメータシート定義・作成」メニューを選択します。

![画像8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798801/cccb513b-1769-5ef4-fbb0-31aa846146c5.png)


項目の設定値は、以下のように登録しました。

|設定項目|項目1設定値|項目2設定値|
|:---:|:---:|:---:|
|項目の名前|ユーザー名|ファイル名|
|項目の名前(Rest API用)|sudoer_name|sudoer_filename|
|入力方式|文字列(単一行)|文字列(単一行)|
|最大バイト数|32|32|
|必須|✓|✓|


![画像9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798801/9f317af3-1d29-c7d9-0d64-d5b5c4b3e3a0.png)


パラメータシート作成情報の設定値は、以下のように登録しました。
|設定項目|設定値1|
|:---:|:---:|
|パラメータシート名|LegacyRoleDemo|
|パラメータシート名(REST用)|LegacyRoleDemo|
|作成対象|パラメータシート（ホスト/オペレーションあり）|
|表示順序|2|

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

# 3. Movementの作成

「Ansible-LagacyRole」メニューグループ　→　「Movement一覧」メニューを選択します。

![画像10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798801/2c5bcd52-1d4f-4f76-f239-1ff65a42cae1.png)


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

|Movement名|ホスト指定形式|
|:---:|:---:|
|Sudoer登録|IP|

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

# 4. ロールパッケージの登録
「Ansible-LagacyRole」メニューグループ　→　「ロールパッケージ管理」メニュー　→　「登録」を選択し、事前に準備しておいた「roles.zip」をアップロードします。

![画像11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798801/9226db8e-5109-c3a2-e361-160e9128dc68.png)


以下のように登録しました。
|ロールパッケージ名|ロールパッケージファイル(ZIP形式)|
|:---:|:---:|
|suso-master|roles.zip|

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

# 5. MovementとRoleを紐付け
「Ansible-LagacyRole」メニューグループ　→　「Movement-ロール紐付」メニュー　→　「登録」を選択します。

![画像12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798801/fa1937f2-3442-7986-1037-bbe47574b181.png)

以下のように登録しました。
|Movement名|ロールパッケージ名:ロール名|インクルード順序|
|:---:|:---:|:---:|
|Sudoer登録|sudo-master:ansible-sudo-master|1|

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

# 6.パラメータシートの項目とMovementの変数を紐付け
「Ansible-LagacyRole」メニューグループ　→　「代入値自動登録設定」メニュー　→　「登録」を選択します。

![画像13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798801/0fff0fde-2591-9168-8349-f4f90f5a4f72.png)

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

|メニューグループ:メニュー:項目|登録方式|Movement名|Movement名:変数名|Movement名:変数名:メンバー変数|
|:---:|:---:|:---:|:---:|:---:|
|代入値自動登録用:LegacyRoleDemo:パラメータ/ユーザー名|Value型|Sudoer登録|Sudoer登録:sudo_users|Sudoer登録:sudo_users:[0].name|
|代入値自動登録用:LegacyRoleDemo:パラメータ/ファイル名|Value型|Sudoer登録|Sudoer登録:sudo_sudoers_file||

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


# 7.機器一覧にターゲットマシンを登録
「Ansible共通」メニューグループ　→　「機器一覧」メニュー→　「登録」を選択します。
以下のように登録しました。
|HW機器種別|ホスト名|IPアドレス|ユーザ|パスワード|認証方式|
|:---:|:---:|:---:|:---:|:---:|:---:|
|SV|server01|ターゲットサーバーのIPアドレス|root|(パスワード)|パスワード認証|

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

# 8.オペレーションを作成

「基本コンソール」メニューグループ　→　「オペレーション一覧」メニュー　→　「登録」を選択します。

![画像14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798801/324981d3-8c5d-cc95-e510-44dfb32130bf.png)


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

|オペレーション名|実施予定日時|
|:---:|:---:|
|LegacyRole_Practice|2024/04/01 12:00:00|

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

# 9.事前確認
実行する前に現在の状態を確認します。
サーバーに SSH ログインし、下記のコマンドを実行します。
作業実行前のため、ファイルは存在しません。

```
cat /etc/sudoers.d/example_sudoers
# cat: /etc/sudoers.d/example_sudoers: No such file or directoryと表示される
```

# 10.作業実行
「Ansible-LegacyRole」メニューグループ →「作業実行」メニュー


# 11.結果確認
サーバに SSH ログインし、下記のコマンドを実行します。

```
cat /etc/sudoers.d/example_sudoers
```

事前確認の際には存在しなかった「example_sudoers」が追加されています。
このように、今回ダウンロードしたRoleは/etc/sudoers.d配下にファイルを追加します。


```/etc/sudoers.d/example_sudoers
# Ansible managed

example_name ALL=(ALL:ALL)  ALL
```
# おわりに
今回は、Ansible3モードの1つ、Ansible-LegacyRoleの使い方について説明しました。
AnsibleGalaxyのロールパッケージ以外にもたくさんのRoleがあるので、気になる方は調べてみてはいかがでしょうか。