summaryrefslogtreecommitdiff
path: root/roles/monitoring/grafana/tasks/main.yml
blob: 30f1348e5117e4e854990a3a5e82f6e7a70d0cf5 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
---
- name: add debian repository
  include_role:
    name: apt-repo/grafana

- name: generate apt pin file for grafana package
  when: grafana_version is defined
  copy:
    dest: "/etc/apt/preferences.d/grafana.pref"
    content: |
      Package: grafana
      Pin: version {{ grafana_version }}
      Pin-Priority: 1001

- name: remove apt pin file for grafana package
  when: grafana_version is not defined
  file:
    path: "/etc/apt/preferences.d/grafana.pref"
    state: absent

- name: install apt packages
  apt:
    name: "grafana{% if grafana_version is defined %}={{ grafana_version }}{% endif %}"
    state: present
    allow_downgrade: yes

- name: configure grafana server
  loop: "{{ grafana_config_server | dict2items }}"
  loop_control:
    label: "{{ item.key }}"
  ini_file:
    path: /etc/grafana/grafana.ini
    section: server
    option: "{{ item.key }}"
    value: "{{ item.value | string }}"
  notify: restart grafana

- name: configure grafana analytics
  loop: "{{ grafana_config_analytics | dict2items }}"
  loop_control:
    label: "{{ item.key }}"
  ini_file:
    path: /etc/grafana/grafana.ini
    section: analytics
    option: "{{ item.key }}"
    value: "{{ item.value | string }}"
  notify: restart grafana

- name: configure grafana security
  loop: "{{ grafana_config_security | dict2items }}"
  loop_control:
    label: "{{ item.key }}"
  ini_file:
    path: /etc/grafana/grafana.ini
    section: security
    option: "{{ item.key }}"
    value: "{{ item.value | string }}"
  notify: restart grafana

- name: configure grafana users
  loop: "{{ grafana_config_users | dict2items }}"
  loop_control:
    label: "{{ item.key }}"
  ini_file:
    path: /etc/grafana/grafana.ini
    section: users
    option: "{{ item.key }}"
    value: "{{ item.value | string }}"
  notify: restart grafana


- name: install datasources
  copy:
    dest: "/etc/grafana/provisioning/datasources/ansible.yml"
    content: |
      apiVersion: 1
      deleteDatasources: []
      {{ {'datasources': grafana_datasources} | to_nice_yaml(indent=2) }}
    group: grafana
    mode: 0640
  no_log: yes
  notify: restart grafana

- name: install datasources
  copy:
    dest: "/etc/grafana/provisioning/dashboards/ansible.yml"
    content: |
      apiVersion: 1
      providers:
      - name: ansible'
        folder: ''
        options:
          path: /var/lib/grafana/dashboards/ansible
          foldersFromFilesStructure: true
    group: grafana
    mode: 0640
  notify: restart grafana

- name: create directory for dashboards
  file:
    path: /var/lib/grafana/dashboards/ansible
    state: directory
    group: grafana
    mode: 0750

- name: install dashboards from file
  loop: "{{ grafana_dashboards | selectattr('file', 'defined') }}"
  loop_control:
    label: "{{ item.file }} -> {{ item.datasource }}"
  copy:
    content: "{{ lookup('file', 'dashboard-'+item.file+'.json') | regex_replace('\"(?:\\${)?DS_[A-Z0-9_-]+(?:})?\"', '\"'+item.datasource+'\"') }}\n"
    dest: "/var/lib/grafana/dashboards/ansible/{{ item.datasource }}_{{ item.file }}.json"

- name: install dashboards from content
  loop: "{{ grafana_dashboards | selectattr('content', 'defined') }}"
  loop_control:
    label: "{{ item.name }} -> {{ item.datasource }}"
  copy:
    content: "{{ item.content | regex_replace('\"(?:\\${)?DS_[A-Z0-9_-]+(?:})?\"', '\"'+item.datasource+'\"') }}\n"
    dest: "/var/lib/grafana/dashboards/ansible/{{ item.datasource }}_{{ item.name }}.json"

  ## TODO: implement this
- name: install dashboards from grafana.com
  loop: "{{ grafana_dashboards | selectattr('id', 'defined') }}"
  loop_control:
    label: "https://grafana.com/api/dashboards/{{ item.id }} -> {{ item.datasource }}"
  debug:
    msg: 'installing dashboards from grafana.com is not yet supported!'

- name: make sure grafana-server is enabled and started
  systemd:
    name: grafana-server
    state: started
    enabled: yes