- name: enable {{ plugin_key }} nextcloud plugin command: "{{ NEXTCLOUD_DOCKER_EXEC_OCC }} app:enable {{ plugin_key }}" register: enable_result changed_when: enable_result.rc == 0 and ("already enabled" not in enable_result.stdout) - name: Check if {{ plugin_vars_path }} exists stat: path: "{{ plugin_vars_path }}" delegate_to: localhost become: false register: plugin_vars_file - name: "Load {{ plugin_key }} configuration variables" include_vars: file: "{{ plugin_vars_path }}" when: plugin_vars_file.stat.exists - name: "Set plugin configuration (batched shell, no async)" ansible.builtin.shell: | set -euo pipefail {% for item in (plugin_configuration | default([])) %} {{ NEXTCLOUD_DOCKER_EXEC_OCC }} \ config:app:set {{ item.appid }} {{ item.configkey }} \ --value '{{ ( (item.configvalue | to_json) if (item.configvalue is mapping) else (item.configvalue | string) ) | regex_replace("'", "'" ~ '"' ~ "'" ~ '"' ~ "'") }}' {% endfor %} args: executable: /bin/bash when: plugin_vars_file.stat.exists register: config_set_shell changed_when: > not ASYNC_ENABLED and (config_set_shell.stdout | default('')) is search(' set to ') failed_when: not ASYNC_ENABLED and config_set_shell.rc != 0 async: "{{ ASYNC_TIME if ASYNC_ENABLED | bool else omit }}" poll: "{{ ASYNC_POLL if ASYNC_ENABLED | bool else omit }}" no_log: "{{ MASK_CREDENTIALS_IN_LOGS | default(true) | bool }}" - name: Check if {{ plugin_task_path }} exists stat: path: "{{ plugin_task_path }}" delegate_to: localhost become: false register: plugin_tasks_file - name: "include {{ plugin_task_path }}" include_tasks: "{{ plugin_task_path }}" when: plugin_tasks_file.stat.exists