--- - name: "Include OS-specific variables" ansible.builtin.include_vars: "{{ ansible_facts['os_family'] | lower }}.yml" - name: "Include OS-specific installation tasks" ansible.builtin.include_tasks: "install-{{ ansible_facts['os_family'] | lower }}.yml" - name: "Create grafana group" become: true ansible.builtin.group: name: "grafana" system: true - name: "Create grafana user" become: true ansible.builtin.user: name: "grafana" group: "grafana" system: true shell: "/usr/sbin/nologin" create_home: false - name: "Create grafana configuration directories" become: true ansible.builtin.file: path: "{{ item }}" state: "directory" owner: "grafana" group: "grafana" mode: "0755" loop: - "/etc/grafana" - "/etc/grafana/provisioning" - "/etc/grafana/provisioning/datasources" - "/etc/grafana/provisioning/plugins" - "/etc/grafana/provisioning/dashboards" - name: "Template grafana configurations" become: true ansible.builtin.template: src: "{{ item.src }}" dest: "{{ item.dest }}" owner: "root" group: "grafana" mode: "0640" loop: - src: "grafana.ini.j2" dest: "{{ grafana_config_file }}" - src: "datasources/prometheus.yml.j2" dest: "/etc/grafana/provisioning/datasources/prometheus.yml" - src: "dashboards/dashboards.yml.j2" dest: "/etc/grafana/provisioning/dashboards/dashboards.yml" notify: "Restart grafana" no_log: true - name: "Provision Grafana community dashboards" notify: "Restart grafana" # grafana downloaded dashboards are being rewritten after successful download # this is to correct the datasource mapping in the downloaded files # This is why these tasks are not idempotent and can't be. tags: - molecule-idempotence-notest block: - name: "Download Grafana community dashboards" become: true ansible.builtin.get_url: url: "https://grafana.com/api/dashboards/{{ item.id }}/revisions/{{ item.revision }}/download" dest: "/etc/grafana/provisioning/dashboards/{{ item.name }}.json" owner: "grafana" group: "grafana" mode: "0644" force: false loop: "{{ grafana_dashboards }}" - name: "Fix datasource references in downloaded dashboards" become: true ansible.builtin.replace: path: "/etc/grafana/provisioning/dashboards/{{ item.0.name }}.json" regexp: "{{ item.1.key | regex_escape }}" replace: "{{ item.1.value }}" loop: "{{ grafana_dashboards | subelements('datasource_mappings', skip_missing=True) }}" - name: "Start and enable grafana" become: true ansible.builtin.systemd_service: name: "{{ grafana_service }}" state: "started" enabled: true