52 lines
2.0 KiB
YAML
52 lines
2.0 KiB
YAML
---
|
|
- name: Docker healthcheck audit
|
|
hosts: all
|
|
become: true
|
|
gather_facts: false
|
|
|
|
tasks:
|
|
- name: Collect Docker containers
|
|
community.docker.docker_host_info:
|
|
containers: true
|
|
register: docker_host_info
|
|
|
|
- name: Build list of containers missing healthcheck
|
|
ansible.builtin.set_fact:
|
|
containers_missing_healthcheck: "{{ (containers_missing_healthcheck | default([])) + [item.Names[0] | default(item.Id)] }}"
|
|
when:
|
|
- item.Config is defined
|
|
- item.Config.Healthcheck is not defined
|
|
loop: "{{ docker_host_info.containers | default([]) }}"
|
|
|
|
- name: Ensure missing-healthcheck list exists
|
|
ansible.builtin.set_fact:
|
|
containers_missing_healthcheck: []
|
|
when: containers_missing_healthcheck is not defined
|
|
|
|
- name: Build audit report
|
|
ansible.builtin.set_fact:
|
|
docker_healthcheck_audit_report:
|
|
checked_containers: "{{ docker_host_info.containers | default([]) | length }}"
|
|
missing_healthcheck_count: "{{ containers_missing_healthcheck | length }}"
|
|
missing_healthcheck_containers: "{{ containers_missing_healthcheck }}"
|
|
|
|
- name: Save healthcheck audit report
|
|
ansible.builtin.copy:
|
|
dest: "<< audit_report_path | default('/tmp/docker-healthcheck-audit.json') >>"
|
|
content: "{{ docker_healthcheck_audit_report | to_nice_json }}"
|
|
mode: "0640"
|
|
when: audit_save_report | default(true)
|
|
|
|
- name: Print audit summary
|
|
ansible.builtin.debug:
|
|
msg: >-
|
|
Checked {{ docker_healthcheck_audit_report.checked_containers }} containers,
|
|
found {{ docker_healthcheck_audit_report.missing_healthcheck_count }} without healthcheck.
|
|
|
|
- name: Fail when missing healthchecks are found
|
|
ansible.builtin.fail:
|
|
msg: "Containers missing healthcheck: {{ containers_missing_healthcheck | join(', ') }}"
|
|
when:
|
|
- audit_fail_on_missing | default(false)
|
|
- containers_missing_healthcheck | length > 0
|