06_update_domain.ymlΒΆ

---
# Updates WordPress single-site URLs and normalizes DB references.
# Expects: wp_new_url (passed from main.yml), WORDPRESS_USER/container/docker_html_path.

- name: ⬇️ Get current 'home' URL
  shell: >
    container exec -u {{ WORDPRESS_USER }} {{ WORDPRESS_CONTAINER_ADDRESS }}
    wp option get home --path={{ WORDPRESS_DOCKER_HTML_PATH }}
  register: wp_home
  changed_when: false
  failed_when: false

- name: ⬇️ Get current 'siteurl'
  shell: >
    container exec -u {{ WORDPRESS_USER }} {{ WORDPRESS_CONTAINER_ADDRESS }}
    wp option get siteurl --path={{ WORDPRESS_DOCKER_HTML_PATH }}
  register: wp_siteurl
  changed_when: false
  failed_when: false

- name: πŸ”„ Update 'home' (if needed)
  vars:
    wp_new_url_norm: "{{ wp_new_url | regex_replace('/+$','') }}"
    wp_home_norm: "{{ wp_home.stdout | regex_replace('/+$','') }}"
  shell: >
    container exec -u {{ WORDPRESS_USER }} {{ WORDPRESS_CONTAINER_ADDRESS }}
    wp option update home "{{ wp_new_url_norm }}" --path={{ WORDPRESS_DOCKER_HTML_PATH }}
  when: wp_home_norm != wp_new_url_norm

- name: πŸ”„ Update 'siteurl' (if needed)
  vars:
    wp_new_url_norm: "{{ wp_new_url | regex_replace('/+$','') }}"
    wp_siteurl_norm: "{{ wp_siteurl.stdout | regex_replace('/+$','') }}"
  shell: >
    container exec -u {{ WORDPRESS_USER }} {{ WORDPRESS_CONTAINER_ADDRESS }}
    wp option update siteurl "{{ wp_new_url_norm }}" --path={{ WORDPRESS_DOCKER_HTML_PATH }}
  when: wp_siteurl_norm != wp_new_url_norm

- name: πŸ” Search-replace old β†’ new URLs in DB (single site)
  vars:
    wp_old_url_norm: "{{ wp_home.stdout | regex_replace('/+$','') }}"
    wp_new_url_norm: "{{ wp_new_url | regex_replace('/+$','') }}"
  shell: >
    container exec -u {{ WORDPRESS_USER }} {{ WORDPRESS_CONTAINER_ADDRESS }}
    wp search-replace "{{ wp_old_url_norm }}" "{{ wp_new_url_norm }}"
    --skip-columns=guid --all-tables-with-prefix --precise
    --path={{ WORDPRESS_DOCKER_HTML_PATH }}
  register: wp_sr_domain
  changed_when: "('Success: Made 0 replacements.' not in wp_sr_domain.stdout) | bool"

- name: πŸ“ Normalize scheme to https if needed (http β†’ https)
  vars:
    domain_only: "{{ (wp_new_url | regex_replace('^https?://','')) | regex_replace('/+$','') }}"
    http_url: "http://{{ domain_only }}"
    https_url: "https://{{ domain_only }}"
  shell: >
    container exec -u {{ WORDPRESS_USER }} {{ WORDPRESS_CONTAINER_ADDRESS }}
    wp search-replace "{{ http_url }}" "{{ https_url }}"
    --skip-columns=guid --all-tables-with-prefix --precise
    --path={{ WORDPRESS_DOCKER_HTML_PATH }}
  register: wp_sr_scheme
  changed_when: "('Success: Made 0 replacements.' not in wp_sr_scheme.stdout) | bool"
  when: lookup('tls', application_id, 'enabled') | bool

- name: 🚿 Flush caches and rewrite rules
  shell: >
    container exec -u {{ WORDPRESS_USER }} {{ WORDPRESS_CONTAINER_ADDRESS }} bash -lc
    "wp cache flush --path={{ WORDPRESS_DOCKER_HTML_PATH }} &&
     wp rewrite flush --hard --path={{ WORDPRESS_DOCKER_HTML_PATH }}"