fix: Improve container wait loop to actually wait 5 minutes
This commit is contained in:
parent
6af727f665
commit
60513601d4
3 changed files with 108 additions and 4 deletions
96
ansible/playbooks/260123-configure-diun-webhook.yml
Normal file
96
ansible/playbooks/260123-configure-diun-webhook.yml
Normal file
|
|
@ -0,0 +1,96 @@
|
||||||
|
---
|
||||||
|
# Configure Diun to use webhook notifications instead of email
|
||||||
|
# This playbook updates all servers to send container update notifications
|
||||||
|
# to a Matrix room via webhook instead of individual emails per server
|
||||||
|
#
|
||||||
|
# Usage:
|
||||||
|
# ansible-playbook -i hcloud.yml playbooks/260123-configure-diun-webhook.yml
|
||||||
|
#
|
||||||
|
# Or for specific servers:
|
||||||
|
# ansible-playbook -i hcloud.yml playbooks/260123-configure-diun-webhook.yml --limit das,uil,vos
|
||||||
|
|
||||||
|
- name: Configure Diun webhook notifications on all servers
|
||||||
|
hosts: all
|
||||||
|
become: yes
|
||||||
|
|
||||||
|
vars:
|
||||||
|
# Webhook configuration - sends to Matrix via custom webhook
|
||||||
|
diun_notif_enabled: true
|
||||||
|
diun_notif_type: webhook
|
||||||
|
diun_webhook_endpoint: "https://diun-webhook.postxsociety.cloud"
|
||||||
|
diun_webhook_method: POST
|
||||||
|
diun_webhook_headers:
|
||||||
|
Content-Type: application/json
|
||||||
|
|
||||||
|
# Disable email notifications
|
||||||
|
diun_email_enabled: false
|
||||||
|
|
||||||
|
# Schedule: Weekly on Monday at 6am UTC
|
||||||
|
diun_schedule: "0 6 * * 1"
|
||||||
|
|
||||||
|
pre_tasks:
|
||||||
|
- name: Gather facts
|
||||||
|
setup:
|
||||||
|
|
||||||
|
- name: Determine client name from hostname
|
||||||
|
set_fact:
|
||||||
|
client_name: "{{ inventory_hostname }}"
|
||||||
|
|
||||||
|
- name: Load client secrets
|
||||||
|
community.sops.load_vars:
|
||||||
|
file: "{{ playbook_dir }}/../../secrets/clients/{{ client_name }}.sops.yaml"
|
||||||
|
name: client_secrets
|
||||||
|
age_keyfile: "{{ lookup('env', 'SOPS_AGE_KEY_FILE') }}"
|
||||||
|
no_log: true
|
||||||
|
|
||||||
|
- name: Load shared secrets
|
||||||
|
community.sops.load_vars:
|
||||||
|
file: "{{ playbook_dir }}/../../secrets/shared.sops.yaml"
|
||||||
|
name: shared_secrets
|
||||||
|
age_keyfile: "{{ lookup('env', 'SOPS_AGE_KEY_FILE') }}"
|
||||||
|
no_log: true
|
||||||
|
|
||||||
|
- name: Merge shared secrets into client_secrets
|
||||||
|
set_fact:
|
||||||
|
client_secrets: "{{ client_secrets | combine(shared_secrets) }}"
|
||||||
|
no_log: true
|
||||||
|
|
||||||
|
tasks:
|
||||||
|
- name: Display configuration summary
|
||||||
|
debug:
|
||||||
|
msg: |
|
||||||
|
Configuring Diun on {{ inventory_hostname }}:
|
||||||
|
- Webhook endpoint: {{ diun_webhook_endpoint }}
|
||||||
|
- Email notifications: {{ 'enabled' if diun_email_enabled else 'disabled' }}
|
||||||
|
- Schedule: {{ diun_schedule }} (Weekly Monday 6am UTC)
|
||||||
|
|
||||||
|
- name: Deploy Diun configuration with webhook
|
||||||
|
template:
|
||||||
|
src: "{{ playbook_dir }}/../roles/diun/templates/diun.yml.j2"
|
||||||
|
dest: /opt/docker/diun/diun.yml
|
||||||
|
mode: '0644'
|
||||||
|
notify: Restart Diun
|
||||||
|
|
||||||
|
- name: Restart Diun to apply new configuration
|
||||||
|
community.docker.docker_compose_v2:
|
||||||
|
project_src: /opt/docker/diun
|
||||||
|
state: restarted
|
||||||
|
|
||||||
|
- name: Wait for Diun to start
|
||||||
|
pause:
|
||||||
|
seconds: 5
|
||||||
|
|
||||||
|
- name: Check Diun status
|
||||||
|
shell: docker ps --filter name=diun --format "{{ '{{' }}.Status{{ '}}' }}"
|
||||||
|
register: diun_status
|
||||||
|
changed_when: false
|
||||||
|
|
||||||
|
- name: Display Diun status
|
||||||
|
debug:
|
||||||
|
msg: "Diun status on {{ inventory_hostname }}: {{ diun_status.stdout }}"
|
||||||
|
|
||||||
|
handlers:
|
||||||
|
- name: Restart Diun
|
||||||
|
community.docker.docker_compose_v2:
|
||||||
|
project_src: /opt/docker/diun
|
||||||
|
state: restarted
|
||||||
|
|
@ -72,14 +72,17 @@
|
||||||
|
|
||||||
- name: "Stage {{ stage.stage }}: Wait for Nextcloud container to be ready"
|
- name: "Stage {{ stage.stage }}: Wait for Nextcloud container to be ready"
|
||||||
shell: |
|
shell: |
|
||||||
for i in {1..60}; do
|
count=0
|
||||||
|
max_attempts=60
|
||||||
|
while [ $count -lt $max_attempts ]; do
|
||||||
if docker exec nextcloud curl -f http://localhost:80/status.php 2>/dev/null; then
|
if docker exec nextcloud curl -f http://localhost:80/status.php 2>/dev/null; then
|
||||||
echo "Container ready"
|
echo "Container ready after $count attempts"
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
sleep 5
|
sleep 5
|
||||||
|
count=$((count + 1))
|
||||||
done
|
done
|
||||||
echo "Timeout waiting for container"
|
echo "Timeout waiting for container after $max_attempts attempts"
|
||||||
exit 1
|
exit 1
|
||||||
register: container_ready
|
register: container_ready
|
||||||
changed_when: false
|
changed_when: false
|
||||||
|
|
|
||||||
|
|
@ -220,12 +220,17 @@
|
||||||
|
|
||||||
- name: Wait for Nextcloud to be ready
|
- name: Wait for Nextcloud to be ready
|
||||||
shell: |
|
shell: |
|
||||||
for i in {1..24}; do
|
count=0
|
||||||
|
max_attempts=24
|
||||||
|
while [ $count -lt $max_attempts ]; do
|
||||||
if docker exec nextcloud curl -f http://localhost:80/status.php 2>/dev/null; then
|
if docker exec nextcloud curl -f http://localhost:80/status.php 2>/dev/null; then
|
||||||
|
echo "Ready after $count attempts"
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
sleep 5
|
sleep 5
|
||||||
|
count=$((count + 1))
|
||||||
done
|
done
|
||||||
|
echo "Timeout after $max_attempts attempts"
|
||||||
exit 1
|
exit 1
|
||||||
register: nextcloud_ready
|
register: nextcloud_ready
|
||||||
changed_when: false
|
changed_when: false
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue