ホーム > Ansible Tower・AWX リファレンス
MIRACLE LINUX 8.4へのAWXインストール時に発生した「syntax problem」の対処方法について解説します。
インストール環境
- ホストマシン
- Windows 11 Pro(21H2)
- VirtualBox 7.0.0
- ゲストマシン(VirtualBox上の仮想マシン)
- MIRACLE LINUX release 8.4(最小限のインストール、Guest Additions適用済み)
- インストール済みのAnsibleのバージョン:ansible [core 2.12.2]
- インストールするAnsible AWXのバージョン:15.0.1
事象
Ansible AWX 15.0.1のインストール時に、下記の「exact syntax problem」エラーが出力され、インストールに失敗しました。
具体的には「ansible-playbook -i inventory install.yml」コマンドの実行時に発生するエラーとなります。
[root@localhost installer]# ansible-playbook -i inventory install.yml
ERROR! couldn't resolve module/action 'docker_service'. This often indicates a misspelling, missing collection, or incorrect module path.
The error appears to be in '/home/workspace/awx-15.0.1/installer/roles/local_docker/tasks/upgrade_postgres.yml': line 25, column 3, but may
be elsewhere in the file depending on the exact syntax problem.
The offending line appears to be:
- name: Stop AWX before upgrading postgres
^ here
原因
原因としては、AWXのインストール時に使用される「docker_service」モジュールが存在しないために発生しています。
調べたところ「docker_service」は、Ansibleのバージョン[2.8]以前に使用されていたようで、
現在は「docker_compose(community.docker.docker_compose)」という名称となっています。
どうにも docker_serviceモジュールは、プレビューという位置づけになっており、下位互換性のあるインターフェイスを持つことが保証されていないようです。
対処方法
対処方法としては、以下の2つの方法が考えられます。
① docker_serviceモジュールが使用出来るバージョンのansibleをインストールする
② AWXインストール用のプレイブックを修正する
ここでは、①は影響が大きそうなので、②を採用したいと思います。
では、②の「AWXインストール用のプレイブックを修正する」ですが、
修正対象のプレイブックは、以下のファイルになります。
格納パス:awx-15.0.1/installer/roles/local_docker/tasks/
ファイル名:upgrade_postgres.yml
次に、修正箇所についてですが、
26行目の「docker_service」を「docker_compose」に書き換えます。
*以下は修正済みのプレイブックです。
---
- name: Check for existing Postgres data
stat:
path: "{{ postgres_data_dir }}/pgdata/PG_VERSION"
register: pg_version_file
- name: Record Postgres version
set_fact:
old_pg_version: "{{ lookup('file', postgres_data_dir + '/pgdata/PG_VERSION') }}"
when: pg_version_file.stat.exists
- name: Determine whether to upgrade postgres
set_fact:
upgrade_postgres: "{{ old_pg_version is defined and old_pg_version == '9.6' }}"
- name: Set up new postgres paths pre-upgrade
file:
state: directory
path: "{{ item }}"
recurse: true
when: upgrade_postgres | bool
with_items:
- "{{ postgres_data_dir }}/10/data"
- name: Stop AWX before upgrading postgres
docker_compose:
project_src: "{{ docker_compose_dir }}"
stopped: true
when: upgrade_postgres | bool
- name: Upgrade Postgres
shell: |
docker run --rm \
-v {{ postgres_data_dir }}/pgdata:/var/lib/postgresql/9.6/data \
-v {{ postgres_data_dir }}/10/data:/var/lib/postgresql/10/data \
-e PGUSER={{ pg_username }} -e POSTGRES_INITDB_ARGS="-U {{ pg_username }}" \
tianon/postgres-upgrade:9.6-to-10 --username={{ pg_username }}
when: upgrade_postgres | bool
- name: Copy old pg_hba.conf
copy:
src: "{{ postgres_data_dir + '/pgdata/pg_hba.conf' }}"
dest: "{{ postgres_data_dir + '/10/data/' }}"
when: upgrade_postgres | bool
- name: Remove old data directory
file:
path: "{{ postgres_data_dir + '/pgdata' }}"
state: absent
when: compose_start_containers|bool
修正は以上となります。
再度、「ansible-playbook -i inventory install.yml」コマンドで、インストールを実行してみて下さい。
エラーが出力されないようになれば、作業は完了となります。
コメント