summaryrefslogtreecommitdiffstats
path: root/ansible_collections/community/grafana/tests
diff options
context:
space:
mode:
Diffstat (limited to 'ansible_collections/community/grafana/tests')
-rw-r--r--ansible_collections/community/grafana/tests/integration/targets/grafana_datasource/tasks/elastic.yml26
-rw-r--r--ansible_collections/community/grafana/tests/integration/targets/grafana_datasource/tasks/postgres.yml2
-rw-r--r--ansible_collections/community/grafana/tests/integration/targets/grafana_silence/defaults/main.yml5
-rwxr-xr-xansible_collections/community/grafana/tests/integration/targets/grafana_silence/runme.sh5
-rw-r--r--ansible_collections/community/grafana/tests/integration/targets/grafana_silence/site.yml6
-rw-r--r--ansible_collections/community/grafana/tests/integration/targets/grafana_silence/tasks/main.yml89
-rw-r--r--ansible_collections/community/grafana/tests/sanity/ignore-2.15.txt3
-rw-r--r--ansible_collections/community/grafana/tests/sanity/ignore-2.16.txt3
-rw-r--r--ansible_collections/community/grafana/tests/sanity/ignore-2.18.txt1
-rw-r--r--ansible_collections/community/grafana/tests/unit/modules/grafana/grafana_plugin/test_grafana_plugin.py2
-rw-r--r--ansible_collections/community/grafana/tests/unit/modules/grafana/grafana_silence/test_grafana_silence.py211
11 files changed, 345 insertions, 8 deletions
diff --git a/ansible_collections/community/grafana/tests/integration/targets/grafana_datasource/tasks/elastic.yml b/ansible_collections/community/grafana/tests/integration/targets/grafana_datasource/tasks/elastic.yml
index ff05b93f5..be5873574 100644
--- a/ansible_collections/community/grafana/tests/integration/targets/grafana_datasource/tasks/elastic.yml
+++ b/ansible_collections/community/grafana/tests/integration/targets/grafana_datasource/tasks/elastic.yml
@@ -286,6 +286,32 @@
- result.datasource.secureJsonFields.secureTest == true
- result.diff.after.secureJsonData is defined
+- name: Delete elasticsearch legacy datasource
+ register: result
+ community.grafana.grafana_datasource:
+ name: datasource/elasticLegacy
+ grafana_url: "{{ grafana_url }}"
+ grafana_user: "{{ grafana_username }}"
+ grafana_password: "{{ grafana_password }}"
+ state: absent
+
+- ansible.builtin.assert:
+ that:
+ - result.changed
+
+- name: Delete elasticsearch legacy datasource (idempotency)
+ register: result
+ community.grafana.grafana_datasource:
+ name: datasource/elasticLegacy
+ grafana_url: "{{ grafana_url }}"
+ grafana_user: "{{ grafana_username }}"
+ grafana_password: "{{ grafana_password }}"
+ state: absent
+
+- ansible.builtin.assert:
+ that:
+ - not result.changed
+
- name: Delete elasticsearch datasource
register: result
community.grafana.grafana_datasource:
diff --git a/ansible_collections/community/grafana/tests/integration/targets/grafana_datasource/tasks/postgres.yml b/ansible_collections/community/grafana/tests/integration/targets/grafana_datasource/tasks/postgres.yml
index b07bc752b..8945e2bdd 100644
--- a/ansible_collections/community/grafana/tests/integration/targets/grafana_datasource/tasks/postgres.yml
+++ b/ansible_collections/community/grafana/tests/integration/targets/grafana_datasource/tasks/postgres.yml
@@ -56,7 +56,7 @@
- result.datasource.jsonData.timescaledb == true
- result.datasource.name == 'datasource-postgres'
- result.datasource.orgId == 1
- - result.datasource.type == 'postgres'
+ - result.datasource.type in ['postgres', 'grafana-postgresql-datasource']
- result.datasource.url == 'postgres.company.com:5432'
- result.datasource.user == 'postgres'
- result.datasource.withCredentials == false
diff --git a/ansible_collections/community/grafana/tests/integration/targets/grafana_silence/defaults/main.yml b/ansible_collections/community/grafana/tests/integration/targets/grafana_silence/defaults/main.yml
new file mode 100644
index 000000000..4abf9bb43
--- /dev/null
+++ b/ansible_collections/community/grafana/tests/integration/targets/grafana_silence/defaults/main.yml
@@ -0,0 +1,5 @@
+---
+
+grafana_url: http://grafana:3000/
+grafana_username: admin
+grafana_password: admin
diff --git a/ansible_collections/community/grafana/tests/integration/targets/grafana_silence/runme.sh b/ansible_collections/community/grafana/tests/integration/targets/grafana_silence/runme.sh
new file mode 100755
index 000000000..867afb0d3
--- /dev/null
+++ b/ansible_collections/community/grafana/tests/integration/targets/grafana_silence/runme.sh
@@ -0,0 +1,5 @@
+#!/usr/bin/env bash
+
+set -eux
+
+ansible-playbook site.yml
diff --git a/ansible_collections/community/grafana/tests/integration/targets/grafana_silence/site.yml b/ansible_collections/community/grafana/tests/integration/targets/grafana_silence/site.yml
new file mode 100644
index 000000000..791582277
--- /dev/null
+++ b/ansible_collections/community/grafana/tests/integration/targets/grafana_silence/site.yml
@@ -0,0 +1,6 @@
+---
+- name: Run tests for grafana_silence
+ hosts: localhost
+ tasks:
+ - ansible.builtin.include_role:
+ name: ../../grafana_silence
diff --git a/ansible_collections/community/grafana/tests/integration/targets/grafana_silence/tasks/main.yml b/ansible_collections/community/grafana/tests/integration/targets/grafana_silence/tasks/main.yml
new file mode 100644
index 000000000..ad4cfa25d
--- /dev/null
+++ b/ansible_collections/community/grafana/tests/integration/targets/grafana_silence/tasks/main.yml
@@ -0,0 +1,89 @@
+---
+- name: Create new silence
+ community.grafana.grafana_silence:
+ url: "{{ grafana_url }}"
+ url_username: "{{ grafana_username }}"
+ url_password: "{{ grafana_password }}"
+ comment: "a testcomment"
+ created_by: "me"
+ starts_at: "2029-07-29T08:45:45.000Z"
+ ends_at: "2029-07-29T08:55:45.000Z"
+ matchers:
+ - isEqual: true
+ isRegex: true
+ name: environment
+ value: test
+ state: present
+ register: result
+- assert:
+ that:
+ - "result.changed == true"
+ - "result.failed == false"
+ - "result.silence.id != ''"
+
+- name: Check idempotency on silence creation
+ community.grafana.grafana_silence:
+ url: "{{ grafana_url }}"
+ url_username: "{{ grafana_username }}"
+ url_password: "{{ grafana_password }}"
+ comment: "a testcomment"
+ created_by: "me"
+ starts_at: "2029-07-29T08:45:45.000Z"
+ ends_at: "2029-07-29T08:55:45.000Z"
+ matchers:
+ - isEqual: true
+ isRegex: true
+ name: environment
+ value: test
+ state: present
+ register: result
+- assert:
+ that:
+ - "result.changed == false"
+ - "result.msg != ''"
+
+- name: Delete the silence
+ community.grafana.grafana_silence:
+ url: "{{ grafana_url }}"
+ url_username: "{{ grafana_username }}"
+ url_password: "{{ grafana_password }}"
+ comment: "a testcomment"
+ created_by: "me"
+ starts_at: "2029-07-29T08:45:45.000Z"
+ ends_at: "2029-07-29T08:55:45.000Z"
+ matchers:
+ - isEqual: true
+ isRegex: true
+ name: environment
+ value: test
+ state: absent
+ register: result
+- assert:
+ that:
+ - "result.changed == true"
+ - "result.failed == false"
+ - "result.silence.id != ''"
+ - - "result.silence.createdBy != 'me'"
+
+- name: Check idempotency on silence deletion
+ community.grafana.grafana_silence:
+ url: "{{ grafana_url }}"
+ url_username: "{{ grafana_username }}"
+ url_password: "{{ grafana_password }}"
+ comment: "a testcomment"
+ created_by: "me"
+ starts_at: "2029-07-29T08:45:45.000Z"
+ ends_at: "2029-07-29T08:55:45.000Z"
+ matchers:
+ - isEqual: true
+ isRegex: true
+ name: environment
+ value: test
+ state: absent
+ register: result
+ ignore_errors: yes
+- assert:
+ that:
+ - "result.changed == false"
+ - "result.failed == false"
+ - "result.msg == 'Silence does not exist'" \ No newline at end of file
diff --git a/ansible_collections/community/grafana/tests/sanity/ignore-2.15.txt b/ansible_collections/community/grafana/tests/sanity/ignore-2.15.txt
index 5c82494f9..0a40a23d5 100644
--- a/ansible_collections/community/grafana/tests/sanity/ignore-2.15.txt
+++ b/ansible_collections/community/grafana/tests/sanity/ignore-2.15.txt
@@ -1,4 +1 @@
plugins/modules/grafana_dashboard.py validate-modules:invalid-argument-name
-tests/unit/modules/grafana/grafana_plugin/test_grafana_plugin.py pep8:W291
-hacking/check_fragment.sh shebang
-hacking/find_grafana_versions.py shebang
diff --git a/ansible_collections/community/grafana/tests/sanity/ignore-2.16.txt b/ansible_collections/community/grafana/tests/sanity/ignore-2.16.txt
index 5c82494f9..0a40a23d5 100644
--- a/ansible_collections/community/grafana/tests/sanity/ignore-2.16.txt
+++ b/ansible_collections/community/grafana/tests/sanity/ignore-2.16.txt
@@ -1,4 +1 @@
plugins/modules/grafana_dashboard.py validate-modules:invalid-argument-name
-tests/unit/modules/grafana/grafana_plugin/test_grafana_plugin.py pep8:W291
-hacking/check_fragment.sh shebang
-hacking/find_grafana_versions.py shebang
diff --git a/ansible_collections/community/grafana/tests/sanity/ignore-2.18.txt b/ansible_collections/community/grafana/tests/sanity/ignore-2.18.txt
new file mode 100644
index 000000000..0a40a23d5
--- /dev/null
+++ b/ansible_collections/community/grafana/tests/sanity/ignore-2.18.txt
@@ -0,0 +1 @@
+plugins/modules/grafana_dashboard.py validate-modules:invalid-argument-name
diff --git a/ansible_collections/community/grafana/tests/unit/modules/grafana/grafana_plugin/test_grafana_plugin.py b/ansible_collections/community/grafana/tests/unit/modules/grafana/grafana_plugin/test_grafana_plugin.py
index ec691a467..7cc04a99a 100644
--- a/ansible_collections/community/grafana/tests/unit/modules/grafana/grafana_plugin/test_grafana_plugin.py
+++ b/ansible_collections/community/grafana/tests/unit/modules/grafana/grafana_plugin/test_grafana_plugin.py
@@ -21,7 +21,7 @@ Restart grafana after installing plugins . <service grafana-server restart>
def run_command_install_zip():
STDERR = ""
STDOUT = """
-installing alexanderzobnin-grafana-zabbix @
+installing alexanderzobnin-grafana-zabbix @
from: /home/grafana//alexanderzobnin-grafana-zabbix-v3.10.5-1-g2219691.zip
into: /var/lib/grafana/plugins
diff --git a/ansible_collections/community/grafana/tests/unit/modules/grafana/grafana_silence/test_grafana_silence.py b/ansible_collections/community/grafana/tests/unit/modules/grafana/grafana_silence/test_grafana_silence.py
new file mode 100644
index 000000000..96522c2af
--- /dev/null
+++ b/ansible_collections/community/grafana/tests/unit/modules/grafana/grafana_silence/test_grafana_silence.py
@@ -0,0 +1,211 @@
+from __future__ import absolute_import, division, print_function
+
+from unittest import TestCase
+from unittest.mock import patch
+from ansible_collections.community.grafana.plugins.modules import grafana_silence
+from ansible.module_utils._text import to_bytes
+from ansible.module_utils import basic
+from ansible.module_utils.urls import basic_auth_header
+import json
+
+__metaclass__ = type
+
+
+class MockedReponse(object):
+ def __init__(self, data):
+ self.data = data
+
+ def read(self):
+ return self.data
+
+
+def exit_json(*args, **kwargs):
+ """function to patch over exit_json; package return data into an exception"""
+ if "changed" not in kwargs:
+ kwargs["changed"] = False
+ raise AnsibleExitJson(kwargs)
+
+
+def fail_json(*args, **kwargs):
+ """function to patch over fail_json; package return data into an exception"""
+ kwargs["failed"] = True
+ raise AnsibleFailJson(kwargs)
+
+
+class AnsibleExitJson(Exception):
+ """Exception class to be raised by module.exit_json and caught by the test case"""
+
+ pass
+
+
+class AnsibleFailJson(Exception):
+ """Exception class to be raised by module.fail_json and caught by the test case"""
+
+ pass
+
+
+def set_module_args(args):
+ """prepare arguments so that they will be picked up during module creation"""
+ args = json.dumps({"ANSIBLE_MODULE_ARGS": args})
+ basic._ANSIBLE_ARGS = to_bytes(args)
+
+
+def silence_deleted_resp():
+ server_response = json.dumps({"message": "silence deleted"})
+ return (MockedReponse(server_response), {"status": 200})
+
+
+def silence_created_resp():
+ server_response = json.dumps({"silenceID": "470b7116-8f06-4bb6-9e6c-6258aa92218e"})
+ return (MockedReponse(server_response), {"status": 200})
+
+
+def silence_get_resp():
+ server_response = json.dumps([], sort_keys=True)
+ return (MockedReponse(server_response), {"status": 200})
+
+
+def get_silence_by_id_resp():
+ server_response = json.dumps([], sort_keys=True)
+ return (MockedReponse(server_response), {"status": 200})
+
+
+def get_version_resp():
+ return {"major": 10, "minor": 0, "rev": 0}
+
+
+class GrafanaSilenceTest(TestCase):
+ def setUp(self):
+ self.authorization = basic_auth_header("admin", "changeme")
+ self.mock_module_helper = patch.multiple(
+ basic.AnsibleModule, exit_json=exit_json, fail_json=fail_json
+ )
+ self.mock_module_helper.start()
+ self.addCleanup(self.mock_module_helper.stop)
+
+ # create a new silence
+ @patch(
+ "ansible_collections.community.grafana.plugins.modules.grafana_silence.GrafanaSilenceInterface.get_silence"
+ )
+ @patch(
+ "ansible_collections.community.grafana.plugins.modules.grafana_silence.GrafanaSilenceInterface.get_version"
+ )
+ @patch(
+ "ansible_collections.community.grafana.plugins.modules.grafana_silence.fetch_url"
+ )
+ def test_create_silence_new_silence(
+ self, mock_fetch_url, mock_get_version, mock_get_silence
+ ):
+ set_module_args(
+ {
+ "url": "https://grafana.example.com",
+ "url_username": "admin",
+ "url_password": "changeme",
+ "comment": "a testcomment",
+ "created_by": "me",
+ "starts_at": "2029-07-29T08:45:45.000Z",
+ "ends_at": "2029-07-29T08:55:45.000Z",
+ "matchers": [
+ {
+ "isEqual": True,
+ "isRegex": True,
+ "name": "environment",
+ "value": "test",
+ }
+ ],
+ "state": "present",
+ }
+ )
+ module = grafana_silence.setup_module_object()
+ mock_get_version.return_value = get_version_resp()
+ mock_fetch_url.return_value = silence_created_resp()
+ mock_get_silence.return_value = silence_get_resp()
+
+ grafana_iface = grafana_silence.GrafanaSilenceInterface(module)
+ result = grafana_iface.create_silence(
+ "a testcomment",
+ "me",
+ "2029-07-29T08:45:45.000Z",
+ "2029-07-29T08:55:45.000Z",
+ [
+ {
+ "isEqual": True,
+ "isRegex": True,
+ "name": "environment",
+ "value": "test",
+ }
+ ],
+ )
+ mock_fetch_url.assert_called_once_with(
+ module,
+ "https://grafana.example.com/api/alertmanager/grafana/api/v2/silences",
+ data=json.dumps(
+ {
+ "comment": "a testcomment",
+ "createdBy": "me",
+ "startsAt": "2029-07-29T08:45:45.000Z",
+ "endsAt": "2029-07-29T08:55:45.000Z",
+ "matchers": [
+ {
+ "isEqual": True,
+ "isRegex": True,
+ "name": "environment",
+ "value": "test",
+ }
+ ],
+ },
+ sort_keys=True,
+ ),
+ headers={
+ "Content-Type": "application/json",
+ "Authorization": self.authorization,
+ },
+ method="POST",
+ )
+ self.assertEquals(result, {"silenceID": "470b7116-8f06-4bb6-9e6c-6258aa92218e"})
+
+ @patch(
+ "ansible_collections.community.grafana.plugins.modules.grafana_silence.GrafanaSilenceInterface.get_version"
+ )
+ @patch(
+ "ansible_collections.community.grafana.plugins.modules.grafana_silence.fetch_url"
+ )
+ def test_delete_silence(self, mock_fetch_url, mock_get_version):
+ set_module_args(
+ {
+ "url": "https://grafana.example.com",
+ "url_username": "admin",
+ "url_password": "changeme",
+ "comment": "a testcomment",
+ "created_by": "me",
+ "ends_at": "2029-07-29T08:55:45.000Z",
+ "matchers": [
+ {
+ "isEqual": True,
+ "isRegex": True,
+ "name": "environment",
+ "value": "test",
+ }
+ ],
+ "starts_at": "2029-07-29T08:45:45.000Z",
+ "state": "present",
+ }
+ )
+ module = grafana_silence.setup_module_object()
+ mock_fetch_url.return_value = silence_deleted_resp()
+ mock_get_version.return_value = get_version_resp()
+
+ grafana_iface = grafana_silence.GrafanaSilenceInterface(module)
+ silence_id = "470b7116-8f06-4bb6-9e6c-6258aa92218e"
+ result = grafana_iface.delete_silence(silence_id)
+ mock_fetch_url.assert_called_once_with(
+ module,
+ "https://grafana.example.com/api/alertmanager/grafana/api/v2/silence/470b7116-8f06-4bb6-9e6c-6258aa92218e",
+ data=None,
+ headers={
+ "Content-Type": "application/json",
+ "Authorization": self.authorization,
+ },
+ method="DELETE",
+ )
+ self.assertEquals(result, {"message": "silence deleted"})