AWXをインストールしてCatalystにPlaybookを実行してみる

社内でAnsibleの勉強会をやろうと思ってメモです。
AnsibleでAWXをインストールして簡単なPlaybookをCatalystに実行します。

環境はAnsibleが入ったサーバ、AWXを入れるサーバは両方ともCentOS7です。

###インストール

以下のようなPlaybookを作成して実行します。
これだと入るdockerが古いので手直ししないと...
今日のところは(・ω<) てへぺろ

```yaml:install_awx.yml
---

- hosts: AWX
  connection: ssh
  gather_facts: False

  tasks:
  - name: add epel repo
    yum_repository:
      name: epel
      description: EPEL YUM repo
      baseurl: https://download.fedoraproject.org/pub/epel/$releasever/$basearch/
      gpgcheck: no
      enabled: yes

  - name: install packsges
    yum:
      name: "{{ packages }}"
    vars:
      packages:
        - https://releases.ansible.com/ansible/rpm/release/epel-7-x86_64/ansible-2.7.9-1.el7.ans.noarch.rpm
        - docker
        - git
        - python2-pip

  - name: pip install docker-compose
    pip:
      name: docker-compose

  - name: Enable service docker
    service:
      name: docker
      state: started
      enabled: yes

  - name: git clone awx
    git:
      repo: 'https://github.com/ansible/awx.git'
      dest: /awx
      clone: yes
      version: '4.0.0'

  - name: exe ansible-playbook
    command: ansible-playbook -i inventory install.yml
    args:
      chdir: /awx/installer

```

実行します。
Playbookは完了しました。

```
# ansible-playbook -i hosts install_awx.yml

PLAY [AWX] *****************************************************************************************************

TASK [add epel repo] *******************************************************************************************
changed: [172.16.1.74]

TASK [install packsges] ****************************************************************************************
changed: [172.16.1.74]

TASK [pip install docker-compose] ******************************************************************************
changed: [172.16.1.74]

TASK [Enable service docker] ***********************************************************************************
changed: [172.16.1.74]

TASK [git clone awx] *******************************************************************************************
changed: [172.16.1.74]

TASK [exe ansible-playbook] ************************************************************************************
changed: [172.16.1.74]

PLAY RECAP *****************************************************************************************************
172.16.1.74                : ok=6    changed=6    unreachable=0    failed=0
```

AWX用のコンテナも動いてますね。

```
[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE                        COMMAND                  CREATED             STATUS              PORTS                                                 NAMES
b16b32504a1a        ansible/awx_task:4.0.0       "/tini -- /bin/sh ..."   5 minutes ago       Up 5 minutes        8052/tcp                                              awx_task
b43c17e6370d        ansible/awx_web:4.0.0        "/tini -- /bin/sh ..."   5 minutes ago       Up 5 minutes        0.0.0.0:80->8052/tcp                                  awx_web
a43008a6ce46        postgres:9.6                 "docker-entrypoint..."   5 minutes ago       Up 5 minutes        5432/tcp                                              awx_postgres
d1d39b0519c5        ansible/awx_rabbitmq:3.7.4   "docker-entrypoint..."   5 minutes ago       Up 5 minutes        4369/tcp, 5671-5672/tcp, 15671-15672/tcp, 25672/tcp   awx_rabbitmq
8f8b08b81437        memcached:alpine             "docker-entrypoint..."   5 minutes ago       Up 5 minutes        11211/tcp                                             awx_memcached
```

ブラウザでアクセスするとインストール中の処理をしていますので、しばし待ちます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146663/77c099bc-3dbb-99e7-3284-d153f17bb016.png)

処理が完了したらログインするのですが、、、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146663/f3cdb5d5-c227-04c4-0f25-610cfdc5268e.png)

admin/password で入れなかったです...
おかしいなぁー、このissueかなぁ...
https://github.com/ansible/awx/issues/3684

いったん4.0.0は削除して入れ直しました。
/tmp/awxcomposeにdocker-compose.ymlが作成されていたので、それでdocker-compose downした後にイメージ消してから入れ直しました。

