01_administrator.ymlΒΆ

---
- name: "πŸ” Resolve {{ application_id }} manager hosting node + container id"
  ansible.builtin.include_tasks: "{{ lookup('path_absolute', 'roles/sys-svc-compose/tasks/utils/swarm/resolve_host_cid.yml') }}"
  vars:
    resolve_service_key: "{{ TAIGA_MANAGER_SERVICE }}"
    resolve_output_prefix: TAIGA_MANAGER
    resolve_compose_cid: "{{ TAIGA_MANAGER_CONTAINER }}"

- name: "⏳ Wait for taiga-back to apply migrations (manager must not re-apply)"
  ansible.builtin.shell: > # nocheck: container-exec-resolver  runtime-resolved CID, delegated to the hosting node
    container exec -i
    {{ TAIGA_MANAGER_LOCAL_CID | quote }}
    python manage.py migrate --check
  register: taiga_migrate_check
  until: taiga_migrate_check.rc == 0
  retries: 30
  delay: 10
  changed_when: false
  delegate_to: "{{ TAIGA_MANAGER_HOST_NODE }}"

- name: "πŸ“ Create Taiga admin user (idempotent)"
  ansible.builtin.shell: > # nocheck: container-exec-resolver  runtime-resolved CID, delegated to the hosting node
    IFS= read -r DJANGO_SUPERUSER_PASSWORD && export DJANGO_SUPERUSER_PASSWORD && container exec -i
    -e DJANGO_SUPERUSER_PASSWORD
    {{ TAIGA_MANAGER_LOCAL_CID | quote }}
    python manage.py createsuperuser --noinput
    --username {{ TAIGA_SUPERUSER_NAME }}
    --email {{ TAIGA_SUPERUSER_EMAIL }}
  args:
    stdin: "{{ TAIGA_SUPERUSER_PASSWORD }}"
  register: taiga_create_admin
  delegate_to: "{{ TAIGA_MANAGER_HOST_NODE }}"
  changed_when: taiga_create_admin.rc == 0
  failed_when: >
    taiga_create_admin.rc != 0 and
    ('already taken' not in (taiga_create_admin.stdout + taiga_create_admin.stderr) | lower) and
    ('already exists' not in (taiga_create_admin.stdout + taiga_create_admin.stderr) | lower) and
    ('integrityerror' not in (taiga_create_admin.stdout + taiga_create_admin.stderr) | lower)
  no_log: "{{ MASK_CREDENTIALS_IN_LOGS | bool }}"

- name: "πŸ“ Upsert Taiga admin via manage.py shell"
  ansible.builtin.shell: # nocheck: container-exec-resolver  runtime-resolved CID, delegated to the hosting node
    cmd: >
      IFS= read -r DJANGO_SUPERUSER_PASSWORD && export DJANGO_SUPERUSER_PASSWORD &&
      container exec -i
      -e TAIGA_SUPERUSER_NAME -e TAIGA_SUPERUSER_EMAIL -e DJANGO_SUPERUSER_PASSWORD
      {{ TAIGA_MANAGER_LOCAL_CID | quote }}
      python manage.py shell
    stdin: |-
      {{ TAIGA_SUPERUSER_PASSWORD }}
      {{ lookup('file', 'python/upsert_admin.py') }}
  environment:
    TAIGA_SUPERUSER_NAME: "{{ TAIGA_SUPERUSER_NAME }}"
    TAIGA_SUPERUSER_EMAIL: "{{ TAIGA_SUPERUSER_EMAIL }}"
  register: taiga_upsert_admin
  when: taiga_create_admin.rc != 0
  delegate_to: "{{ TAIGA_MANAGER_HOST_NODE }}"
  changed_when: "'CHANGED=1' in (taiga_upsert_admin.stdout + taiga_upsert_admin.stderr)"
  no_log: "{{ MASK_CREDENTIALS_IN_LOGS | bool }}"