zaki work log

作業ログやら生活ログやらなんやら

[AAP 2.5] AAP上のユーザーを作成するタスクはansible.platformコレクションを使う

AAP 2.5からControllerとPlatform Gatewayに分かれた関係で、ユーザー作成周りの処理(エンドポイント)に変更があり、以前までのモジュールだとAAP 2.5に対しては正常に動作しなくなっている。

結論としては、「組織」「チーム」「ユーザー」に関する操作はansible.platformコレクションに含まれるansible.platform.userモジュールを使用する。
(言い換えると、メニューの「Access Management」配下のリソース操作はansible.platformコレクションを使う、となるはず)

確認した環境はAAP 2.4 / 2.5ともにコンテナ版

AAP 2.5に対してansible.controller.userでユーザー作成するタスクとそのエラー

タスクは以下の通り。

- name: create user
  ansible.controller.user:
    username: "{{ username }}"
    password: "{{ password }}"
    email: "{{ email }}"
    organization: "{{ organization }}"
    is_superuser: false
    is_system_auditor: false

旧バージョンのansible.controllerコレクション使用 (ver 4.5.25)

AAP 2.4に付属EEに内蔵のansible.controllerを使った場合、以下のエラー

fatal: [localhost]: FAILED! => {
    "changed": false,
    "msg": "Failed to get token: HTTP Error 404: Not Found",
    "response": "\n<!doctype html>\n<html lang=\"en\">\n<head>\n  <title>Not Found</title>\n</head>\n<body>\n  <h1>Not Found</h1><p>The requested resource was not found on this server.</p>\n</body>\n</html>\n"
}

おそらくエンドポイントがあっていないため404になっている

対応バージョンのはずのansible.controllerコレクション使用 (ver 4.6.21)

最新ではないけど2025年10月リリースの4.6.21(AAP 2.5に付属EEに内蔵)で実行した場合。
これはうまくいくと思ったが、以下のエラーが発生

fatal: [localhost]: FAILED! => {
    "changed": false,
    "msg": "You don't have permission to POST to /api/controller/v2/organizations/1/users/ (HTTP 403). Use the collection ansible.platform to modify resources Organization, User, or Team."
}

「Organization(組織)」や「User(ユーザー)」や「Team(チーム)」を操作するならansible.platformコレクションを使え、ということらしい。

ansible.platform.userを使ってユーザー作成する

修正したタスクが以下の通り。

Automation Hub - ansible.platform.user

- name: create user
  ansible.platform.user:
    username: "{{ username }}"
    password: "{{ password }}"
    email: "{{ email }}"
    organizations: "{{ organization }}"
    is_superuser: false
    is_platform_auditor: false

ansible.controller.userとのパラメタの差異は下記。

  • organization -> organizations(複数形)
  • is_system_auditor -> is_platform_auditor

ただしどちらも廃止予定のためdeprecated警告が出力される。
正しくはansible.platform.role_user_assignmentを使ってユーザーのロール設定を行う方式になっている。

これを踏まえて上記をrole_user_assignmentを使って書き換えると以下。

- name: create user
  ansible.platform.user:
    username: "{{ username }}"
    password: "{{ password }}"
    email: "{{ email }}"
    is_superuser: false
    # is_platform_auditor: false

- name: update user role
  ansible.platform.role_user_assignment:
    user: "{{ username }}"
    role_definition: Organization Member
    object_ids:
    - "{{ organization }}"

role_definitionに何を指定できるのかが正直よくわからないのと、is_platform_auditorがtrueの場合にどうセットすればいいかが不明。
標準ユーザーであればドキュメントを参考に上記の通り Organization Member を入力すると作成できた。
あとobject_idsはIDといいつつ名前指定もOKのため、組織Defaultであれば(IDを別途引っ張ってきたりする必要はなく)そのまま記述すればよい。

Automation Hub - ansible.platform.role_user_assignment