Files
ansible-role-docker-compose…/tasks/health_check.yaml
2026-01-26 23:24:37 -05:00

49 lines
2.2 KiB
YAML

---
- name: Wait for containers to be healthy
community.docker.docker_container_info:
name: "{{ app_name }}"
register: container_info
until: container_info.container.State.Health.Status | default('healthy') == 'healthy'
retries: "{{ app_health_check_retries | default(30) }}"
delay: "{{ app_health_check_delay | default(10) }}"
when: app_health_check | default(true) and app_health_check_method | default('docker') == 'docker'
ignore_errors: true
- name: Verify application HTTP endpoint
ansible.builtin.uri:
url: "{{ app_health_check_url }}"
method: GET
status_code: "{{ app_health_check_status_codes | default([200, 201, 202]) }}"
register: http_health_check
until: http_health_check.status in (app_health_check_status_codes | default([200, 201, 202]))
retries: "{{ app_health_check_retries | default(30) }}"
delay: "{{ app_health_check_delay | default(10) }}"
when: app_health_check | default(true) and app_health_check_method | default('docker') == 'http' and app_health_check_url is defined
ignore_errors: true
- name: Check if all containers are running
ansible.builtin.command:
cmd: docker compose ps --services --filter status=running
chdir: "{{ app_dir }}"
register: running_services
when: app_health_check | default(true)
- name: Check total services
ansible.builtin.command:
cmd: docker compose ps --services
chdir: "{{ app_dir }}"
register: total_services
when: app_health_check | default(true)
- name: Verify deployment success
ansible.builtin.assert:
that:
- running_services.stdout_lines | length == total_services.stdout_lines | length
fail_msg: "Not all containers are running. Running: {{ running_services.stdout_lines | length }}, Total: {{ total_services.stdout_lines | length }}"
success_msg: "All containers are running successfully."
when: app_health_check | default(true) and total_services.stdout_lines is defined
- name: Log deployment status
ansible.builtin.debug:
msg: "Deployment {{ 'successful' if (running_services.stdout_lines | length == total_services.stdout_lines | length) else 'failed' }}"
when: app_health_check | default(true) and total_services.stdout_lines is defined