wp-discourse.ymlΒΆ

---
- 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