- name: Dashboards hosts: beepi become: true vars: dashboard_dir: /opt/beeserver/monitoring/grafana/dashboards dashboard_general_dir: /opt/beeserver/monitoring/grafana/dashboards-general provisioning_dir: /opt/beeserver/monitoring/grafana/provisioning/dashboards tasks: - name: Determine whether uptimerobot is configured ansible.builtin.set_fact: uptimerobot_enabled: "{{ uptimerobot_api_key is defined and 'REPLACE_ME' not in uptimerobot_api_key }}" - name: Check that grafana is running ansible.builtin.command: cmd: podman container inspect -f '{{ '{{' }}.State.Running{{ '}}' }}' grafana register: grafana_running changed_when: false failed_when: false - name: Require a running grafana ansible.builtin.assert: that: - grafana_running.stdout | trim == 'true' fail_msg: >- grafana is not running, so provisioned changes cannot be picked up. Run make deploy-monitoring first. - name: Create dashboard directories ansible.builtin.file: path: "{{ item }}" state: directory mode: '0755' loop: - "{{ dashboard_dir }}" - "{{ dashboard_general_dir }}" - "{{ provisioning_dir }}" - name: Copy dashboard provider ansible.builtin.template: src: ../monitoring/grafana/provisioning/dashboards/dashboards.yml.j2 dest: "{{ provisioning_dir }}/dashboards.yml" mode: '0644' notify: Restart grafana - name: Copy generated dashboards ansible.builtin.template: src: "../monitoring/grafana/dashboards/{{ item }}.json.j2" dest: "{{ dashboard_dir }}/{{ item }}.json" mode: '0644' validate: "python3 -c \"import json; json.load(open('%s'))\"" loop: - infrastructure-map - backups - services - ingress - name: Copy uptimerobot dashboard ansible.builtin.template: src: ../monitoring/grafana/dashboards/uptimerobot.json.j2 dest: "{{ dashboard_dir }}/uptimerobot.json" mode: '0644' validate: "python3 -c \"import json; json.load(open('%s'))\"" when: uptimerobot_enabled - name: Copy hand made dashboards ansible.builtin.copy: src: ../monitoring/grafana/dashboards-general/ dest: "{{ dashboard_general_dir }}/" mode: '0644' - name: Debug ansible.builtin.debug: msg: - "Dashboards are polled by grafana every 30s, no restart needed." - "Grafana: https://grafana.secretbee.buzz/" - "Errors: sudo podman logs --tail 40 grafana | grep -i provision" tags: - always handlers: - name: Restart grafana changed_when: true ansible.builtin.command: cmd: podman restart grafana