```
# cd /tmp/awxcompose
# docker-compose down
# docker rmi $(docker images -a -q)
```

branchを2.1.2にしてみて、再インストールしてみます。
以下の記事を参考にさせて頂き、ポスグレのDataフォルダとdocker-composeを使用するためinventoryファイルを置換しました。
Playbookを実行してしばらく待ちます。

https://blog.a-1.dev/post/2018-12-03-ansible-awx/

```
# cd /awx
# git branch
* (detached from 4.0.0)
  devel
# git checkout -b 2.1.2 tags/2.1.2
# cd installer/
# sed -i s@postgres_data_dir=/tmp/pgdocker@postgres_data_dir=/var/lib/pgsql/data@ inventory
# sed -i 's/# use_docker_compose=false/use_docker_compose=true/' inventory
# ansible-playbook -i inventory install.yml
```

ログインできました。。
何だったんだろう？？
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146663/d69a5eaf-7fb2-d9ca-2155-6a8fad637ff0.png)

###Playbookの実行

まぁ気を取り直して。
Playbookを実行するためにはAWXで設定が必要です。
Software Designの2018年12月号を参考にしました。

https://gihyo.jp/magazine/SD/archive/2018/201812

まず組織を作成します。
勉強会って名前を入力して保存を押します。
![AWX_No-001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146663/49ad81db-e43a-bbb4-62c8-1af1fc629c3f.png)

組織を作成したら、プロジェクトを作成します。
名前は勉強会のデモとして、1つ前に作成した組織と紐づけます。
SCMタイプは、PlaybookをAWXのローカルフォルダに置いてたので、手動にしました。
/var/lib/awx/projectsにplaybookってフォルダを作成して、そこに実行するPlaybookを置きます。

![AWX_No-004.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146663/176c7e4f-f34e-f4bc-86d8-7105d4f778c8.png)

最初上手くローカルのPlaybookを指定できなかったのですが、こちらを見て対処できました。
https://sky-joker.tech/2018/03/21/awxにvarlibawxprojectsがない時の対処/


次にインベントリーを作成します。
名前を入力して保存後、ホストをクリックしてCatalystのIPアドレスと変数をセットしました。

![AWX_No-010.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146663/2915e781-5606-9c34-31ef-336b82ac8a6f.png)

![AWX_No-012.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146663/eea33c72-d941-de28-7e46-a67ea16afa82.png)


次に認証情報を設定します。
名前を入れて、認証情報でマシンを選択してCatalystのユーザとパスワードを入力して保存をします。

![AWX_No-017.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146663/3adf9334-f292-0210-a227-bfedbf630946.png)

最後にこれまで作成したものを集めてジョブテンプレートをセットします。
セットしたらロケットマークをクリックしてPlaybookを実行します。

![AWX_No-015.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146663/cb491589-5829-b9ef-f9e3-4c7a78e5a267.png)

![AWX_No-018.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146663/4fc77fe3-f8e5-bc1f-3628-4f94d0fa6317.png)

Playbookの実行に成功しました。

![AWX_No-016.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146663/eeb9de42-fa22-1199-5898-e558b094a715.png)

今回実行したPlaybookはこんな感じです。

```yaml:ios_command.yml
---
- hosts: 172.30.34.206
  gather_facts: no

  tasks:
    - ios_command:
        commands: show version
      register: facts

    - debug:
        var: facts
```

###感想

普段Ansibleはコマンドで使っているので、自分で編集するファイルはansible.cfgとインベントリファイル、Playbookの3つだけでした。

AWXだと組織、プロジェクト、認証情報、対象ホストなど階層で分かれているため、ちょっと設定の順番に戸惑ってしまうところがありました :sweat_smile:

AWXだとわかりやすい組織分けとかプロジェクト名、ホスト名など、ディレクトリ構成のベストプラクティスがあるように考えないといけないことがあるなーと思いました。

おしまい