--- - name: Check if Docker is installed command: docker --version register: docker_check ignore_errors: yes changed_when: false - name: Install cAdvisor (only on Docker hosts) block: - name: Create cAdvisor directories file: path: "{{ item }}" state: directory mode: '0755' loop: - "{{ cadvisor_base_dir }}" - "{{ cadvisor_config_dir }}" become: yes - name: Check if port {{ cadvisor_port }} is available wait_for: host: localhost port: "{{ cadvisor_port }}" state: stopped timeout: 5 ignore_errors: yes register: port_check become: no - name: Deploy cAdvisor docker-compose template: src: docker-compose.yml.j2 dest: "{{ cadvisor_base_dir }}/docker-compose.yml" owner: root group: root mode: '0644' become: yes - name: Stop existing cAdvisor container community.docker.docker_compose_v2: project_src: "{{ cadvisor_base_dir }}" state: absent become: yes ignore_errors: yes - name: Run cAdvisor container community.docker.docker_compose_v2: project_src: "{{ cadvisor_base_dir }}" state: present recreate: always become: yes register: cadvisor_start - name: Wait for cAdvisor to start wait_for: host: localhost port: "{{ cadvisor_port }}" timeout: 30 state: started become: no - name: Check cAdvisor container status shell: "docker ps -f name=cadvisor" register: container_info become: yes - name: Display container status debug: var: container_info.stdout - name: Get cAdvisor container logs if check failed shell: "docker logs cadvisor" register: cadvisor_logs become: yes when: container_info.rc != 0 or "'Up' not in container_info.stdout" - name: Display cAdvisor logs if container not running debug: var: cadvisor_logs.stdout when: cadvisor_logs is defined - name: Verify cAdvisor is responding uri: url: "http://localhost:{{ cadvisor_port }}/metrics" status_code: 200 timeout: 10 register: cadvisor_check become: no ignore_errors: yes - name: Show cAdvisor status debug: msg: "cAdvisor is running and responding on port {{ cadvisor_port }}" when: cadvisor_check.status == 200 - name: Fail if cAdvisor not responding fail: msg: | cAdvisor failed to start on {{ inventory_hostname }}. Container status: {{ container_info.stdout }} Logs: {{ cadvisor_logs.stdout if cadvisor_logs is defined else 'No logs available' }} when: cadvisor_check.status != 200 when: - docker_check.rc == 0 - cadvisor_enabled | default(true)