summaryrefslogtreecommitdiffstats
path: root/roles/grafana/tasks/main.yml
diff options
context:
space:
mode:
Diffstat (limited to 'roles/grafana/tasks/main.yml')
-rw-r--r--roles/grafana/tasks/main.yml84
1 files changed, 84 insertions, 0 deletions
diff --git a/roles/grafana/tasks/main.yml b/roles/grafana/tasks/main.yml
new file mode 100644
index 00000000..1d8dceaf
--- /dev/null
+++ b/roles/grafana/tasks/main.yml
@@ -0,0 +1,84 @@
+---
+- name: "Include OS-specific variables"
+ ansible.builtin.include_vars: "{{ ansible_distribution | lower }}.yml"
+
+- name: "Include OS-specific installation tasks"
+ ansible.builtin.include_tasks: "install-{{ ansible_distribution | 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 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"
+ - "/var/lib/grafana"
+ - "/var/log/grafana"
+
+- 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: "/etc/grafana.ini"
+ - 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"
+
+- name: "Provision Grafana community dashboards"
+ notify: "Restart grafana"
+ 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_name }}"
+ state: "started"
+ enabled: true