2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

AWXでGitLab上のPlaybookを実行してみる

Last updated at Posted at 2021-12-06

はじめに

以前、GitLabをDockerコンテナで起動AWXをDockerコンテナで起動の2つの記事を投稿しました。
今回は構築したAWXからGitlabにコミットしたPlaybookを実行してみたいと思います。
動作検証のため、まずはlocalhostに対して簡単なPlaybookを実行してみたいと思います。

Playbook

今回実行するPlaybookの構成は下記の通りです。

├──awx_test.yml
├──roles
     └── awx_test
           ├── tasks
           │     └── main.yml
           │
           ├── files
           │     └── test.txt

各ファイルの内容は下記の通りです。
awx_testのroleをimportし、taskではcopyモジュールでfiles配下のtest.txtを/tmp/awx_test/にコピーするという簡単なPlaybookです。

awx_test.yml
---
- hosts: all
  gather_facts: false
  tasks:
    - import_role:
        name: "awx_test"
tasks/main.yml
---
- name: awx test
  copy:
    src: "test.txt"
    dest: "/tmp/awx_test/test.txt"
files/test.txt
AWX TEST

GitLabへコミット

上記のPlaybookをGitLabにコミットします。
「AWX_TEST」というプロジェクトを作成したので、このプロジェクトを使っていきます。
image.png
せっかくなのでGUIではなくコマンドでコミットを行いました。
※予めGitLab上でAccessTokenを作成しておく必要があります。

まずgit cloneを実行します。がここでエラーが発生しました。

$ git clone http://gitlab.example.com/xxxxx/awx-test.git
Cloning into 'awx-test'...
fatal: unable to access 'http://gitlab.example.com/xxxxx/awx-test.git/': Could not resolve host: gitlab.example.com

gitlab.example.comが解決できないとのことです。
対応策として今回は/etc/hostsにgitlab.example.comを追加し、ポートは直打ちしました。

$ git clone http://gitlab.example.com:8010/xxxxx/awx-test.git
Cloning into 'awx-test'...
Username for 'http://gitlab.example.com:8010': {トークン作成時に設定したユーザ名}
Password for 'http://xxxxx@gitlab.example.com:8010':{作成したトークン}
remote: Enumerating objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 3
Unpacking objects: 100% (3/3), 231 bytes | 23.00 KiB/s, done.

クローンが完了したら下記コマンドを実行します。

$ ll
total 12
drwxr-xr-x 3 xxx xxx 4096 Dec  5 00:32 ./
drwxr-xr-x 4 xxx xxx 4096 Dec  5 00:00 ../
drwxr-xr-x 3 xxx xxx 4096 Dec  5 00:32 awx-test/
$ cd awx-test/
$ git branch -a
* main
  remotes/origin/HEAD -> origin/main
  remotes/origin/main

awx-testがクローンされていることがわかります。
mainブランチのみが存在している状態なので、新規にブランチを作成したいと思います。

$ git checkout -b master
Switched to a new branch 'master'
$ git branch
  main
* master

作成したmasterブランチにPlaybookをコミットし、プッシュします。

$ git add .

$ git commit -m "Initial Commit"
[master b234ec5] Initial Commit
 3 files changed, 12 insertions(+)
 create mode 100644 awx_test.yml
 create mode 100644 roles/awx_test/files/test.txt
 create mode 100644 roles/awx_test/tasks/main.yml

$ git push -u origin master
Username for 'http://gitlab.example.com:8010': {トークン作成時に設定したユーザ名}
Password for 'http://xxxxx@gitlab.example.com:8010':{作成したトークン}
Enumerating objects: 10, done.
Counting objects: 100% (10/10), done.
Delta compression using up to 8 threads
Compressing objects: 100% (5/5), done.
Writing objects: 100% (9/9), 686 bytes | 343.00 KiB/s, done.
Total 9 (delta 0), reused 0 (delta 0)
remote:
remote: To create a merge request for master, visit:
remote:   http://gitlab.example.com/xxxxx/awx-test/-/merge_requests/new?merge_request%5Bsource_branch%5D=master
remote:
To http://gitlab.example.com:8010/xxxxx/awx-test.git
 * [new branch]      master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.

