08_oidc_plugin.ymlΒΆ

---
- name: "πŸ“Œ Define OIDC plugin paths"
  ansible.builtin.set_fact:
    JOOMLA_OIDC_PLUGIN_HOST_DIR: "{{ role_path }}/files/joomla-oidc-plugin"
    JOOMLA_OIDC_PLUGIN_BUILD_DIR: "/tmp/plg_system_keycloak"
    JOOMLA_OIDC_PLUGIN_ZIP: "/tmp/plg_system_keycloak.zip"

- name: "♻️ Reset plugin build dir inside Joomla container"
  ansible.builtin.shell: > # nocheck: container-exec-resolver  runtime-resolved CID, delegated to the hosting node
    container exec {{ JOOMLA_LOCAL_CID | quote }} rm -rf {{ JOOMLA_OIDC_PLUGIN_BUILD_DIR | quote }}
  changed_when: false
  failed_when: false
  delegate_to: "{{ JOOMLA_HOST_NODE }}"

- name: "πŸ“‹ Stream plugin source into Joomla container"
  ansible.builtin.shell: > # nocheck: container-exec-resolver  runtime-resolved CID, delegated to the hosting node
    base64 -d | container exec -i {{ JOOMLA_LOCAL_CID | quote }}
    sh -c 'mkdir -p {{ JOOMLA_OIDC_PLUGIN_BUILD_DIR }} && tar -xzf - -C {{ JOOMLA_OIDC_PLUGIN_BUILD_DIR }}'
  args:
    stdin: "{{ lookup('pipe', 'tar -C ' ~ ((JOOMLA_OIDC_PLUGIN_HOST_DIR ~ '/plg_system_keycloak') | quote) ~ ' -czf - . | base64') }}"
  changed_when: true
  delegate_to: "{{ JOOMLA_HOST_NODE }}"

- name: "πŸ“¦ composer install (vendor jumbojett/openid-connect-php inside container)"
  ansible.builtin.shell: >
    container exec
    -e COMPOSER_HOME=/tmp/composer-home
    -e COMPOSER_ALLOW_SUPERUSER=1
    {{ JOOMLA_LOCAL_CID | quote }} composer install
    --working-dir={{ JOOMLA_OIDC_PLUGIN_BUILD_DIR | quote }}
    --no-dev --no-interaction --no-progress --prefer-dist --optimize-autoloader
  changed_when: true
  delegate_to: "{{ JOOMLA_HOST_NODE }}"

- name: "βœ… Ensure Joomla cache directories are writable by the web user" # nocheck: container-exec-resolver  runtime-resolved CID, delegated to the hosting node
  ansible.builtin.shell: "container exec {{ JOOMLA_LOCAL_CID | quote }} bash -lc 'mkdir -p /var/www/html/administrator/cache /var/www/html/cache /var/www/html/tmp
    && chown -R {{ JOOMLA_WEB_USER }}:{{ JOOMLA_WEB_USER }} /var/www/html/administrator/cache /var/www/html/cache /var/www/html/tmp && chmod -R u+rwX /var/www/html/administrator/cache
    /var/www/html/cache /var/www/html/tmp'"
  changed_when: false
  delegate_to: "{{ JOOMLA_HOST_NODE }}"

- name: "πŸ—œοΈ Package plugin into a ZIP for Joomla CLI install"
  ansible.builtin.shell: >
    container exec -i
    -e J_ZIP={{ JOOMLA_OIDC_PLUGIN_ZIP | quote }}
    -e J_BUILD_DIR={{ JOOMLA_OIDC_PLUGIN_BUILD_DIR | quote }}
    {{ JOOMLA_LOCAL_CID | quote }} php --
  args:
    stdin: "{{ lookup('file', role_path ~ '/files/php/package_plugin.php') }}"
  changed_when: true
  delegate_to: "{{ JOOMLA_HOST_NODE }}"

- name: "πŸ“¦ Install plg_system_keycloak via Joomla CLI"
  ansible.builtin.shell: > # nocheck: container-exec-resolver  runtime-resolved CID, delegated to the hosting node
    container exec --user {{ JOOMLA_WEB_USER | quote }} {{ JOOMLA_LOCAL_CID | quote }}
    php -d memory_limit={{ JOOMLA_PHP_MEMORY_LIMIT }} {{ JOOMLA_CLI_FILE | quote }}
    extension:install --path={{ JOOMLA_OIDC_PLUGIN_ZIP | quote }}
  register: plugin_install
  changed_when: "'Extension installed successfully' in plugin_install.stdout"
  failed_when:
    - plugin_install.rc != 0
    - plugin_install.stdout | default('') is not search('already')
  delegate_to: "{{ JOOMLA_HOST_NODE }}"

- name: "πŸ” Resolve plg_system_keycloak extension ID" # nocheck: container-exec-resolver  runtime-resolved CID, delegated to the hosting node
  ansible.builtin.shell: "container exec --user {{ JOOMLA_WEB_USER }} {{ JOOMLA_LOCAL_CID | quote }} php -d memory_limit={{ JOOMLA_PHP_MEMORY_LIMIT }} {{ JOOMLA_CLI_FILE
    }} extension:list | awk '/plg_system_keycloak/ {print $2; exit}'"
  register: plugin_id_lookup
  changed_when: false
  failed_when: plugin_id_lookup.stdout | trim | length == 0
  delegate_to: "{{ JOOMLA_HOST_NODE }}"

- name: "🟒 Enable plg_system_keycloak via Joomla CLI"
  ansible.builtin.shell: > # nocheck: container-exec-resolver  runtime-resolved CID, delegated to the hosting node
    container exec --user {{ JOOMLA_WEB_USER | quote }} {{ JOOMLA_LOCAL_CID | quote }}
    php -d memory_limit={{ JOOMLA_PHP_MEMORY_LIMIT }} {{ JOOMLA_CLI_FILE | quote }}
    extension:enable {{ plugin_id_lookup.stdout | trim | quote }}
  register: plugin_enable
  changed_when: "'has been enabled' in plugin_enable.stdout or 'enabled successfully' in plugin_enable.stdout"
  failed_when:
    - plugin_enable.rc != 0
    - plugin_enable.stdout | default('') is not search('already')
  delegate_to: "{{ JOOMLA_HOST_NODE }}"