AWX を デプロイして NetApp Ansibleモジュール用の実行環境(Execution Environment)を 登録してみた

# AWX を デプロイして 自分で作成した 実行環境(Execution Environment)を 登録してみた
[以前の記事](https://qiita.com/yoihoka/items/7ab852bb9346ef6fe5b5)でAnsible実行環境(Execution Environment)用のコンテナイメージを作成する手順を紹介しました。
そこで作成したAnsible実行環境はAWX環境で登録・利用が可能なものとなります。

そこで今回はシンプルに AWXをデプロイして実行環境(Execution Environment)として登録する操作を実施してみたいと思います。

なお、Kubernetesクラスタは展開済みでLB(今回はMetallB)とCSI Driver（NetAPp Astra Trident）をデプロイしてある環境を構築済みである前提となっています。前提の環境を準備する際は、Kubernetesクラスタを Kindを利用して シングルホストでAWXを簡易的に試すための手順が[NetAppのサイト](https://netapp.io/2021/08/19/how-to-guide-setting-up-awx-on-a-single-host/)でも紹介されていますので、そちらも参考にしてください。


## 前提
以下の環境で試しています

- kubernetes 1.20.0
- AWX Operator 0.18.0
- AWX 20.0.1
- Astra Trident 22.01.0
- MetalLB 0.12.1
- Ontap 9.9.1


## やってみること
1. AWXをOperatorでKubernetesクラスタにデプロイ 
2. デプロイしたAWXにアクセス
3. 自分で作成したansible実行環境用コンテナイメージを登録


## 1. AWXをKubernetesクラスタにデプロイ 
[こちらのサイト](https://github.com/ansible/awx-operator)に記載の手順で AWXをデプロイします。

```shell:
$ git clone https://github.com/ansible/awx-operator.git
$ cd awx-operator
$ git checkout 0.18.0
$ export NAMESPACE=awx
$ make deploy
〜出力省略〜
$ cat <<EOF > awx.yaml
apiVersion: awx.ansible.com/v1beta1
kind: AWX
metadata:
  name: awx
  namespace: awx
spec:
  service_type: LoadBalancer
  ingress_type: none
  hostname: awx-demo.green.lab
  projects_persistence: true
#  projects_storage_class:
  projects_storage_size: 5Gi
EOF
$ kubectl get pods -n $NAMESPACE
NAME                                               READY   STATUS    RESTARTS   AGE
awx-operator-controller-manager-845c5c6d69-bz6n8   2/2     Running   0          53s
$ kubectl apply -f awx.yaml
awx.awx.ansible.com/awx created
$ kubectl get pods -n $NAMESPACE
NAME                                               READY   STATUS    RESTARTS   AGE
awx-b8744747-cwwnx                                 4/4     Running   0          78s
awx-operator-controller-manager-845c5c6d69-bz6n8   2/2     Running   0          15m
awx-postgres-0                                     1/1     Running   0          1m46s
$ 
```

## 2. デプロイしたAWXにアクセス
デプロイしたAWXにアクセするするために、IPと初期パスワードを確認します。


```shell:

$ kubectl -n awx get secret awx-admin-password -o jsonpath='{.data.password}' | base64 --decode
7imhler1DpO3Tlkc4G3xgBkXjAjg7FZLg$ kubectl -n awx get service
NAME           TYPE           CLUSTER-IP     EXTERNAL-IP       PORT(S)        AGE
awx-postgres   ClusterIP      None           <none>            5432/TCP       4d17h
awx-service    LoadBalancer   10.233.45.41   192.168.100.231   80:31313/TCP   4d17h

```
上記の例では、192.168.100.231が、AWXのIP、7imhler1DpO3Tlkc4G3xgBkXjAjg7FZLgがAWXパスワードになります。

以下の情報でブラウザからAWXにアクセスして、ログインを押します。

| パラメータ名 | 値 | 備考
|:---:|---|---|
|URL|　http://＜＜AWXのIP＞＞ |例 "http://192.168.100.231"
|ユーザー名：| admin|
|パスワード| ＜＜AWXパスワード＞＞|例 "7imhler1DpO3Tlkc4G3xgBkXjAjg7FZLg"


ログインが成功するとダッシュボードが表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/981926/f1975e84-eb67-e52c-ddb6-a8b72883dfc8.png)

## 3. 自分で作成したansible実行環境用コンテナイメージを登録
AWXの画面左側にある、"管理"→"実行環境"のクリックし、"追加"をクリックします。

"名前"を入力して、"イメージ"に自分で作成したansible実行環境用コンテナイメージの情報(例："DOCKER_ID"/ansible-ee:2.11-custom-v2)をを入力して、"保存"をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/981926/67e012f3-9369-eeee-e93f-68dd5ef0852e.png)


なお、ansible実行環境用のコンテナイメージ準備については[こちらのブログ](https://qiita.com/yoihoka/items/7ab852bb9346ef6fe5b5)で試した時の内容を記載しています。自分で作成する際には参考にしてください。

これで、実行環境の登録が完了しました。
ジョブテンプレートから指定することで、自分で作成したansible実行環境用コンテナイメージ上で Ansibleのplaybookが実行されることになります。

## 4. 登録した実行環境上で Playbook を実行してみる
登録した実行環境上でNetAppのAnsibleモジュールを利用したPlaybookを実行してみます。

AWXから疎通可能なNetApp Ontapストレージに対して、ストレージのコンフィグ情報を収集する簡単なPlaybookを準備し実行してみます。

今回は シンプルに動作確認するために AWX(のPodがマウントしているプロジェクト用永続ボリューム）上にPlaybookファイルを作成して実行してみます。

### 4-1. Playbookファイルを配置
AWXのPodに接続してPlaybookファイルを作成します。

```shell:
$ kubectl get pods -n $NAMESPACE
NAME                                               READY   STATUS    RESTARTS   AGE
awx-b8744747-cwwnx                                 4/4     Running   0          78s
awx-operator-controller-manager-845c5c6d69-bz6n8   2/2     Running   0          15m
awx-postgres-0                                     1/1     Running   0          1m46s
$ kubectl -n $NAMESPACE exec -it awx-b8744747-cwwnx -c awx-ee -- /bin/bash
bash-4.4$ mkdir /var/lib/awx/projects/awxtest1
bash-4.4$ cat <<EOF > /var/lib/awx/projects/awxtest1/ontap_info.yaml
---
- name: ONTAP INFO
  hosts: localhost
  gather_facts: no
  collections:
    - ansible.builtin
    - netapp.ontap
  tasks:
    - name: ontap info
      netapp.ontap.na_ontap_info:
        validate_certs : no
        https          : yes
        hostname: "<<NetAppストレージのIPアドレス>>"
        username: "＜＜NetAppストレージの管理者ユーザ＞＞"
        password: "＜＜管理者ユーザのパスワード＞＞"
        gather_subset:
          - vserver_info
          - volume_info
      register: ontap_info

    - name: msg
      debug: var=ontap_info
EOF
$ exit
```
※NetAppストレージのIPアドレス、管理者ユーザ、パスワードは、AWXから疎通可能なNetApp Ontapストレージの情報を設定


### 4-2. AWXプロジェクト作成
AWXの画面左側にある、"リソース"→"プロジェクト"をクリックし、"追加"をクリックします。

以下の情報を入力して、"保存"をクリックします。

| パラメータ名 | 値 | 備考
|:---|---|---|
|名前|任意 |
|ソースコントロール認証情報タイプ| 手動を選択 |
|Playbook ディレクトリー | ディレクトリ名を選択 | 4-1で作成したもの

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/981926/1303fa13-0fa6-6b42-1fed-025ef01a3dbc.png)


### 4-3. AWXジョブテンプレートを作成して Playbook を実行
AWXの画面左側にある、"リソース"→"テンプレート"をクリックし、"追加"→”新規ジョブテンプレートの追加”をクリックします。

以下の情報を入力して、"保存"をクリックします。

| パラメータ名 | 値 | 備考
|:---|---|---|
|名前|任意 |
|インベントリー：|"Demo Inventory"を選択|デフォルト作成のもの
|プロジェクト|プロジェクト名を選択 |4-2で作成したもの
|実行環境|実行環境を選択 |3で登録したもの
|Playbook|Playbookファイルを選択 |4-1で作成したもの

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/981926/58b242b9-07f1-8171-53c5-2237ac424e15.png)


保存後のテンプレート 詳細画面 で、"起動"をクリックすると 登録したPlaybookが実行され、実行結果が表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/981926/bf4e0f7d-d2d4-7580-56e5-de94eac054ea.png)


"netapp.ontap.na_ontap_info"というONTAPのコンフィグ情報を収集するAnsibleモジュールが実行され、各種取得した情報が表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/981926/244ca4a1-f678-aaeb-9812-8ee3ec641d3b.png)

この実行結果の情報は AWXの画面左側にある、"ビュー"→"ジョブ"の画面で 後から再度確認が可能です。


## まとめ
AWXをデプロイし、自分で作成したansible実行環境用コンテナイメージを登録してみました。

AWXのデプロイは、 Operatorを利用して、非常に簡単に実施可能になっています。
また、自分で作成したAnsilbeは自動化実行環境用コンテナイメージの登録も、簡単に実施することができます。

AWXにコンテナ・Kubernetesの技術を取り入れ、構築・設定フェーズも簡単に行えるようになってきたので、より自動化への取り組みがしやすい環境が整ってきている印象です。
AWX導入後の設定もAnsibleで自動化できたりするので、そちらも興味あれば是非試してみてください。