GitLabを確認します。
image.png
無事プッシュされました。
GitLab側の準備は整いました。

AWXの設定

AWX側の設定を行っていきます。
AWXにログインすると下記の画面が表示されます。
GitLab上のPlaybookを実行できるようResourcesの設定を行います。
image.png

Hosts

Hostsではその名前の通りホストの登録をします。
ここで登録されているホストを後に記載しているInventoriesに紐づけるようなイメージです。
Resources > Hosts を押下します。
image.png
デフォルトで「localhost」が存在します。今回はlocalhostに対してPlaybookを実行するためホストの追加はしません。
ホストを追加したい場合は「Add」で追加をすることができます。

Inventories

InventoriesはAnsibleの管理対象を指します。
Resources > Inventories を押下します。
image.png
デフォルトで「Demo Inventory」が存在します。
Demo Inventoryを選択してHostsの内容を確認します。
image.png
localhostが登録されています。今回は新たにInventoryは作成せずこれを使用したいと思います。
(Resources > HostsでもlocalhostがDemo Inventoryに登録されていることが分かります)

Credentials

Credentialsでは認証情報を設定します。
今回はGitLab上のPlaybookを実行するため、GitLabの認証情報を設定していきます。
Resources > Credentials からAddを押下します。
image.png
上記のように適当なNameを入力し、Credential TypeはSource Controlを選択します。
すると詳細の項目が表示されます
image.png
GitLabのユーザ名、パスワードを入力したらSaveを押下します。
image.png
Credentialの追加が完了しました。

Projects

ProjectsはAnsibleのPlaybookを指します。
(今回はGitLab上のPlaybookを実行するためどのプロジェクトのどのブランチ上のPlaybookかを設定します)
Resources > Projects からAddを押下します。
image.png
上記のように適当なNameを入力し、Source Control Credential TypeはGitを選択します。
するとSource Control URLなどの入力項目が表示されます。
Source Control URLにGitLabのURL、Source Control Branchに対象のブランチを入力します。
※AWXのコンテナ内のhostsファイルにgitlab.example.comを追加しています
Source Control Credentialは先ほど追加した認証情報を選択します。

Save後にViews > Jobsを確認します。
image.png
Jobが正常に完了すればProjectは正常に作成できたことになります。(上記のように左の□が緑色になっていれば正常)
異常があった場合はJobを確認して対処が必要になります。(異常の場合は□が赤になります)

Templates

TemplatesではどのPlaybookを実行するかを設定します。
Resources > Templatesを押下します。
Add > Add job templateを押下してTemplateの追加を行います。
image.png
上記のように適当なNameを入力し、Job TypeはRun、InventoryはDemo Inventory、Projectは先程作成したawx-test、Playbookには実行したいyml(今回はawx_test.yml)を選択します。
入力が完了したらSaveします。

ちなみに今回は設定しませんでしたが、Surveyを設定することでTemplate実行時にPlaybookに対してパラメータを渡すことができます。
image.png

AWXのテンプレートを実行

AWX側の設定も完了しましたので、早速、作成したAWXテンプレートを実行したいと思います。
Resources > Templatesでロケットのようなマークの「Launch Template」を押下することでテンプレートを実行できます。
テンプレートを実行すると自動的にJobの画面が表示されます。
image.png
ジョブは正常に完了したのでファイルの確認をしてみます。
今回はlocalhostに対して実行したので、AWXのコンテナに入り下記コマンドでファイルがコピーされてるか確認しました。

# ls /tmp/awx_test/
test.txt
# cat /tmp/awx_test/test.txt
AWX TEST

正常にfiles/test.txtがコピーされていました。

最後に

無事、AWXでGitLab上のPlaybookを実行することができました。
業務の中で少し触れた経験があるので何となくは分かっていましたが、実際自分で設定をしてみることでより理解が深まりました。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?