Files
michaelschiemer/.deployment-archive-20251030-111806/ansible/playbooks/emergency-rollback.yml

111 lines
3.8 KiB
YAML

---
# Ansible Playbook: Emergency Rollback
# Purpose: Fast rollback without health checks for emergency situations
# Usage: ansible-playbook -i inventory/production.yml playbooks/emergency-rollback.yml -e "rollback_tag=<tag>"
- name: Emergency Rollback (Fast Mode)
hosts: production_server
become: no
vars:
registry_url: "git.michaelschiemer.de:5000"
image_name: "framework"
stack_name: "framework"
rollback_tag: "{{ rollback_tag | default('latest') }}"
skip_health_check: true
pre_tasks:
- name: Emergency rollback warning
debug:
msg: |
🚨 EMERGENCY ROLLBACK IN PROGRESS 🚨
This will immediately revert to: {{ rollback_tag }}
Health checks will be SKIPPED for speed.
Press Ctrl+C now if you want to abort.
- name: Record rollback initiation
shell: |
echo "[$(date)] Emergency rollback initiated to {{ rollback_tag }}" >> /home/deploy/deployments/emergency-rollback.log
tasks:
- name: Get current running image tag
shell: |
docker service inspect {{ stack_name }}_web --format '{{`{{.Spec.TaskTemplate.ContainerSpec.Image}}`}}'
register: current_image
changed_when: false
- name: Display current vs target
debug:
msg: |
Current: {{ current_image.stdout }}
Target: {{ registry_url }}/{{ image_name }}:{{ rollback_tag }}
- name: Pull rollback image (skip verification)
docker_image:
name: "{{ registry_url }}/{{ image_name }}"
tag: "{{ rollback_tag }}"
source: pull
register: rollback_image
ignore_errors: yes
- name: Force rollback even if image pull failed
debug:
msg: "⚠️ Image pull failed, attempting rollback with cached image"
when: rollback_image is failed
- name: Immediate rollback - web service
shell: |
docker service update \
--image {{ registry_url }}/{{ image_name }}:{{ rollback_tag }} \
--force \
--update-parallelism 999 \
--update-delay 0s \
{{ stack_name }}_web
register: web_rollback
- name: Immediate rollback - queue-worker service
shell: |
docker service update \
--image {{ registry_url }}/{{ image_name }}:{{ rollback_tag }} \
--force \
--update-parallelism 999 \
--update-delay 0s \
{{ stack_name }}_queue-worker
register: worker_rollback
- name: Wait for rollback to propagate (minimal wait)
pause:
seconds: 15
- name: Quick service status check
shell: |
docker service ps {{ stack_name }}_web --filter "desired-state=running" --format "{{`{{.CurrentState}}`}}" | head -1
register: rollback_state
changed_when: false
- name: Display rollback status
debug:
msg: |
🚨 Emergency rollback completed (fast mode)
Web Service: {{ web_rollback.changed | ternary('ROLLED BACK', 'NO CHANGE') }}
Worker Service: {{ worker_rollback.changed | ternary('ROLLED BACK', 'NO CHANGE') }}
Service State: {{ rollback_state.stdout }}
⚠️ MANUAL VERIFICATION REQUIRED:
1. Check application: https://michaelschiemer.de
2. Check service logs: docker service logs {{ stack_name }}_web
3. Verify database connectivity
4. Run full health check: ansible-playbook playbooks/health-check.yml
- name: Record rollback completion
shell: |
echo "[$(date)] Emergency rollback completed: {{ rollback_tag }}, Status: {{ rollback_state.stdout }}" >> /home/deploy/deployments/emergency-rollback.log
- name: Alert - manual verification required
debug:
msg: |
⚠️ IMPORTANT: This was an emergency rollback without health checks.
You MUST manually verify application functionality before considering this successful.