--- - name: Create directories ansible.builtin.file: path: "{{ item }}" state: directory mode: '0755' loop: - "{{ monitoring_base_dir }}" - "{{ monitoring_base_dir }}/prometheus" - "{{ monitoring_base_dir }}/alertmanager" - "{{ monitoring_base_dir }}/loki" - "{{ monitoring_base_dir }}/grafana/provisioning/datasources" - "{{ monitoring_base_dir }}/rules" - name: Copy example alert/recording rules ansible.builtin.copy: src: "roles/monitoring_stack/files/rules/" dest: "{{ monitoring_base_dir }}/rules/" mode: '0644' - name: Render Prometheus config ansible.builtin.template: src: templates/prometheus.yml.j2 dest: "{{ monitoring_base_dir }}/prometheus/prometheus.yml" mode: '0644' notify: Restart monitoring stack - name: Render Alertmanager config ansible.builtin.template: src: templates/alertmanager.yml.j2 dest: "{{ monitoring_base_dir }}/alertmanager/alertmanager.yml" mode: '0640' notify: Restart monitoring stack - name: Render Loki config ansible.builtin.template: src: templates/loki-config.yml.j2 dest: "{{ monitoring_base_dir }}/loki/config.yml" mode: '0644' notify: Restart monitoring stack - name: Render Grafana provisioning (datasources) ansible.builtin.template: src: templates/grafana-provisioning-datasources.yml.j2 dest: "{{ monitoring_base_dir }}/grafana/provisioning/datasources/datasources.yml" mode: '0644' notify: Restart monitoring stack - name: Render docker-compose.yml ansible.builtin.template: src: templates/docker-compose.yml.j2 dest: "{{ monitoring_base_dir }}/docker-compose.yml" mode: '0644' notify: Restart monitoring stack - name: Ensure Docker network exists community.docker.docker_network: name: "{{ monitoring_docker_network }}" state: present - name: Launch/Update monitoring stack via Compose v2 community.docker.docker_compose_v2: project_src: "{{ monitoring_base_dir }}" state: present - name: Wait for Grafana to be reachable ansible.builtin.uri: url: http://localhost:3000/api/health status_code: 200 validate_certs: false timeout: 30 retries: 10 delay: 3 method: GET return_content: false register: gf_health until: gf_health is succeeded - name: Show Grafana URL ansible.builtin.debug: msg: "Grafana is up: http://{{ ansible_host | default(inventory_hostname) }}:3000" # Handlers - name: Restart monitoring stack listen: Restart monitoring stack community.docker.docker_compose_v2: project_src: "{{ monitoring_base_dir }}" state: present pull: always