01_init.ymlΒΆ

---
- name: "βœ… Assert correct context"
  ansible.builtin.assert:
    that:
      - application_id == 'svc-db-rabbitmq'
      - database_consumer_id != 'svc-db-rabbitmq'

- name: "πŸ” Resolve consumer vhost + credentials"
  ansible.builtin.set_fact:
    rabbitmq_consumer_vhost: "{{ database_consumer_id | entity_name }}"
    rabbitmq_consumer_username: "{{ lookup('engine', 'rabbitmq', database_consumer_id, 'username') }}"
    rabbitmq_consumer_password: "{{ database_password | default(lookup('engine', 'rabbitmq', database_consumer_id, 'password')) | string }}"
  changed_when: false
  no_log: "{{ MASK_CREDENTIALS_IN_LOGS | bool }}"

- name: "⏳ RABBITMQ | Wait for management API readiness"
  ansible.builtin.shell: >
    {{ RABBITMQ_EXEC_SHELL }}
    'rabbitmqctl -q await_startup'
  register: rmq_startup_ready
  until: rmq_startup_ready.rc == 0
  retries: 30
  delay: 5
  changed_when: false

- name: "πŸ“‹ RABBITMQ | List existing vhosts"
  ansible.builtin.shell: >
    {{ RABBITMQ_EXEC_SHELL }}
    'rabbitmqctl -q list_vhosts --formatter json'
  register: rmq_vhosts
  changed_when: false
  retries: "{{ RABBITMQ_RETRIES }}"
  delay: "{{ RABBITMQ_DELAY }}"
  until: rmq_vhosts.rc == 0

- name: "πŸ“ Create vhost: {{ rabbitmq_consumer_vhost }}"
  ansible.builtin.shell: >
    {{ RABBITMQ_EXEC_SHELL }}
    'rabbitmqctl -q add_vhost {{ rabbitmq_consumer_vhost | quote }}'
  register: rmq_add_vhost
  changed_when: rmq_add_vhost.rc == 0
  retries: "{{ RABBITMQ_RETRIES }}"
  delay: "{{ RABBITMQ_DELAY }}"
  until: rmq_add_vhost.rc == 0
  when: >
    rabbitmq_consumer_vhost not in
    (rmq_vhosts.stdout | from_json | map(attribute='name') | list)

- name: "πŸ“‹ RABBITMQ | List existing users"
  ansible.builtin.shell: >
    {{ RABBITMQ_EXEC_SHELL }}
    'rabbitmqctl -q list_users --formatter json'
  register: rmq_users
  changed_when: false
  retries: "{{ RABBITMQ_RETRIES }}"
  delay: "{{ RABBITMQ_DELAY }}"
  until: rmq_users.rc == 0

- name: "πŸ“ Create user: {{ rabbitmq_consumer_username }}"
  ansible.builtin.shell:
    cmd: >
      container exec -i {{ RABBITMQ_CONTAINER_ADDRESS }} sh -lc
      'rabbitmqctl -q add_user {{ rabbitmq_consumer_username | quote }}'
    stdin: "{{ rabbitmq_consumer_password }}"
  register: rmq_add_user
  changed_when: rmq_add_user.rc == 0
  retries: "{{ RABBITMQ_RETRIES }}"
  delay: "{{ RABBITMQ_DELAY }}"
  until: rmq_add_user.rc == 0
  no_log: "{{ MASK_CREDENTIALS_IN_LOGS | bool }}"
  when: rabbitmq_consumer_username not in (rmq_users.stdout | from_json | map(attribute='user') | list)

- name: "βœ… Ensure user password matches inventory: {{ rabbitmq_consumer_username }}"
  ansible.builtin.shell:
    cmd: >
      container exec -i {{ RABBITMQ_CONTAINER_ADDRESS }} sh -lc
      'rabbitmqctl -q change_password {{ rabbitmq_consumer_username | quote }}'
    stdin: "{{ rabbitmq_consumer_password }}"
  register: rmq_change_password
  changed_when: false
  retries: "{{ RABBITMQ_RETRIES }}"
  delay: "{{ RABBITMQ_DELAY }}"
  until: rmq_change_password.rc == 0
  no_log: "{{ MASK_CREDENTIALS_IN_LOGS | bool }}"
  when: rabbitmq_consumer_username in (rmq_users.stdout | from_json | map(attribute='user') | list)

- name: "πŸ” Grant full perms on vhost '{{ rabbitmq_consumer_vhost }}' to consumer user"
  ansible.builtin.shell: >
    {{ RABBITMQ_EXEC_SHELL }}
    'rabbitmqctl -q set_permissions -p {{ rabbitmq_consumer_vhost | quote }}
    {{ rabbitmq_consumer_username | quote }} ".*" ".*" ".*"'
  register: rmq_set_permissions
  changed_when: false
  retries: "{{ RABBITMQ_RETRIES }}"
  delay: "{{ RABBITMQ_DELAY }}"
  until: rmq_set_permissions.rc == 0