2025-08-31 14:43:33 +04:00

89 lines
2.6 KiB
YAML

---
- 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