AWX (Ansible TowerのOSS 版) 事始め

AWX事始め個人的備忘録

# 1. 想定
### やってみること
* ローカル環境で playbook を作成してVMマシンで実行・確認しながら開発を行う。
* 作成した Playbook ファイルを GitLab サーバのブランチへ Push する。<br />（イベントリーファイルは push しなくても良い）
* AWXサーバの設定を行う
* AWXサーバからターゲットサーバへ ansible-play を実施する。

### Playbook のあるGitリポジトリ
*  git@GitLabサーバ:ansible/getting-started.git

### 実行する Playbook
* simple-playbook.yml 

```
---
- name: simple-playbook
  hosts: all
  become: true
  tasks:
    - name: htop をインストール
      yum:
        name: htop
        state: present
```

# 2. 構成
![image.png](https://qiita-image-store.s3.amazonaws.com/0/148868/bcea3f00-a957-7802-34d5-88de1ccd350d.png)


# 3. AWX設定概要
* GitLab にある Ansible のリポジトリを AWX サーバへクローンする設定
 * 「認証情報」設定 ・・・ AWXサーバとGitLabサーバのSSH接続用キーペアの秘密鍵を登録する
 * 「プロジェクト」設定 ・・・ GitLabの情報を登録する
 
* AWX からターゲットサーバへ Playbook を実行する設定
 * 「認証情報」設定 ・・・ AWXサーバとターゲットサーバのSSH接続用キーペアの秘密鍵を登録する
 * 「イベントリー」設定 ・・・ ターゲットサーバの情報を登録する
 * 「テンプレート」設定 ・・・ ターゲットサーバに実施する playbook の情報を登録してジョブを作成

# 4. 設定
## 4.1 GitLab にある Ansible のリポジトリを AWX サーバへクローンする設定
### 事前設定・確認
 * AWXサーバからGitLabサーバへのSSH接続を許可する
 * AWXサーバとGitLabサーバのSSH接続用キーペアを作成/用意する 

### 認証情報の設定 (キーペアの秘密鍵を登録)
認証情報 → 緑の＋アイコン
![image.png](https://qiita-image-store.s3.amazonaws.com/0/148868/d00fa2a2-b836-2923-bf2c-c3c70089ee53.png)
↓
![image.png](https://qiita-image-store.s3.amazonaws.com/0/148868/370f4cad-cc82-6356-e216-042e0b9746e1.png)
**名前**：認証情報設定の名前。ここでは「infra-gitlab」とする。
**組織**：「Default」で
**認証情報タイプ**：「ソースコントロール」を選択
**ユーザー名**：ここでは「git」
**SCM秘密鍵**： AWXサーバとGitLabサーバのSSH接続用キーペアの秘密鍵を登録
↓
「保存」する

### プロジェクトの設定 (GitLabの情報を登録)
プロジェクト → 緑の＋アイコン
![image.png](https://qiita-image-store.s3.amazonaws.com/0/148868/80c1d763-4e61-c530-a191-76d8e64cd43b.png)
↓
![image.png](https://qiita-image-store.s3.amazonaws.com/0/148868/34838035-acb1-a7fa-654c-3b17576e89f3.png)
**名前**：プロジェクトの名前。ここでは「simple-playbook」とする。
**組織**：Defaultで
**SCMタイプ**：「Git」を選択
**SCM URL**：ここでは、git clone で sshプロトコルを使うので、「git@gitサーバのURL:グループ名/プロジェクト名.git」という感じで設定する。
**SCM ブランチ/タグ**：master
**SCM 認証情報**：上で作成した「infra-gitlab」を選択
↓
「保存」すると、自動的に git clone が始まる
↓
しばらくして、git clone が正常に完了すると緑色に点灯する
![image.png](https://qiita-image-store.s3.amazonaws.com/0/148868/4db7531e-4e2f-800b-89ca-ffca777a1715.png)

#### (補足）クローンしたリポジトリが保存される場所 
* デフォルトでは、AWXサーバ内の aws_task コンテナ内に保存される。
* 保存場所をAWXサーバの例えば「/var/lib/awx/projects」に変更したい場合は、AWXインストール時に、"awx/installer/inventory" ファイルの project_data_dir の項目で設定する。

#### (補足)awx_task コンテナ内に保存した場合の確認方法の例
* awx_task コンテナIDを確認
* 
下の実行例では、awx_task のコンテナIDは 60532b491b02awx_task

```
# docker ps
CONTAINER ID        IMAGE                        COMMAND                  CREATED             STATUS              PORTS                                                 NAMES	
60532b491b02        ansible/awx_task:3.0.1       "/tini -- /bin/sh -c…"   28 hours ago        Up 4 hours          8052/tcp                                              awx_task	
ab0a300b8b86        ansible/awx_web:3.0.1        "/tini -- /bin/sh -c…"   28 hours ago        Up 4 hours          0.0.0.0:80->8052/tcp                                  awx_web	
ee85e1253a44        memcached:alpine             "docker-entrypoint.s…"   28 hours ago        Up 4 hours          11211/tcp                                             memcached	
d3b8fc7e2425        ansible/awx_rabbitmq:3.7.4   "docker-entrypoint.s…"   28 hours ago        Up 4 hours          4369/tcp, 5671-5672/tcp, 15671-15672/tcp, 25672/tcp   rabbitmq	
49f720cc0d5b        postgres:9.6                 "docker-entrypoint.s…"   28 hours ago        Up 4 hours          5432/tcp                                              postgres	
```

* awx_task コンテナ（コンテナIDは 60532b491b02） にログインする

```
# docker exec -it 60532b491b02 /bin/bash
[root@awx awx]#	
```
* リポジトリ確認

```
[root@awx awx]#	 ls /var/lib/awx/projects/
_11__simple_playbook  _11__simple_playbook.lock	
```

## 4.2 AWX からターゲットサーバへ Playbook を実行する設定
### 事前設定・確認
 * AWXサーバからターゲットサーバへのSSH接続を許可する
 * AWXサーバとターゲットサーバのSSH接続用キーペアを作成/用意する

### 認証情報の設定 (キーペアの秘密鍵を登録)
認証情報 → 緑の＋アイコン
![image.png](https://qiita-image-store.s3.amazonaws.com/0/148868/13bff34e-6f32-fe63-5ac4-f5b53c561e01.png)
↓
![image.png](https://qiita-image-store.s3.amazonaws.com/0/148868/880eba49-6cbc-88a2-6e59-47f7ef3cd6ab.png)
**名前**：認証情報設定の名前。ここでは「aws-dev」とする。
**組織**：「Default」で
**認証情報タイプ**：「マシン」を選択
**ユーザー名**：ここでは「ec2-user」
**SCM秘密鍵**： AWXサーバとターゲットサーバのSSH接続用キーペアの秘密鍵を登録
**秘密鍵のパスフレーズ**：必要に応じて
↓
「保存」する

### イベントリーの設定 （ターゲットサーバの情報を登録）
イベントリー → 緑の＋アイコン → イベントリー
![image.png](https://qiita-image-store.s3.amazonaws.com/0/148868/d2591277-dc2a-67cd-8e0d-54536db5310c.png)
↓
![image.png](https://qiita-image-store.s3.amazonaws.com/0/148868/c2069b47-afb3-cfbe-285b-fed6625c2857.png)
**名前**：イベントリー設定の名前。ここでは「ansible-target」とする。
↓
ホスト → 緑の＋アイコン
![image.png](https://qiita-image-store.s3.amazonaws.com/0/148868/797498dd-c87e-f1bc-481c-02fa6760a7a8.png)
↓
![image.png](https://qiita-image-store.s3.amazonaws.com/0/148868/3842efe8-dbc3-a9b0-cc5e-8acc99804826.png)
**ホスト名**：ターゲットサーバのグローバルIPアドレスを設定する。
**組織**：ここでは「ansible-target01」とする。
↓
「保存」する

### テンプレートの設定 (playbook の情報を登録してジョブを作成)
テンプレート → 緑の＋アイコン → ジョブテンプレート
![image.png](https://qiita-image-store.s3.amazonaws.com/0/148868/66d25880-e954-4029-1422-35c30f9164f4.png)
↓
![image.png](https://qiita-image-store.s3.amazonaws.com/0/148868/e5b17f20-4090-f3cf-d488-ca8098bc3b94.png)
**名前**：テンプレート設定の名前。ここでは「test-template」とする。
**ジョブタイプ**：「実行」を選択
**イベントリー**：「ansible-target」を選択
**プロジェクト**：「simple-playbook」を選択
**PLAYBOOK**：「sample-playbook.yml」を選択
**認証情報**：「aws-dev」を選択
↓
「保存」する

### ジョブを実行
ロケットアイコンをクリック
![image.png](https://qiita-image-store.s3.amazonaws.com/0/148868/159207d5-5226-f558-81c7-dd7a4f66d9f7.png)
↓
![image.png](https://qiita-image-store.s3.amazonaws.com/0/148868/94890dec-b79e-d5e9-62aa-51a0a83ad196.png)