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

## Ansible-Pioneerとは
Ansible-Pioneerとは、なんとITAの独自モジュールです。
対話ファイルというものを作成すると、直接実行するPlaybookからPioneerモジュールを使って対話ファイルを順番に実行していきます。

Ansibleのどのモジュールを使っても自動化できない場合、手動作業を挟んでしまうと自動化のメリットが半減しますよね。
そこで、Ansible-Pioneerが自動化を止めない最後の切り札となるわけです。
Telnet・SSHでログイン可能であれば対応可能なので、幅広い機器に対応できますね。
これでより柔軟な自動化を実現できます。

Ansible-Pioneerについて詳しくは、[ITAマニュアル](https://ita-docs-staging.exastro.org/ja/2.4/manuals/ansible-driver/ansible_pioneer.html)を参考にして下さい.

# ③Ansible-Pioneer編
今回はPioneer独自モジュールを用い、対象ホストの/tmp/hostsにホスト追加を実施します。

具体的な手順はこのようになります。

1.事前準備
2.Movementの設定
3.オペレーションの設定
4.代入値管理（パラメータシートの作成）
5.作業実行

## 1.事前準備
今回は以下の対話ファイルを使用します。
書式やモジュールについての詳細は[ITAマニュアル](https://ita-docs-staging.exastro.org/ja/2.4/manuals/ansible-driver/ansible_pioneer.html)を参照するとよいです。
```add_host.yml
conf:
  timeout: 20
  
exec_list:
  - expect: 'password'
    exec: '{{ __loginpassword__ }}'

#“register”を用い、‘cat /tmp/hosts’ の標準出力を登録
  - command: 'cat /tmp/hosts'
    prompt: root@{{ __inventory_hostname__ }}
    register: result_stdout
    when:
      - VAR_hosts_ip is define
      - VAR_hosts_name is define

  - command: 'echo {{ item.0 }} {{ item.1 }} >> /tmp/hosts'
    prompt: 'root@{{ __inventory_hostname__ }}'
    when:
      - VAR_hosts_ip is define
      - VAR_hosts_name is define
#“with_items”を用いた繰り返し処理を定義
    with_items:
      - '{{ VAR_hosts_ip }}'
      - '{{ VAR_hosts_name }}'
#“exec_when”を用いた分岐処理を定義
#判定は繰り返しごとに行われる
    exec_when:
      - result_stdout no match({{ item.0 }} *{{ item.1 }})
#登録された出力中に指定文字列が存在しないときに処理を行う
```

## 2.Movementの設定
ここでは、Roleに関連付けるMovementの設定について述べます。
### Movementの作成
「Ansible-Pioneer」メニューグループ >> 「Movement一覧」
を選択し、登録作業ボタンより登録作業を開始します。

必須入力項目は「Movement名」「ホスト指定形式」です。

※Movement：各機器に対する構築ツールを使った構築、設定などの作業の単位

今回は下表のように設定します。
![スクリーンショット 2024-06-11 174423.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3800064/ae11568a-d095-74f5-371d-8a67309ebe92.png)

| Movement名 | ホスト指定形式 | 
| ------- | ------- | 
| add_host    | IP   | 

### OS種別マスタの作成
PioneerはターゲットホストのOSに応じて、実際に投下されるコードを選択することができます。

「Ansible-Pioneer」メニューグループ → 「OS種別」
を選択し、登録作業ボタンより登録作業を開始します。

今回のターゲットホストはRHEL8のサーバなので、以下のように設定します。
| OS種別名 | SV | 
| ------- | ------- | 
| RHEL8    | True  | 

![スクリーンショット 2024-06-11 180623.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3800064/f1e922d5-4e24-3949-40a4-a13d7384d51b.png)

### 機器一覧情報への追加
先程登録したOS種類とターゲットマシンを紐付けます。

「基本コンソール」メニューグループ → 「機器一覧」を選択します。
[フィルタ]ボタンを押下し、対象となる機器(target)の[更新]を押下します。

次に下表のように選択・設定します。
| プロトコル | OS種別 | 
| ------- | ------- | 
| ssh    | RHEL8  | 

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3800064/c7c612d6-8e4b-cfe2-9f82-73f7318fc94d.png)

### 対話種別の作成

「Ansible-Pioneer」メニューグループ → 「対話種別」
を選択し、登録作業ボタンより登録作業を開始します。

次に下表のように選択・設定します。
| 対話種別名 |
| ------- |
| hosts追加　|

![スクリーンショット 2024-06-11 181846.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3800064/f1831b26-ccdf-b209-d1a2-33ce7d3f87be.png)

## 3.オペレーションの設定
オペレーションを作成し、Movementとホストを関連付けます。

ここでのオペレーションは、作業全体を示すITAシステム内で使用する作業名称のことを指します。

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

必須入力項目は「オペレーション名」「実施予定日」です。
今回は下表のように設定します。
| オペレーション名	 | 実施予定日時 | 
| ------- | ------- | 
| Pioneer_Practice    | (任意の値)  | 

![スクリーンショット 2024-06-11 182729.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3800064/f7ae1bd0-eca1-c8a3-a091-1c2a96e1edf1.png)

## 4.代入値管理（パラメータシートの作成）
### パラメータシート作成
パラメータシートを作成し、ターゲットマシンに適用するパラメータを管理します。

「パラメータシート作成」メニューグループ → 「パラメータシート定義・作成」
を選択、必須項目を入力します。

必須入力項目は「パラメータシート名」「パラメータシート名（REST）」「表示順序」「対象メニューグループ」です。
また、今回はバンドル利用にチェックを入れます。
![スクリーンショット 2024-06-11 183725.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3800064/a2efc728-525f-0ad7-211a-3c66198c8070.png)

### パラメータシートの項目名定義
ここではシートの項目を定義します。

項目を追加し、「項目名」「入力方式」「最大バイト数」を下図のように設定します。
![スクリーンショット 2024-06-11 184324.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3800064/93901c81-3fd3-e577-2621-50a086df4a55.png)

### パラメータの登録
ここまでで、パラメータシートの作成を行いました。
ここからはターゲットマシンの設定に使用するデータを登録します。

「AnsibleDriver実践用」メニューグループ >> 「Pioneer実践」
を選択し、登録を開始します。

必須入力項目は「ホスト名」「オペレーション」「パラメータ」です。

具体的な設定は以下の表を参考にします。
![スクリーンショット 2024-06-12 101716.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3800064/ad1aaeea-c619-a6f7-360a-1b7b25000a54.png)

| ホスト名	 | オペレーション | 代入順序 |   IP_address |  Host_name|
| ------- | ------- |  ------- |   ------- | ------- | 
| (対象のホスト)    | Pioneer_practice  |1  |0.0.0.0 |`www.test.com`  |
| (対象のホスト)    | Pioneer_practice  |2  |1.1.1.1  |`www.pioneer.com`  |

### 代入値自動登録設定
各項目と変数を関連付けます。

「Ansible-Pioneer」メニューグループ → 「代入値自動登録設定」
を選択し、登録作業をします。
具体的な設定は以下の表を参考にします。

| メニューグループ:メニュー:項目	 | 代入順序 | 登録方式 | Movement名 |  Movement名:変数名|  代入順序|
| ------- | ------- |  ------- |   ------- | ------- |  ------- | 
| 代入値自動登録用:Pionner:パラメータ/Host_name| 1  |Value型  |add_host|add_host:Var_hosts_name  |1
| 代入値自動登録用:Pionner:パラメータ/Host_name| 2  |Value型  |add_host|add_host:Var_hosts_name  |2
| 代入値自動登録用:Pionner:パラメータ/IP_address| 1  |Value型  |add_host|add_host:Var_hosts_ip |1
| 代入値自動登録用:Pionner:パラメータ/IP_address| 2  |Value型  |add_host|add_host:Var_hosts_ip  |2

![スクリーンショット 2024-06-12 102152.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3800064/85296890-6a94-e63e-3641-c90029c8da84.png)

## 5.作業実行

### Movementの実行

「Ansible-Pioneer」メニューグループ →「作業実行」を選択します。

実行するMovementとオペレーションを選択し、ページ下にある[実行]をクリックすることで作業が開始します。
![スクリーンショット 2024-06-12 103824.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3800064/d63f4c61-d453-5221-7653-55ae0c3793db.png)

### 実行結果の確認
作業実行すると画面が遷移して、実行ステータスやログが表示されます。
また、投入データや結果データをまとめたZIPファイルをダウンロードすることができます。

適宜、必要項目を確認します。
![スクリーンショット 2024-06-12 110249.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3800064/114f210e-c652-c4f1-e8b8-1d2eafdedb55.png)
また、ターゲットホストに移動し/tmp/hostsの中身を確認します。
```target.(RHEL8)
# cat /tmp/hosts
```

以下が表示され、ホストが追加されていれば成功です。
```
0.0.0.0 www.test.com
1.1.1.1 www.pioneer.com
```

# おわりに
ITAに搭載されているAnsible-Pioneerモードの使い方について記事を作成し説明しました。基本的な操作はLegacyモードなどとほとんど変わらず、使いづらいということもないので、対話が入ってくる処理の場合に使うと便利だと思います。