Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions changelogs/fragments/add-datasource-type-victorialogs.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
minor_changes:
- grafana_datasource - add support for VictoriaLogs datasource type
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
minor_changes:
- grafana_datasource - add support for VictoriaMetrics datasource type
33 changes: 31 additions & 2 deletions plugins/modules/grafana_datasource.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,8 @@
- tempo
- quickwit-quickwit-datasource
- alertmanager
- victoriametrics-metrics-datasource
- victoriametrics-logs-datasource
type: str
ds_url:
description:
Expand Down Expand Up @@ -185,7 +187,7 @@
default: '@timestamp'
time_interval:
description:
- Minimum group by interval for C(influxdb), C(elasticsearch) or C(prometheus) datasources.
- Minimum group by interval for C(influxdb), C(elasticsearch), C(prometheus) or C(victoriametrics-metrics-datasource) datasources.
- for example C(>10s).
type: str
interval:
Expand Down Expand Up @@ -480,6 +482,26 @@
basic_auth_user: "thruk-user"
basic_auth_password: "******"

- name: grafana - create victoriametrics datasource
community.grafana.grafana_datasource:
name: victoriametrics
grafana_url: "https://grafana.company.com"
grafana_user: "admin"
grafana_password: "xxxxxx"
ds_type: victoriametrics-metrics-datasource
ds_url: "http://victoriametrics:8428"
access: proxy

- name: grafana - create victorialogs datasource
community.grafana.grafana_datasource:
name: victorialogs
grafana_url: "https://grafana.company.com"
grafana_user: "admin"
grafana_password: "xxxxxx"
ds_type: victoriametrics-logs-datasource
ds_url: "http://victorialogs:9428"
access: proxy

# handle secure data - workflow example
# this will create/update the datasource but dont update the secure data on updates
# so you can assert if all tasks are changed=False
Expand Down Expand Up @@ -681,7 +703,12 @@ def get_datasource_payload(data, org_id=None):
es_version = ES_VERSION_MAPPING.get(data["es_version"])
json_data["esVersion"] = es_version

if data["ds_type"] in ["elasticsearch", "influxdb", "prometheus"]:
if data["ds_type"] in [
"elasticsearch",
"influxdb",
"prometheus",
"victoriametrics-metrics-datasource",
]:
if data.get("time_interval"):
json_data["timeInterval"] = data["time_interval"]

Expand Down Expand Up @@ -839,6 +866,8 @@ def setup_module_object():
"tempo",
"quickwit-quickwit-datasource",
"alertmanager",
"victoriametrics-metrics-datasource",
"victoriametrics-logs-datasource",
]
),
ds_url=dict(type="str"),
Expand Down
2 changes: 2 additions & 0 deletions tests/integration/inventory
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
[testgroup]
testhost ansible_connection="local" ansible_pipelining="yes" ansible_python_interpreter="/home/vivdev/.pyenv/versions/3.9.18/bin/python3.9"
2 changes: 2 additions & 0 deletions tests/integration/targets/grafana_datasource/tasks/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,5 @@
- redis
- azure
- uid
- victoriametrics
- victorialogs
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
---
- name: Create victorialogs datasource
register: result
community.grafana.grafana_datasource:
name: datasource-victorialogs
org_id: "1"
ds_type: victoriametrics-logs-datasource
ds_url: http://victorialogs:9428
access: proxy

- ansible.builtin.debug:
var: result

- ansible.builtin.assert:
that:
- result.changed
- not result.datasource.isDefault
- result.datasource.name == 'datasource-victorialogs'
- result.datasource.orgId == 1
- ('password' not in result.datasource) or (result.datasource.password == '')
- result.datasource.type == 'victoriametrics-logs-datasource'
- result.datasource.url == 'http://victorialogs:9428'
- result.datasource.user == ''
- not result.datasource.withCredentials
- result.msg == 'Datasource datasource-victorialogs created'

