02_install.ymlΒΆ

---
- name: "⏳ Wait until WordPress core files exist in {{ WORDPRESS_DOCKER_HTML_PATH }}"
  shell: >
    container exec {{ WORDPRESS_CONTAINER_ADDRESS }}
    test -f {{ WORDPRESS_DOCKER_HTML_PATH }}/wp-includes/version.php
  register: wp_core_present
  retries: 60
  delay: 2
  changed_when: false
  until: wp_core_present.rc == 0
  failed_when: false

- name: "🌱 Seed WordPress core into volume if missing"
  when: wp_core_present.rc != 0
  shell: >
    container exec -u root {{ WORDPRESS_CONTAINER_ADDRESS }} sh -lc
    'set -e;
     echo "[seed] WP core missing, copying from /usr/src/wordpress -> {{ WORDPRESS_DOCKER_HTML_PATH }}";
     cp -a /usr/src/wordpress/. {{ WORDPRESS_DOCKER_HTML_PATH }}/;
     chown -R {{ WORDPRESS_USER }}:{{ WORDPRESS_USER }} {{ WORDPRESS_DOCKER_HTML_PATH }}'
  changed_when: true

- name: "▢️ Run WordPress core install via WP CLI"
  no_log: "{{ MASK_CREDENTIALS_IN_LOGS | bool }}"
  shell: >
    container exec -u {{ WORDPRESS_USER }} -e WP_ADMIN_PASSWORD {{ WORDPRESS_CONTAINER_ADDRESS }}
    sh -c 'exec wp core install "$@" --admin_password="$WP_ADMIN_PASSWORD"' _
    --url={{ WORDPRESS_URL | quote }}
    --title={{ WORDPRESS_TITLE | quote }}
    --admin_user={{ WORDPRESS_ADMIN_USER | quote }}
    --admin_email={{ WORDPRESS_ADMIN_EMAIL | quote }}
    --path={{ WORDPRESS_DOCKER_HTML_PATH | quote }}
  environment:
    WP_ADMIN_PASSWORD: "{{ WORDPRESS_ADMIN_PASSWORD }}"

- name: "πŸ”‘ Ensure the WordPress administrator exists and accepts the declared password"
  ansible.builtin.shell:
    cmd: >-
      container exec -i -u {{ WORDPRESS_USER }}
      -e WP_REALIGN_LOGIN -e WP_REALIGN_PASSWORD -e WP_REALIGN_EMAIL
      {{ WORDPRESS_CONTAINER_ADDRESS }}
      wp eval-file - --path={{ WORDPRESS_DOCKER_HTML_PATH | quote }}
    stdin: "{{ lookup('file', 'php/realign_admin_password.php') }}"
  environment:
    WP_REALIGN_LOGIN: "{{ WORDPRESS_ADMIN_USER }}"
    WP_REALIGN_PASSWORD: "{{ WORDPRESS_ADMIN_PASSWORD }}"
    WP_REALIGN_EMAIL: "{{ WORDPRESS_ADMIN_EMAIL }}"
  register: wordpress_admin_realign
  changed_when: wordpress_admin_realign.stdout is search('\[CHANGED\]')
  failed_when: >-
    wordpress_admin_realign.rc != 0
    or wordpress_admin_realign.stdout is search('\[FAIL\]')
  no_log: "{{ MASK_CREDENTIALS_IN_LOGS | bool }}"