Ansible AWXのインストール手順(2020/01版)

# この記事について

職場で `Ansible AWX` の話題があったので、インストールを試してみました。
すでにかなりの数のインストール記事がありますが、備忘録を兼ねてここに手順を残しておきます。

## 環境

- ホストマシン
    - macOS Mojave (10.14.6)
        - （Catalinaじゃない。けどVM使うのでそれほど影響なし）
    - VirtualBox 6.1
        - 完全に別件ですが、6.1でvagrant upできない問題は[こちらの記事](https://qiita.com/shuu1222/items/7a6d04172363be44025c)で解決しました
    - Vagrant 2.2.6
- 仮想マシン(VirtualBox上)
    - CentOS 7.6.1810 (Core)

### Vagrantfile

動作確認のためにIPアドレスを指定しただけ。

```.rb
Vagrant.configure("2") do |config|
  config.vm.box = "centos/7"
  config.vm.network "private_network", ip: "192.168.11.11"
  config.vm.provider "virtualbox" do |vb|
    vb.memory = "2048"
  end
end
```

# AWXについて

[RedHat公式](https://www.redhat.com/ja/resources/awx-and-ansible-tower-datasheet)から引用。

> AWX プロジェクトは急速発展を遂げるアップストリーム・プロジェクトであり、 Red Hat Ansible Tower の派生元です。



# インストール手順

[公式の手順](https://github.com/ansible/awx/blob/devel/INSTALL.md)に従い、今回は `Docker-Compose` を使用した方法でインストールしていきます。

## 必要なパッケージの導入

### Docker CE

[Docker公式の手順](https://docs.docker.com/install/linux/docker-ce/centos/)に従ってインストールします。

まずはリポジトリの設定から。

```bash
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
$ sudo yum-config-manager --add-repo \
  https://download.docker.com/linux/centos/docker-ce.repo
```

```
Loaded plugins: fastestmirror
adding repo from: https://download.docker.com/linux/centos/docker-ce.repo
grabbing file https://download.docker.com/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo
repo saved to /etc/yum.repos.d/docker-ce.repo
```

続いて、インストール可能な `docker-ce` のバージョンを確認します。

```bash
$ yum list docker-ce --showduplicates | sort -r
```

```
docker-ce.x86_64  3:19.03.5-3.el7  docker-ce-stable
docker-ce.x86_64  3:19.03.4-3.el7  docker-ce-stable
docker-ce.x86_64  3:19.03.3-3.el7  docker-ce-stable
  (略)
```

この記事の時点の最新版である `19.03.5` をインストールします。

```bash
$ VERSION=19.03.5
$ sudo yum install -y docker-ce-${VERSION} docker-ce-cli-${VERSION} containerd.io
```

最後に、dockerのsystemdサービスを有効化し、動作確認します。

```bash
$ sudo systemctl enable docker
$ sudo systemctl start docker
$ sudo docker run hello-world
```

```
Hello from Docker!
This message shows that your installation appears to be working correctly.
  （略）
```



### Node.js

[こちら](https://github.com/nodesource/distributions/blob/master/README.md#rpm)に記載されているインストール用コマンドを使ってインストールします。
（パイプの後に `sudo` を付けないと `Permission denied` します。[参考](https://qiita.com/daskepon/items/16a77868d38f8e585840)）

```bash
$ curl -sL https://rpm.nodesource.com/setup_10.x | sudo bash -
$ sudo yum install -y nodejs
```

`Node.js` のバージョンと、一緒にインストールされた `npm` のバージョンを確認します。

```bash
$ node -v

  v10.18.1
```

```bash
$ npm -v

  6.13.4
```

### Python3のインストール

Ansibleは2系でも動くようですが、今回は3系をインストールします。パスの処理はいろいろあると思いますが今回はエイリアスで簡単に済ませます。

<!-- $ sudo ln -fs /usr/bin/python3 /usr/bin/python だとyumコマンドが2系依存のため使えなくなる -->

```bash
$ sudo yum install -y python3
$ vi ~/.bashrc

------------------------------
  alias sudo='sudo '
  alias python=python3
  alias pip=pip3        の3行を追加する
------------------------------

$ source ~/.bashrc
```

```bash
$ python -V

  Python 3.6.8
```

```bash
$ pip -V

  pip 9.0.3 from /usr/lib/python3.6/site-packages (python 3.6)
```

### pipによるansibleとdocker-composeのインストール

今回は仮想マシンでの検証なので `virtualenv` 等は使用しません。

```bash
$ sudo pip install ansible docker-compose selinux
```

芋づる式で色々モジュールがインストールされますが、AWXに必須となる `docker` モジュールもこの中に含まれています。[^1]
Ansibleは `yum` からもインストールはできますが、今回の環境ではAWXがサポートしない古いバージョンしか取得できないようなのでこちらにしました。[^2]
`selinux` モジュールは、[エラー](https://github.com/ansible/awx/issues/4821)対策です。[この記事](https://tekunabe.hatenablog.jp/entry/2019/10/06/rhel8_awx7)に書いてある、

> SELinux が有効な環境では上記のように selinux という Python ライブラリをインストールする必要があります。インストールしない場合、AWX のインストール Playbook　実行時に、以下のような「SELinux が有効な環境では SELinux のバインディング libselinux-python が必要」というエラーが発生してしまいます。

という部分を参考にしました。

Ansibleのバージョンを確認しておきます。

```bash
$ ansible --version

ansible 2.9.4
  config file = None
  configured module search path = ['/home/vagrant/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/local/lib/python3.6/site-packages/ansible
  executable location = /usr/local/bin/ansible
  python version = 3.6.8 (default, Aug  7 2019, 17:28:10) [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)]
```

[^1]: [公式](https://github.com/ansible/awx/blob/devel/INSTALL.md#prerequisites)にも "(about docker Python module, ) We use this module instead of docker-py because it is what the docker-compose Python module requires." とある

[^2]: [こちら](https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html#installing-ansible-on-rhel-centos-or-fedora)にyumでのインストール方法が載っているものの、RHELでないと最新版があるリポジトリからDLできなさそう

### GitのインストールとAWXリポジトリのクローン

gitはyumでインストールします。

```bash
$ sudo yum install -y git
  （略）
$ git --version

  git version 1.8.3.1
```

AWXには `Git Requires Version 1.8.4+` とありますが大丈夫でした。
次にリポジトリのクローン。フォルダ名と格納場所はなんでもOK。

```bash
$ mkdir awx_repo
$ cd awx_repo
$ git clone https://github.com/ansible/awx.git
```

## AWXのインストール（playbook実行）

実行前に、 `ansible_python_interpreter` の値を **/usr/bin/python3** へ変えておきます。（そのままだとplaybook実行中にエラーで止まる）

```bash
$ cd awx/installer
$ vi inventory

-----
localhost ansible_connection=local ansible_python_interpreter="/usr/bin/env /usr/bin/python3"
  （略）
-----
```

playbookを実行します。コマンドのフルパスを指定しているのは `sudo` の影響で */usr/local/bin/ansible-playbook* にパスが通らなくなるためです。[^3]

[^3]: *sudoers* ファイルのオプションを変更することでも対処可能。[参考](https://blog.thingslabo.com/archives/000395.html)

```bash
$ sudo /usr/local/bin/ansible-playbook -i inventory install.yml
```

エラーなく終了すればインストール完了です。

## 動作確認

ブラウザで仮想マシンのIPアドレスを開くと、以下のような画面が出ます。

<img width="701" alt="スクリーンショット 2020-01-23 2.18.23.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/271695/b81fd165-2e75-f3c7-9b58-21ac9d3ab8f3.png">

デフォルトでは、ユーザー名「admin」、パスワード「password」でログインできます。

<img width="1280" alt="スクリーンショット 2020-01-23 2.23.46.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/271695/86dff233-6631-0504-0ab8-4122938bcfcb.png">

ログインするとこのような画面が表示されます。