- name: Create victorialogs datasource (idempotency)
register: result
community.grafana.grafana_datasource:
name: datasource-victorialogs
org_id: "1"
ds_type: victoriametrics-logs-datasource
ds_url: http://victorialogs:9428
access: proxy

- ansible.builtin.debug:
var: result

- ansible.builtin.assert:
that:
- not result.changed

- name: Update victorialogs datasource
register: result
community.grafana.grafana_datasource:
name: datasource-victorialogs
org_id: "1"
ds_type: victoriametrics-logs-datasource
ds_url: http://victorialogs:9428
access: proxy
with_credentials: true

- ansible.builtin.debug:
var: result

- ansible.builtin.assert:
that:
- result.changed
- not result.datasource.isDefault
- result.datasource.name == 'datasource-victorialogs'
- result.datasource.orgId == 1
- ('password' not in result.datasource) or (result.datasource.password == '')
- result.datasource.type == 'victoriametrics-logs-datasource'
- result.datasource.url == 'http://victorialogs:9428'
- result.datasource.user == ''
- result.datasource.withCredentials
- result.msg == 'Datasource datasource-victorialogs updated'

- name: Delete victorialogs datasource
register: result
community.grafana.grafana_datasource:
name: datasource-victorialogs
state: absent

- ansible.builtin.assert:
that:
- result.changed

- name: Delete victorialogs datasource (idempotency)
register: result
community.grafana.grafana_datasource:
name: datasource-victorialogs
state: absent

- ansible.builtin.assert:
that:
- not result.changed
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
---
- name: Create victoriametrics datasource
register: result
community.grafana.grafana_datasource:
name: datasource-victoriametrics
org_id: "1"
ds_type: victoriametrics-metrics-datasource
ds_url: http://victoriametrics:8428
access: proxy
time_interval: "15s"

- ansible.builtin.debug:
var: result

- ansible.builtin.assert:
that:
- result.changed
- not result.datasource.isDefault
- result.datasource.jsonData.timeInterval == '15s'
- result.datasource.name == 'datasource-victoriametrics'
- result.datasource.orgId == 1
- ('password' not in result.datasource) or (result.datasource.password == '')
- result.datasource.type == 'victoriametrics-metrics-datasource'
- result.datasource.url == 'http://victoriametrics:8428'
- result.datasource.user == ''
- not result.datasource.withCredentials
- result.msg == 'Datasource datasource-victoriametrics created'

- name: Create victoriametrics datasource (idempotency)
register: result
community.grafana.grafana_datasource:
name: datasource-victoriametrics
org_id: "1"
ds_type: victoriametrics-metrics-datasource
ds_url: http://victoriametrics:8428
access: proxy
time_interval: "15s"

- ansible.builtin.debug:
var: result

- ansible.builtin.assert:
that:
- not result.changed

- name: Update victoriametrics datasource
register: result
community.grafana.grafana_datasource:
name: datasource-victoriametrics
org_id: "1"
ds_type: victoriametrics-metrics-datasource
ds_url: http://victoriametrics:8428
access: proxy
time_interval: "30s"

- ansible.builtin.debug:
var: result

- ansible.builtin.assert:
that:
- result.changed
- not result.datasource.isDefault
- result.datasource.jsonData.timeInterval == '30s'
- result.datasource.name == 'datasource-victoriametrics'
- result.datasource.orgId == 1
- ('password' not in result.datasource) or (result.datasource.password == '')
- result.datasource.type == 'victoriametrics-metrics-datasource'
- result.datasource.url == 'http://victoriametrics:8428'
- result.datasource.user == ''
- not result.datasource.withCredentials
- result.msg == 'Datasource datasource-victoriametrics updated'

- name: Delete victoriametrics datasource
register: result
community.grafana.grafana_datasource:
name: datasource-victoriametrics
state: absent

- ansible.builtin.assert:
that:
- result.changed

- name: Delete victoriametrics datasource (idempotency)
register: result
community.grafana.grafana_datasource:
name: datasource-victoriametrics
state: absent

- ansible.builtin.assert:
that:
- not result.changed