【Ansible AWX】インストール時のsyntax problemの対処方法


この記事はプロモーションを含みます。

Ansible

ホーム > 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」コマンドで、インストールを実行してみて下さい。
エラーが出力されないようになれば、作業は完了となります。

コメント

タイトルとURLをコピーしました