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