mirror of
https://github.com/kevinveenbirkenbach/computer-playbook.git
synced 2025-08-15 08:30:46 +02:00
Refactor async execution handling across LDAP and Nextcloud roles
- Introduce global async configuration in group_vars/all/00_general.yml: - ASYNC_ENABLED (disabled in debug mode) - ASYNC_TIME (default 300s, omitted if async disabled) - ASYNC_POLL (0 for async fire-and-forget, 10 for sync mode) - Replace hardcoded async/poll values with global vars in: - svc-db-openldap (03_users.yml, 04_update.yml) - web-app-mig (02_build_data.yml) - web-app-nextcloud (03_admin.yml, 04_system_config.yml, 05_plugin.yml, 06_plugin_routines.yml, 07_plugin_enable_and_configure.yml) - Guard changed_when and failed_when conditions to only evaluate in synchronous mode to avoid accessing undefined rc/stdout/stderr in async runs https://chatgpt.com/share/689cd8cc-7fbc-800f-bd06-a667561573bf
This commit is contained in:
parent
db0e030900
commit
597e9d5222
@ -64,6 +64,11 @@ LETSENCRYPT_LIVE_PATH: "{{ LETSENCRYPT_BASE_PATH }}live/"
|
|||||||
DOCKER_RESTART_POLICY: "unless-stopped"
|
DOCKER_RESTART_POLICY: "unless-stopped"
|
||||||
DOCKER_VARS_FILE: "{{ playbook_dir }}/roles/docker-compose/vars/docker-compose.yml"
|
DOCKER_VARS_FILE: "{{ playbook_dir }}/roles/docker-compose/vars/docker-compose.yml"
|
||||||
|
|
||||||
|
# Asyn Confitguration
|
||||||
|
ASYNC_ENABLED: "{{ not MODE_DEBUG | bool}}" # Activate async, deactivated for debugging
|
||||||
|
ASYNC_TIME: "{{ 300 if ASYNC_ENABLED else omit }}" # Run for mnax 5min
|
||||||
|
ASYNC_POLL: "{{ 0 if ASYNC_ENABLED else 10 }}" # Don't wait for task
|
||||||
|
|
||||||
# default value if not set via CLI (-e) or in playbook vars
|
# default value if not set via CLI (-e) or in playbook vars
|
||||||
allowed_applications: []
|
allowed_applications: []
|
||||||
|
|
||||||
|
@ -18,8 +18,8 @@
|
|||||||
uidNumber: "{{ item.value.uid | int }}"
|
uidNumber: "{{ item.value.uid | int }}"
|
||||||
gidNumber: "{{ item.value.gid | int }}"
|
gidNumber: "{{ item.value.gid | int }}"
|
||||||
state: present # ↳ creates but never updates
|
state: present # ↳ creates but never updates
|
||||||
async: 60
|
async: "{{ ASYNC_TIME if ASYNC_ENABLED else omit }}"
|
||||||
poll: 0
|
poll: "{{ ASYNC_POLL if ASYNC_ENABLED else omit }}"
|
||||||
loop: "{{ users | dict2items }}"
|
loop: "{{ users | dict2items }}"
|
||||||
loop_control:
|
loop_control:
|
||||||
label: "{{ item.key }}"
|
label: "{{ item.key }}"
|
||||||
@ -37,8 +37,8 @@
|
|||||||
objectClass: "{{ ldap.user.objects.structural }}"
|
objectClass: "{{ ldap.user.objects.structural }}"
|
||||||
mail: "{{ item.value.email }}"
|
mail: "{{ item.value.email }}"
|
||||||
state: exact
|
state: exact
|
||||||
async: 60
|
async: "{{ ASYNC_TIME if ASYNC_ENABLED else omit }}"
|
||||||
poll: 0
|
poll: "{{ ASYNC_POLL if ASYNC_ENABLED else omit }}"
|
||||||
loop: "{{ users | dict2items }}"
|
loop: "{{ users | dict2items }}"
|
||||||
loop_control:
|
loop_control:
|
||||||
label: "{{ item.key }}"
|
label: "{{ item.key }}"
|
||||||
|
@ -21,8 +21,8 @@
|
|||||||
attributes:
|
attributes:
|
||||||
objectClass: "{{ missing_auxiliary }}"
|
objectClass: "{{ missing_auxiliary }}"
|
||||||
state: present
|
state: present
|
||||||
async: 60
|
async: "{{ ASYNC_TIME if ASYNC_ENABLED else omit }}"
|
||||||
poll: 0
|
poll: "{{ ASYNC_POLL if ASYNC_ENABLED else omit }}"
|
||||||
loop: "{{ ldap_users_with_classes.results }}"
|
loop: "{{ ldap_users_with_classes.results }}"
|
||||||
loop_control:
|
loop_control:
|
||||||
label: "{{ item.dn }}"
|
label: "{{ item.dn }}"
|
||||||
|
@ -3,8 +3,8 @@
|
|||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
infinito build tree --no-signal --alarm-timeout 0 -s {{ mig_roles_meta_volume }}
|
infinito build tree --no-signal --alarm-timeout 0 -s {{ mig_roles_meta_volume }}
|
||||||
infinito build roles_list --no-signal --alarm-timeout 0 -o {{ mig_roles_meta_list }}
|
infinito build roles_list --no-signal --alarm-timeout 0 -o {{ mig_roles_meta_list }}
|
||||||
async: 3600
|
async: "{{ (3600 if ASYNC_ENABLED else omit) | default(omit) }}"
|
||||||
poll: 0
|
poll: "{{ ASYNC_POLL if ASYNC_ENABLED else omit }}"
|
||||||
register: mig_build_job
|
register: mig_build_job
|
||||||
|
|
||||||
- name: Fail if MIG build job did not start
|
- name: Fail if MIG build job did not start
|
||||||
|
@ -3,9 +3,12 @@
|
|||||||
docker exec -u {{ nextcloud_docker_user }} {{ nextcloud_container }}
|
docker exec -u {{ nextcloud_docker_user }} {{ nextcloud_container }}
|
||||||
php occ group:adduser admin {{ nextcloud_administrator_username }}
|
php occ group:adduser admin {{ nextcloud_administrator_username }}
|
||||||
register: add_admin_to_group
|
register: add_admin_to_group
|
||||||
changed_when: "'Added user' in (add_admin_to_group.stdout | default(''))"
|
changed_when: "not ASYNC_ENABLED and 'Added user' in (add_admin_to_group.stdout | default(''))"
|
||||||
failed_when: >
|
failed_when: >
|
||||||
|
not ASYNC_ENABLED and
|
||||||
(add_admin_to_group.rc != 0) and
|
(add_admin_to_group.rc != 0) and
|
||||||
("is already a member of" not in (
|
("is already a member of" not in (
|
||||||
(add_admin_to_group.stderr | default('')) ~ (add_admin_to_group.stdout | default(''))
|
(add_admin_to_group.stderr | default('')) ~ (add_admin_to_group.stdout | default(''))
|
||||||
))
|
))
|
||||||
|
async: "{{ ASYNC_TIME if ASYNC_ENABLED else omit }}"
|
||||||
|
poll: "{{ ASYNC_POLL if ASYNC_ENABLED else omit }}"
|
@ -14,6 +14,9 @@
|
|||||||
executable: /bin/bash
|
executable: /bin/bash
|
||||||
register: syscfg_shell
|
register: syscfg_shell
|
||||||
changed_when: >
|
changed_when: >
|
||||||
|
not ASYNC_ENABLED and
|
||||||
( ((syscfg_shell.stdout | default('')) ~ (syscfg_shell.stderr | default('')))
|
( ((syscfg_shell.stdout | default('')) ~ (syscfg_shell.stderr | default('')))
|
||||||
is search(' set to ') )
|
is search(' set to ') )
|
||||||
failed_when: syscfg_shell.rc != 0
|
failed_when: not ASYNC_ENABLED and syscfg_shell.rc != 0
|
||||||
|
async: "{{ ASYNC_TIME if ASYNC_ENABLED else omit }}"
|
||||||
|
poll: "{{ ASYNC_POLL if ASYNC_ENABLED else omit }}"
|
||||||
|
@ -5,10 +5,10 @@
|
|||||||
- name: disable {{ plugin_key }} nextcloud plugin
|
- name: disable {{ plugin_key }} nextcloud plugin
|
||||||
command: "{{ nextcloud_docker_exec_occ }} app:disable {{ plugin_key }}"
|
command: "{{ nextcloud_docker_exec_occ }} app:disable {{ plugin_key }}"
|
||||||
register: disable_result
|
register: disable_result
|
||||||
failed_when: >
|
|
||||||
(disable_result.rc | int != 0)
|
|
||||||
and ('No such app enabled' not in (disable_result.stdout | default('') ~ disable_result.stderr | default('')))
|
|
||||||
changed_when: >
|
changed_when: >
|
||||||
|
not ASYNC_ENABLED and
|
||||||
((disable_result.stdout | default('') ~ disable_result.stderr | default('')) is search('disabled'))
|
((disable_result.stdout | default('') ~ disable_result.stderr | default('')) is search('disabled'))
|
||||||
and (((disable_result.stdout | default('') ~ disable_result.stderr | default('')) is not search('already disabled')))
|
and (((disable_result.stdout | default('') ~ disable_result.stderr | default('')) is not search('already disabled')))
|
||||||
when: not (plugin_value.enabled | bool)
|
when: not (plugin_value.enabled | bool)
|
||||||
|
async: "{{ ASYNC_TIME if ASYNC_ENABLED else omit }}"
|
||||||
|
poll: "{{ ASYNC_POLL if ASYNC_ENABLED else omit }}"
|
||||||
|
@ -18,6 +18,8 @@
|
|||||||
is not search('already disabled'))
|
is not search('already disabled'))
|
||||||
)
|
)
|
||||||
failed_when: false
|
failed_when: false
|
||||||
|
async: "{{ ASYNC_TIME if ASYNC_ENABLED else omit }}"
|
||||||
|
poll: "{{ ASYNC_POLL if ASYNC_ENABLED else omit }}"
|
||||||
|
|
||||||
- name: install {{ plugin_key }} nextcloud plugin
|
- name: install {{ plugin_key }} nextcloud plugin
|
||||||
command: "{{ nextcloud_docker_exec_occ }} app:install {{ plugin_key }}"
|
command: "{{ nextcloud_docker_exec_occ }} app:install {{ plugin_key }}"
|
||||||
|
@ -29,8 +29,11 @@
|
|||||||
when: plugin_vars_file.stat.exists
|
when: plugin_vars_file.stat.exists
|
||||||
register: config_set_shell
|
register: config_set_shell
|
||||||
changed_when: >
|
changed_when: >
|
||||||
|
not ASYNC_ENABLED and
|
||||||
(config_set_shell.stdout | default('')) is search(' set to ')
|
(config_set_shell.stdout | default('')) is search(' set to ')
|
||||||
failed_when: config_set_shell.rc != 0
|
failed_when: not ASYNC_ENABLED and config_set_shell.rc != 0
|
||||||
|
async: "{{ ASYNC_TIME if ASYNC_ENABLED else omit }}"
|
||||||
|
poll: "{{ ASYNC_POLL if ASYNC_ENABLED else omit }}"
|
||||||
|
|
||||||
- name: Check if {{nextcloud_control_node_plugin_tasks_directory}}{{ plugin_key }}.yml exists
|
- name: Check if {{nextcloud_control_node_plugin_tasks_directory}}{{ plugin_key }}.yml exists
|
||||||
stat:
|
stat:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user