どうも、Tです。
先日、AWXがデプロイできたので、こちらが動くのか簡単なPlaybookを実行したので備忘録です。
目次
環境
AWXを動作させているホストOS
Oracle Linux 9.6(6.12.0-1.23.3.2.el9uek.x86_64)
AWX
24.6.1
やりたいこと
AWX環境でPlaybookを実行をする場合、AWXのawx-taskコンテナの/var/lib/awx/projects/配下にPlaybooxを配置しなければなりません。ただ、playbookを修正・テスト実行するたびにコンテナにファイルを受け渡ししながらするのは面倒です。
今回はGitHubのパブリックリポジトリでPlaybookを管理して、AWXでリポジトリを同期して実行するように構成します。
プライベートリポジトリとの同期設定について、下記記事にまとめました。
| 項目 | 内容 |
|---|---|
| ①playbookを作成 | ローカルのPCでplaybook(yamlファイル)を作成します。 |
| ②playbookをPush | 作成したplaybookをGitHubのパブリックリポジトリにPushします。 |
| ③リポジトリ同期 | AWXからGitHubのパブリックリポジトリを同期します。 同期によりawx-taskコンテナ内にplaybookが配置されます。 |
| ④playbook実行 | AWXでplaybookを実行します。 今回は、簡単な動作確認のため、AWXが動作しているホストOSに接続してplaybookを実行します。 |
| ⑤Hello World出力 | 実行結果に「Hello World!」が出力されることを確認します。 |
AWXの必要最小限の設定を記載していますが、結構なボリュームになっています。下記のような内容は割愛しているので、わからない方はググりながら補完してください。
- Playbookの書き方や細かな意味
- Ainsibleは何なのかとか…
- GitHubの使い方とか…
GitHubパブリックリポジトリ作成
GitHubでパブリックリポジトリを作成します。今回は「test-awx」というリポジトリ名にしました。
リポジトリのURLはAWX側の設定で使うのでメモしておきます。
Playbook準備
Hellow World!のメッセージを表示するPlaybookを作成します。ファイル名はhello.ymlにしました。
---
- hosts: all
tasks:
- name: debug
debug:
msg: "Hello World!"
作成したPlaybookをGitHubのリポジトリにPushしておきます。
AWX設定
AWXの概要
これからAWXの設定を進めるわけでですが、設定項目が少しわかりにくいので図にしました。
設定方法によって変わってきますが、基本的に必要となる設定は上図のイメージになります。
それぞれの意味をざっくり記載しておきます。
| 項目 | 説明 |
|---|---|
| ホスト | AWX(Ansbile)によってPlaybookの対象となるホストの設定です。 |
| インベントリー | Ansbileでインベントリーと呼ばれているものと同じです。ホストをまとめる入れ物のようなイメージです。 Playbookを実行する際には、インベントリー単位で対象を指定するようになります(ホスト単位ではありません)。 |
| 認証情報 | Ansbileでは、実行対象のホストに接続して処理を実行します。ホストがLinuxの場合は、SSH接続しますが、その際の認証情報を設定するようになります。 |
| プロジェクト | Ansibleでプロジェクトと呼ばれているものとほぼ同じでPlaybookを格納するディレクトリを指します。 AWXでは、プロジェクトの設定でGitHubを指定することにより同期を行えるようになります。 |
| ジョブテンプレート | Ansbileの実行単位になります。Playbookの指定もジョブテンプレートで行います。ジョブテンプレートを起動することで、Playbookで指定した処理が実行されます。 これまで設定したインベントリー・認証情報・プロジェクトを紐づける形で設定します。 |
インベントリー・ホスト設定
最初から設定されているDemo用設定を使ってもいいのですが、せっかくなので手動で設定します。
「リソース」->「ホスト」画面を表示し「追加」->「インベントリーの追加」をクリックします。
名前に「test-inventory」を入力し「保存」をクリックします。
インベントリが作成されたら「ホスト」タブを開き「追加」をクリックします。
「名前」にAWXを稼働させているホストOSのIPアドレスを入力し「保存」をクリックします。
これでインベントリーとホストが設定できました。
「リソース」->「ホスト」画面を開くとホストが作成されていることが確認できます。
認証情報設定
「リソース」->「認証情報」画面を表示し「追加」をクリックします。
下記を設定し画面下部の「保存」をクリックします。
| 項目 | 設定値 |
|---|---|
| 名前 | 任意の名前 |
| 認証情報タイプ | マシン |
| ユーザー名 | ホストOSにSSH接続できるユーザー |
| パスワード | 上記に指定したユーザーのパスワード |
プロジェクト設定
「リソース」->「プロジェクト」画面を開き「追加」をクリックします。
下記を設定し「保存」をクリックします。
| 項目 | 設定値 |
|---|---|
| 名前 | 任意のプロジェクト名 |
| ソースコントロールのタイプ | Git |
| ソースコントロールのURL | 作成したGitHubのパブリックリポジトリのURL |
| ソースコントロールブランチ/タグ/コミット | main |
自動的に同期されるため、「最終ジョブステータス」が「成功」になることを確認します。
GitHubのリポジトリのPlaybookを更新した場合には、上画面の「同期」ボタンをクリックして手動で同期が必要です。
ジョブテンプレート設定
「リソース」->「テンプレート」画面を開き「追加」->「新規ジョブテンプレートの追加」をクリックします。
下記を設定し画面下部の「保存」をクリックします。
| 項目 | 設定値 |
|---|---|
| 名前 | 任意のジョブ名 |
| インベントリー | インベントリー設定で作成した名前 |
| プロジェクト | プロジェクト設定で作成した名前 |
| Playbook | hello.yml |
| 認証情報 | 認証情報設定で作成した名前 |
Playbookの実行
作成したジョブテンプレートの「起動」をクリックします。作成したジョブテンプレートの内容で、ホストOSにSSH接続しPlaybookが実行されます。
ジョブが完了したのち「出力のリロード」をクリックします。
「”msg”: “Hello World!”」が出力されることを確認できました。
参考
まとめ
AWX自体の癖というか内容を理解していなかないと本番で使うのは難しそうですなぁ…。
