---
- name: "β³ Wait until the Pixelfed users table exists"
database_query:
config: "{{ lookup('database', application_id) }}"
query_file: "{{ role_path }}/files/sql/select/users-table.sql"
named_args:
db_name: "{{ PIXELFED_DB_NAME }}"
expect_rows: true
mask_values: "{{ MASK_CREDENTIALS_IN_LOGS | bool }}"
register: pixelfed_users_table
changed_when: false
retries: 60
delay: 5
until: pixelfed_users_table.rows | length > 0
no_log: "{{ MASK_CREDENTIALS_IN_LOGS | bool }}"
- name: "π Check whether the Pixelfed administrator already exists"
database_query:
config: "{{ lookup('database', application_id) }}"
query_file: "{{ role_path }}/files/sql/select/admin-id.sql"
named_args:
admin_username: "{{ PIXELFED_ADMIN_USERNAME }}"
expect_rows: true
mask_values: "{{ MASK_CREDENTIALS_IN_LOGS | bool }}"
register: pixelfed_admin_id_existing
changed_when: false
no_log: "{{ MASK_CREDENTIALS_IN_LOGS | bool }}"
- name: "π Create the Pixelfed administrator via artisan"
ansible.builtin.command:
expand_argument_vars: false
argv:
- container
- exec
- -u
- "{{ PIXELFED_APP_USER }}"
- -e
- PIXELFED_ADMIN_PASSWORD
- "{{ PIXELFED_LOCAL_CID }}" # nocheck: container-exec-resolver PIXELFED_LOCAL_CID resolved at delegate_to runtime
- sh
- -c
- exec php artisan user:create "$@" --password="$PIXELFED_ADMIN_PASSWORD"
- sh
- "--name={{ PIXELFED_ADMIN_NAME }}"
- "--username={{ PIXELFED_ADMIN_USERNAME }}"
- "--email={{ PIXELFED_ADMIN_EMAIL }}"
- --is_admin=true
- --confirm_email=1
environment:
PIXELFED_ADMIN_PASSWORD: "{{ PIXELFED_ADMIN_PASSWORD }}"
when: pixelfed_admin_id_existing.rows | length == 0
register: pixelfed_admin_create
changed_when: pixelfed_admin_create.rc == 0
no_log: "{{ MASK_CREDENTIALS_IN_LOGS | bool }}"
delegate_to: "{{ PIXELFED_HOST_NODE }}"
- name: "π Resolve the Pixelfed administrator id"
database_query:
config: "{{ lookup('database', application_id) }}"
query_file: "{{ role_path }}/files/sql/select/admin-id.sql"
named_args:
admin_username: "{{ PIXELFED_ADMIN_USERNAME }}"
expect_rows: true
mask_values: "{{ MASK_CREDENTIALS_IN_LOGS | bool }}"
register: pixelfed_admin_id
changed_when: false
failed_when: pixelfed_admin_id.rows | length == 0
no_log: "{{ MASK_CREDENTIALS_IN_LOGS | bool }}"
- name: "π Converge the Pixelfed administrator password"
ansible.builtin.shell: >- # nocheck: container-exec-resolver PIXELFED_LOCAL_CID resolved at delegate_to runtime
container exec -i -e PIXELFED_APP_DIR -e PIXELFED_ADMIN_USERNAME -e PIXELFED_ADMIN_PASSWORD
-u {{ PIXELFED_APP_USER }}
{{ PIXELFED_LOCAL_CID | quote }} php --
args:
stdin: "{{ lookup('file', role_path + '/files/php/converge_admin_password.php') }}"
environment:
PIXELFED_APP_DIR: "{{ PIXELFED_APP_DIR }}"
PIXELFED_ADMIN_USERNAME: "{{ PIXELFED_ADMIN_USERNAME }}"
PIXELFED_ADMIN_PASSWORD: "{{ PIXELFED_ADMIN_PASSWORD }}"
delegate_to: "{{ PIXELFED_HOST_NODE }}"
register: pixelfed_admin_password
changed_when: "'PASSWORD_SET' in pixelfed_admin_password.stdout"
failed_when: >-
pixelfed_admin_password.rc != 0
or pixelfed_admin_password.stdout is not search('(?m)^PASSWORD_(SET|KEPT)$')
no_log: "{{ MASK_CREDENTIALS_IN_LOGS | bool }}"
- name: "π Ensure the Pixelfed administrator carries the admin flag"
database_query:
config: "{{ lookup('database', application_id) }}"
query_file: "{{ role_path }}/files/sql/update/admin-flag.sql"
named_args:
admin_username: "{{ PIXELFED_ADMIN_USERNAME }}"
expect_rows: true
mask_values: "{{ MASK_CREDENTIALS_IN_LOGS | bool }}"
register: pixelfed_admin_flag
changed_when: (pixelfed_admin_flag.rows[-1][0] | int) > 0
no_log: "{{ MASK_CREDENTIALS_IN_LOGS | bool }}"