---
- name: β³ Wait for Discourse API
wait_for:
host: "{{ DOCKER_REACH_HOST }}"
port: "{{ lookup('config', 'web-app-discourse', 'services.discourse.ports.local.http') }}"
delay: 5
timeout: "{{ lookup('timeout', 600) | int }}"
- name: "π₯οΈ WP Discourse: stack-host container ops against Discourse"
include_tasks: wp-discourse-stack-host.yml
when: IS_STACK_HOST | bool
# Exception: include_vars (not lookup('file')|from_yaml) so values lazy-render and the deploy-time vault_discourse_api_key resolves in this scope.
- name: "π Load WP Discourse addon spec from meta/addons/wp-discourse.yml"
ansible.builtin.include_vars:
file: "{{ [role_path, 'meta/addons', 'wp-discourse.yml'] | path_join }}"
name: wp_discourse_addon
- name: "π Resolve WP Discourse settings"
set_fact:
discourse_settings: "{{ wp_discourse_addon.config.discourse_settings | default([]) }}"
changed_when: false
- name: "π¦ Install WP Discourse plugin"
ansible.builtin.include_tasks: ../utils/install/plugin.yml
vars:
plugin_name: wp-discourse
when: IS_STACK_HOST | bool
- name: "π§ Configure WP Discourse settings"
loop: "{{ discourse_settings | map(attribute='name') | unique | list }}"
loop_control:
label: "{{ item }}"
vars:
option_name: "{{ item }}"
option_items: >-
{{ discourse_settings
| selectattr('name', 'equalto', option_name)
| list
}}
option_kv: >-
{{ dict(
option_items | map(attribute='key')
| zip(option_items | map(attribute='value'))
) }}
option_json_b64: "{{ option_kv | to_json | b64encode }}"
ansible.builtin.shell: >
container exec -u {{ WORDPRESS_USER }} {{ WORDPRESS_CONTAINER_ADDRESS }} bash -lc
"wp eval \"update_option(
'{{ option_name }}',
json_decode(
base64_decode('{{ option_json_b64 }}'),
true
)
);\" --path={{ WORDPRESS_DOCKER_HTML_PATH }}"
when: IS_STACK_HOST | bool