diff --git a/changelogs/fragments/add-datasource-type-victorialogs.yml b/changelogs/fragments/add-datasource-type-victorialogs.yml new file mode 100644 index 00000000..cd37c1a4 --- /dev/null +++ b/changelogs/fragments/add-datasource-type-victorialogs.yml @@ -0,0 +1,2 @@ +minor_changes: + - grafana_datasource - add support for VictoriaLogs datasource type diff --git a/changelogs/fragments/add-datasource-type-victoriametrics.yml b/changelogs/fragments/add-datasource-type-victoriametrics.yml new file mode 100644 index 00000000..3d41103a --- /dev/null +++ b/changelogs/fragments/add-datasource-type-victoriametrics.yml @@ -0,0 +1,2 @@ +minor_changes: + - grafana_datasource - add support for VictoriaMetrics datasource type diff --git a/plugins/modules/grafana_datasource.py b/plugins/modules/grafana_datasource.py index 89c9bfd0..8f28a1d5 100644 --- a/plugins/modules/grafana_datasource.py +++ b/plugins/modules/grafana_datasource.py @@ -50,6 +50,8 @@ - tempo - quickwit-quickwit-datasource - alertmanager + - victoriametrics-metrics-datasource + - victoriametrics-logs-datasource type: str ds_url: description: @@ -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: @@ -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 @@ -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"] @@ -839,6 +866,8 @@ def setup_module_object(): "tempo", "quickwit-quickwit-datasource", "alertmanager", + "victoriametrics-metrics-datasource", + "victoriametrics-logs-datasource", ] ), ds_url=dict(type="str"), diff --git a/tests/integration/inventory b/tests/integration/inventory new file mode 100644 index 00000000..669bcffc --- /dev/null +++ b/tests/integration/inventory @@ -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" diff --git a/tests/integration/targets/grafana_datasource/tasks/main.yml b/tests/integration/targets/grafana_datasource/tasks/main.yml index 524f4d38..b84dffa9 100644 --- a/tests/integration/targets/grafana_datasource/tasks/main.yml +++ b/tests/integration/targets/grafana_datasource/tasks/main.yml @@ -14,3 +14,5 @@ - redis - azure - uid + - victoriametrics + - victorialogs diff --git a/tests/integration/targets/grafana_datasource/tasks/victorialogs.yml b/tests/integration/targets/grafana_datasource/tasks/victorialogs.yml new file mode 100644 index 00000000..cb078fa4 --- /dev/null +++ b/tests/integration/targets/grafana_datasource/tasks/victorialogs.yml @@ -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 diff --git a/tests/integration/targets/grafana_datasource/tasks/victoriametrics.yml b/tests/integration/targets/grafana_datasource/tasks/victoriametrics.yml new file mode 100644 index 00000000..9a984e28 --- /dev/null +++ b/tests/integration/targets/grafana_datasource/tasks/victoriametrics.yml @@ -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