AWXサーバー内で作成したPlaybookを実行する方法

[前回の記事](https://qiita.com/rui-watanabe/items/960149b0a1eabba6d6ff)では、AWXサーバーをインストールし、以下の実行手順でAnsibleのPlaybookを実行しました。

①Playbook情報などを記載したAnsibleプロジェクトをGitLabにPush
②AnsibleプロジェクトをGitLabからAWXサーバーにgit pull
③対象サーバーに対してAnsibleプロジェクトのPlaybookを実行

ただこの手順ではAnsibleプロジェクトからPlaybookを実行するために、AWXサーバーからGitLabサーバーに公開鍵認証をして外部接続を可能にする、という工程を挟まなければいけません。

要件によってはSCMサーバー（GitLabサーバー等）と接続せずに、AWXサーバー内で、Ansibleプロジェクトを管理したいということもあると思います。

そこで今回は、**AWXサーバー内でAnsibleプロジェクトを作成し、対象サーバーにPlaybookを実行する手順**についてまとめていきたいと思います。

#前提条件
- [前回の記事](https://qiita.com/rui-watanabe/items/960149b0a1eabba6d6ff)で行った、設定が完了している

#クローン情報がどこに保存してあるのか確認

まず初めに、前回GitLabからクローンしてきたAnsibleプロジェクトの情報がどこに保存されているの確認しておきます。

デフォルトの保存先は、AWXサーバー内で立ち上げっているawx_taskコンテナの、/var/lib/awx/projects/です。

```
[root@awx ~]# docker exec -it awx_task /bin/bash
bash-4.4# ls /var/lib/awx/projects/
_8__ansible_test_lamp  _8__ansible_test_lamp_.lock
bash-4.4# ls /var/lib/awx/projects/_8__ansible_test_lamp
CODE_OF_CONDUCT.md  group_vars  README.md  site.yml
CONTRIBUTING.md     LICENSE     roles
```

#AWX構築のinventoryファイルの変更

当初、先ほど確認したawx_taskコンテナ内の/var/lib/awx/projects/に、Ansibleプロジェクトを作成すれば今回の設定が可能だと思っていました。

しかしこれだと、AWXのWebUIのプロジェクト項目（Ansibleプロジェクトの読込先を設定する場所)で読み込まれません。

デフォルトでは、awx_taskコンテナ内の/var/lib/awx/projects/を、awx_webをコンテナにマウントされない設定になっているからです。

実際にAWXを構築した際のPlaybookをみてみると、awx_taskとawx_webの設定のところで以下のような記載があります。

```
volumes: >
      {{
        [project_data_dir + ':/var/lib/awx/projects:rw'] if project_data_dir is defined else []
        + [ca_trust_dir + ':/etc/pki/ca-trust:ro'] if ca_trust_dir is defined else []
      }}
```

この記載で、project_data_dirが未定義の場合、空の配列となっているようです。

マウント設定をするためには、AWX構築をinventoryファイルでproject_data_dirの定義をしなければいけないので、その記載をします。

マウント先がデフォルトのディレクトリ先で良い場合は、project_data_dirのコメントアウトを外すだけで大丈夫です。（別にマウント先を指定する場合は適宜変更が必要）

```
[root@awx ~]# cd ~/awx/installer
[root@awx installer]# vi inventory
# AWX project data folder. If you need access to the location where AWX stores the projects
# it manages from the docker host, you can set this to turn it into a volume for the container
# project_data_dir=/var/lib/awx/projects
project_data_dir=/var/lib/awx/projects
```

コメントアウトでは丁寧に、「AWXのProjectの保存先にアクセスが必要な場合、以下のコンテナのボリューム設定（マウント設定）をしてください」と書いてありますね。

その後、AWXのplaybookを再実行して修正を反映させます。

```
[root@awx installer]# ansible-playbook install.yml -i inventory
```

#AWXサーバー内に手動作成したPlaybookを実行

マウントの設定が終わったので、最後にAWXサーバー内に手動作成したPlaybookが実行できるかテストしていきたいと思います。

今回は新規Projectとしてtest_projectというものを作成し、slパッケージをインストールするinstall-sl.ymlというPlaybookを作成しました。

作成先は、project_data_dirでマウント先として指定した、/var/lib/awx/projects/になります。

```
[root@awx ~]# docker exec -it awx_task /bin/bash
bash-4.4# cd /var/lib/awx/projects/
_8__ansible_test_lamp  _8__ansible_test_lamp_.lock
bash-4.4# mkdir test_repo && cd test_repo
bash-4.4# vi install-sl.yml

---
- name: test_project_playbook
  hosts: all
  become: true
  tasks:
    - name: install sl
      yum:
        name: sl
        state: present
```

Ansibleプロジェクトの作成が終わったら、AWXにアクセスします。

プロジェクトタブの、緑のプラスボタンの新規作成をクリックしてください。

マウントの設定がうまくいっていれば、SCMタイプを手動に選択した際に、PLAYBOOKディレクトリという項目が表示されるようになります。

ここでは名前をtest-project、組織をDefault、SCMタイプを手動、PLAYBOOKディレクトリtest-projectに選択します。

![demo](https://gyazo.com/4674bd74135490f071640f278adcf82d/raw)

保存したのちに、テンプレートタブで新規のテンプレートを作成します。

プロジェクトはさきほど作成したtest-projectを選択し、PLAYBOOKにinstall-sl.ymlを選択します。

また名前をtest-intall-sl、ジョブタイプをチェック、認証情報を以前の記事で作成したtarget-server1に設定します。

![demo](https://gyazo.com/3095f3b82b7ea7d9d68dcf9135ed8baf/raw)

最後にこのテンプレートのジョブを実行し、以下のように成功したら完了です。

![demo](https://gyazo.com/2008ff5b310b3ea004fdc02f2187e271/raw)

#参考URL
https://sky-joker.tech/2018/03/21/awx%E3%81%ABvarlibawxprojects%E3%81%8C%E3%81%AA%E3%81%84%E6%99%82%E3%81%AE%E5%AF%BE%E5%87%A6/
https://note.com/shift_tech/n/n5e420a1fec8c