Skip to content
This repository was archived by the owner on May 31, 2023. It is now read-only.

Commit b9bc107

Browse files
authored
Merge pull request #69 from rockandska/datasources_provisioning
[patch] Use 'provisioning' capability when possible
2 parents df5655e + 44e07b4 commit b9bc107

File tree

4 files changed

+66
-23
lines changed

4 files changed

+66
-23
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ All variables which can be overridden are stored in [defaults/main.yml](defaults
2121

2222
| Name | Default Value | Description |
2323
| -------------- | ------------- | -----------------------------------|
24+
| `grafana_use_provisioning` | true | Use Grafana provisioning capalibity when possible (**grafana_version=latest will assume >= 5.0**) |
2425
| `grafana_system_user` | grafana | Grafana server system user |
2526
| `grafana_system_group` | grafana | Grafana server system group |
2627
| `grafana_version` | latest | Grafana package version |

defaults/main.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
---
22
grafana_version: latest
33

4+
# Should we use the provisioning capability when possible (provisioning require grafana >= 5.0)
5+
grafana_use_provisioning: true
6+
47
grafana_instance: "{{ ansible_fqdn | default(ansible_host) | default(inventory_hostname) }}"
58

69
grafana_logs_dir: "/var/log/grafana"

tasks/datasources.yml

Lines changed: 45 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,56 @@
11
---
2-
- name: Check datasources list
3-
uri:
4-
url: "{{ grafana_url }}/api/datasources"
5-
user: "{{ grafana_security.admin_user }}"
6-
password: "{{ grafana_security.admin_password }}"
7-
force_basic_auth: true
8-
return_content: true
9-
no_log: true
10-
register: datasources
2+
- block:
3+
- name: Check datasources list (api)
4+
uri:
5+
url: "{{ grafana_url }}/api/datasources"
6+
user: "{{ grafana_security.admin_user }}"
7+
password: "{{ grafana_security.admin_password }}"
8+
force_basic_auth: true
9+
return_content: true
10+
no_log: true
11+
register: datasources
1112

12-
- name: Create grafana datasource
13-
uri:
14-
url: "{{ grafana_url }}/api/datasources"
15-
user: "{{ grafana_security.admin_user }}"
16-
password: "{{ grafana_security.admin_password }}"
17-
force_basic_auth: true
18-
method: POST
19-
body_format: json
20-
body: "{{ item | to_json }}"
21-
with_items: "{{ grafana_datasources }}"
22-
no_log: true
23-
when: ((datasources['json'] | selectattr("name", "equalto", item['name'])) | list) | length == 0
13+
- name: Create grafana datasources (api)
14+
uri:
15+
url: "{{ grafana_url }}/api/datasources"
16+
user: "{{ grafana_security.admin_user }}"
17+
password: "{{ grafana_security.admin_password }}"
18+
force_basic_auth: true
19+
method: POST
20+
body_format: json
21+
body: "{{ item | to_json }}"
22+
with_items: "{{ grafana_datasources }}"
23+
no_log: true
24+
when: ((datasources['json'] | selectattr("name", "equalto", item['name'])) | list) | length == 0
2425

25-
- name: Create datasources file
26+
- name: Update grafana datasources (api)
27+
uri:
28+
url: "{{ grafana_url }}/api/datasources/{{ (
29+
datasources['json'] |
30+
selectattr('name', 'equalto', item['name']) |
31+
map(attribute='id') |
32+
unique |
33+
join()
34+
) }}"
35+
user: "{{ grafana_security.admin_user }}"
36+
password: "{{ grafana_security.admin_password }}"
37+
force_basic_auth: true
38+
method: PUT
39+
body_format: json
40+
body: "{{ item | to_json }}"
41+
with_items: "{{ grafana_datasources }}"
42+
no_log: true
43+
when: ((datasources['json'] | selectattr("name", "equalto", item['name'])) | list) | length != 0
44+
when: not grafana_use_provisioning
45+
46+
- name: Create/Update datasources file (provisioning)
2647
copy:
2748
dest: "/etc/grafana/provisioning/datasources/ansible.yml"
2849
content: |
2950
delete_datasources: []
3051
datasources:
3152
{{ grafana_datasources | to_nice_yaml }}
3253
backup: false
54+
become: true
3355
notify: restart grafana
56+
when: grafana_use_provisioning

tasks/preflight.yml

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,19 @@
1818
msg: "You need to specify datasources for dashboards!!!"
1919
when: grafana_dashboards != [] and grafana_datasources == []
2020

21+
- name: Fail when grafana admin user isn't set
22+
fail:
23+
msg: "Please specify grafana admin user (grafana_security.admin_user)"
24+
when:
25+
- grafana_security.admin_user == '' or
26+
grafana_security.admin_user is not defined
27+
2128
- name: Fail when grafana admin password isn't set
2229
fail:
2330
msg: "Please specify grafana admin password (grafana_security.admin_password)"
24-
when: grafana_security.admin_password == ''
31+
when:
32+
- grafana_security.admin_password == '' or
33+
grafana_security.admin_password is not defined
2534

2635
- name: Fail on incorrect variable types in datasource definitions
2736
fail:
@@ -60,3 +69,10 @@
6069
when:
6170
- "'ldap' in grafana_auth"
6271
- grafana_ldap is not defined or ('servers' not in grafana_ldap or 'group_mappings' not in grafana_ldap)
72+
73+
- name: Force grafana_use_provisioning to false if grafana_version is < 5.0 ( grafana_version is set to '{{ grafana_version }}' )
74+
set_fact:
75+
grafana_use_provisioning: false
76+
when:
77+
- grafana_version != 'latest'
78+
- grafana_version is version_compare('5.0', '<')

0 commit comments

Comments
 (0)