diff options
author | KFears <kfearsoff@gmail.com> | 2022-10-15 21:42:48 +0400 |
---|---|---|
committer | KFears <kfearsoff@gmail.com> | 2022-10-22 23:56:15 +0400 |
commit | 5ea8f47014f9681c852214fe0281d771d00bac7e (patch) | |
tree | fad976d8e69cb91633e333ad66e28041a5bb31ff | |
parent | 9f963f36e521b36e7ac08f09c65659cb58929d98 (diff) |
nixos/grafana: write more efficient tests
20 files changed, 229 insertions, 678 deletions
diff --git a/nixos/tests/grafana/basic.nix b/nixos/tests/grafana/basic.nix index f674026b821e2..2c0e2c2a57fca 100644 --- a/nixos/tests/grafana/basic.nix +++ b/nixos/tests/grafana/basic.nix @@ -19,6 +19,8 @@ let }; extraNodeConfs = { + sqlite = {}; + declarativePlugins = { services.grafana.declarativePlugins = [ pkgs.grafanaPlugins.grafana-clock-panel ]; }; @@ -54,12 +56,7 @@ let }; }; - nodes = builtins.listToAttrs (map (dbName: - nameValuePair dbName (mkMerge [ - baseGrafanaConf - (extraNodeConfs.${dbName} or {}) - ])) [ "sqlite" "declarativePlugins" "postgresql" "mysql" ]); - + nodes = builtins.mapAttrs (_: val: mkMerge [ val baseGrafanaConf ]) extraNodeConfs; in { name = "grafana-basic"; diff --git a/nixos/tests/grafana/default.nix b/nixos/tests/grafana/default.nix index d08cbb67ce851..9c26225718001 100644 --- a/nixos/tests/grafana/default.nix +++ b/nixos/tests/grafana/default.nix @@ -5,12 +5,5 @@ { basic = import ./basic.nix { inherit system pkgs; }; - provision-datasources = import ./provision-datasources { inherit system pkgs; }; - provision-dashboards = import ./provision-dashboards { inherit system pkgs; }; - provision-notifiers = import ./provision-notifiers.nix { inherit system pkgs; }; - provision-rules = import ./provision-rules { inherit system pkgs; }; - provision-contact-points = import ./provision-contact-points { inherit system pkgs; }; - provision-policies = import ./provision-policies { inherit system pkgs; }; - provision-templates = import ./provision-templates { inherit system pkgs; }; - provision-mute-timings = import ./provision-mute-timings { inherit system pkgs; }; + provision = import ./provision { inherit system pkgs; }; } diff --git a/nixos/tests/grafana/provision-contact-points/default.nix b/nixos/tests/grafana/provision-contact-points/default.nix deleted file mode 100644 index 4e2bbfa91a680..0000000000000 --- a/nixos/tests/grafana/provision-contact-points/default.nix +++ /dev/null @@ -1,76 +0,0 @@ -args@{ pkgs, ... }: - -(import ../../make-test-python.nix ({ lib, pkgs, ... }: - -let - inherit (lib) mkMerge nameValuePair maintainers; - - baseGrafanaConf = { - services.grafana = { - enable = true; - addr = "localhost"; - analytics.reporting.enable = false; - domain = "localhost"; - security = { - adminUser = "testadmin"; - adminPassword = "snakeoilpwd"; - }; - provision.enable = true; - }; - }; - - extraNodeConfs = { - provisionContactPointsNix = { - services.grafana.provision = { - alerting.contactPoints.settings = { - contactPoints = [{ - name = "Test Contact Point"; - receivers = [{ - uid = "test_contact_point"; - type = "prometheus-alertmanager"; - settings.url = "http://localhost:9000"; - }]; - }]; - }; - }; - }; - - provisionContactPointsYaml = { - services.grafana.provision.alerting.contactPoints.path = ./provision-contact-points.yaml; - }; - }; - - nodes = builtins.listToAttrs (map (provisionType: - nameValuePair provisionType (mkMerge [ - baseGrafanaConf - (extraNodeConfs.${provisionType} or {}) - ])) [ "provisionContactPointsNix" "provisionContactPointsYaml" ]); - -in { - name = "grafana-provision-contact-points"; - - meta = with maintainers; { - maintainers = [ kfears willibutz ]; - }; - - inherit nodes; - - testScript = '' - start_all() - with subtest("Successful contact point provision with Nix"): - provisionContactPointsNix.wait_for_unit("grafana.service") - provisionContactPointsNix.wait_for_open_port(3000) - provisionContactPointsNix.succeed( - "curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/v1/provisioning/contact-points | grep Test\ Contact\ Point" - ) - provisionContactPointsNix.shutdown() - - with subtest("Successful contact point provision with YAML"): - provisionContactPointsYaml.wait_for_unit("grafana.service") - provisionContactPointsYaml.wait_for_open_port(3000) - provisionContactPointsYaml.succeed( - "curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/v1/provisioning/contact-points | grep Test\ Contact\ Point" - ) - provisionContactPointsYaml.shutdown() - ''; -})) args diff --git a/nixos/tests/grafana/provision-dashboards/default.nix b/nixos/tests/grafana/provision-dashboards/default.nix deleted file mode 100644 index a0c64c8810d32..0000000000000 --- a/nixos/tests/grafana/provision-dashboards/default.nix +++ /dev/null @@ -1,92 +0,0 @@ -args@{ pkgs, ... }: - -(import ../../make-test-python.nix ({ lib, pkgs, ... }: - -let - inherit (lib) mkMerge nameValuePair maintainers; - - baseGrafanaConf = { - services.grafana = { - enable = true; - addr = "localhost"; - analytics.reporting.enable = false; - domain = "localhost"; - security = { - adminUser = "testadmin"; - adminPassword = "snakeoilpwd"; - }; - provision.enable = true; - }; - - systemd.tmpfiles.rules = [ - "L /var/lib/grafana/dashboards/test.json 0700 grafana grafana - ${pkgs.writeText "test.json" (builtins.readFile ./test_dashboard.json)}" - ]; - }; - - extraNodeConfs = { - provisionDashboardOld = { - services.grafana.provision = { - dashboards = [{ options.path = "/var/lib/grafana/dashboards"; }]; - }; - }; - - provisionDashboardNix = { - services.grafana.provision = { - dashboards.settings = { - apiVersion = 1; - providers = [{ - name = "default"; - options.path = "/var/lib/grafana/dashboards"; - }]; - }; - }; - }; - - provisionDashboardYaml = { - services.grafana.provision.dashboards.path = ./provision-dashboards.yaml; - }; - }; - - nodes = builtins.listToAttrs (map (provisionType: - nameValuePair provisionType (mkMerge [ - baseGrafanaConf - (extraNodeConfs.${provisionType} or {}) - ])) [ "provisionDashboardOld" "provisionDashboardNix" "provisionDashboardYaml" ]); - -in { - name = "grafana-provision-dashboards"; - - meta = with maintainers; { - maintainers = [ kfears willibutz ]; - }; - - inherit nodes; - - testScript = '' - start_all() - - with subtest("Successful dashboard provision with Nix (old format)"): - provisionDashboardOld.wait_for_unit("grafana.service") - provisionDashboardOld.wait_for_open_port(3000) - provisionDashboardOld.succeed( - "curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/dashboards/uid/test_dashboard | grep Test\ Dashboard" - ) - provisionDashboardOld.shutdown() - - with subtest("Successful dashboard provision with Nix (new format)"): - provisionDashboardNix.wait_for_unit("grafana.service") - provisionDashboardNix.wait_for_open_port(3000) - provisionDashboardNix.succeed( - "curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/dashboards/uid/test_dashboard | grep Test\ Dashboard" - ) - provisionDashboardNix.shutdown() - - with subtest("Successful dashboard provision with YAML"): - provisionDashboardYaml.wait_for_unit("grafana.service") - provisionDashboardYaml.wait_for_open_port(3000) - provisionDashboardYaml.succeed( - "curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/dashboards/uid/test_dashboard | grep Test\ Dashboard" - ) - provisionDashboardYaml.shutdown() - ''; -})) args diff --git a/nixos/tests/grafana/provision-datasources/default.nix b/nixos/tests/grafana/provision-datasources/default.nix deleted file mode 100644 index 83d5c56078383..0000000000000 --- a/nixos/tests/grafana/provision-datasources/default.nix +++ /dev/null @@ -1,95 +0,0 @@ -args@{ pkgs, ... }: - -(import ../../make-test-python.nix ({ lib, pkgs, ... }: - -let - inherit (lib) mkMerge nameValuePair maintainers; - - baseGrafanaConf = { - services.grafana = { - enable = true; - addr = "localhost"; - analytics.reporting.enable = false; - domain = "localhost"; - security = { - adminUser = "testadmin"; - adminPassword = "snakeoilpwd"; - }; - provision.enable = true; - }; - }; - - extraNodeConfs = { - provisionDatasourceOld = { - services.grafana.provision = { - datasources = [{ - name = "Test Datasource"; - type = "testdata"; - access = "proxy"; - uid = "test_datasource"; - }]; - }; - }; - - provisionDatasourceNix = { - services.grafana.provision = { - datasources.settings = { - apiVersion = 1; - datasources = [{ - name = "Test Datasource"; - type = "testdata"; - access = "proxy"; - uid = "test_datasource"; - }]; - }; - }; - }; - - provisionDatasourceYaml = { - services.grafana.provision.datasources.path = ./provision-datasources.yaml; - }; - }; - - nodes = builtins.listToAttrs (map (provisionType: - nameValuePair provisionType (mkMerge [ - baseGrafanaConf - (extraNodeConfs.${provisionType} or {}) - ])) [ "provisionDatasourceOld" "provisionDatasourceNix" "provisionDatasourceYaml" ]); - -in { - name = "grafana-provision-datasources"; - - meta = with maintainers; { - maintainers = [ kfears willibutz ]; - }; - - inherit nodes; - - testScript = '' - start_all() - - with subtest("Successful datasource provision with Nix (old format)"): - provisionDatasourceOld.wait_for_unit("grafana.service") - provisionDatasourceOld.wait_for_open_port(3000) - provisionDatasourceOld.succeed( - "curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/datasources/uid/test_datasource | grep Test\ Datasource" - ) - provisionDatasourceOld.shutdown() - - with subtest("Successful datasource provision with Nix (new format)"): - provisionDatasourceNix.wait_for_unit("grafana.service") - provisionDatasourceNix.wait_for_open_port(3000) - provisionDatasourceNix.succeed( - "curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/datasources/uid/test_datasource | grep Test\ Datasource" - ) - provisionDatasourceNix.shutdown() - - with subtest("Successful datasource provision with YAML"): - provisionDatasourceYaml.wait_for_unit("grafana.service") - provisionDatasourceYaml.wait_for_open_port(3000) - provisionDatasourceYaml.succeed( - "curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/datasources/uid/test_datasource | grep Test\ Datasource" - ) - provisionDatasourceYaml.shutdown() - ''; -})) args diff --git a/nixos/tests/grafana/provision-mute-timings/default.nix b/nixos/tests/grafana/provision-mute-timings/default.nix deleted file mode 100644 index 969dd7138b912..0000000000000 --- a/nixos/tests/grafana/provision-mute-timings/default.nix +++ /dev/null @@ -1,71 +0,0 @@ -args@{ pkgs, ... }: - -(import ../../make-test-python.nix ({ lib, pkgs, ... }: - -let - inherit (lib) mkMerge nameValuePair maintainers; - - baseGrafanaConf = { - services.grafana = { - enable = true; - addr = "localhost"; - analytics.reporting.enable = false; - domain = "localhost"; - security = { - adminUser = "testadmin"; - adminPassword = "snakeoilpwd"; - }; - provision.enable = true; - }; - }; - - extraNodeConfs = { - provisionMuteTimingsNix = { - services.grafana.provision = { - alerting.muteTimings.settings = { - muteTimes = [{ - name = "Test Mute Timing"; - }]; - }; - }; - }; - - provisionMuteTimingsYaml = { - services.grafana.provision.alerting.muteTimings.path = ./provision-mute-timings.yaml; - }; - }; - - nodes = builtins.listToAttrs (map (provisionType: - nameValuePair provisionType (mkMerge [ - baseGrafanaConf - (extraNodeConfs.${provisionType} or {}) - ])) [ "provisionMuteTimingsNix" "provisionMuteTimingsYaml" ]); - -in { - name = "grafana-provision-mute-timings"; - - meta = with maintainers; { - maintainers = [ kfears willibutz ]; - }; - - inherit nodes; - - testScript = '' - start_all() - with subtest("Successful mute timings provision with Nix"): - provisionMuteTimingsNix.wait_for_unit("grafana.service") - provisionMuteTimingsNix.wait_for_open_port(3000) - provisionMuteTimingsNix.succeed( - "curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/v1/provisioning/mute-timings | grep Test\ Mute\ Timing" - ) - provisionMuteTimingsNix.shutdown() - - with subtest("Successful mute timings provision with YAML"): - provisionMuteTimingsYaml.wait_for_unit("grafana.service") - provisionMuteTimingsYaml.wait_for_open_port(3000) - provisionMuteTimingsYaml.succeed( - "curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/v1/provisioning/mute-timings | grep Test\ Mute\ Timing" - ) - provisionMuteTimingsYaml.shutdown() - ''; -})) args diff --git a/nixos/tests/grafana/provision-notifiers.nix b/nixos/tests/grafana/provision-notifiers.nix deleted file mode 100644 index 2419a458c004d..0000000000000 --- a/nixos/tests/grafana/provision-notifiers.nix +++ /dev/null @@ -1,63 +0,0 @@ -args@{ pkgs, ... }: - -(import ../make-test-python.nix ({ lib, pkgs, ... }: - -let - inherit (lib) mkMerge nameValuePair maintainers; - - baseGrafanaConf = { - services.grafana = { - enable = true; - addr = "localhost"; - analytics.reporting.enable = false; - domain = "localhost"; - security = { - adminUser = "testadmin"; - adminPassword = "snakeoilpwd"; - }; - provision.enable = true; - }; - }; - - extraNodeConfs = { - provisionNotifiers = { - services.grafana.provision = { - notifiers = [{ - uid = "test_notifiers"; - name = "Test Notifiers"; - type = "email"; - settings = { - singleEmail = true; - addresses = "test@test.com"; - }; - }]; - }; - }; - }; - - nodes = builtins.listToAttrs (map (provisionType: - nameValuePair provisionType (mkMerge [ - baseGrafanaConf - (extraNodeConfs.${provisionType} or {}) - ])) [ "provisionNotifiers" ]); - -in { - name = "grafana-provision-notifiers"; - - meta = with maintainers; { - maintainers = [ kfears willibutz ]; - }; - - inherit nodes; - - testScript = '' - start_all() - with subtest("Successful notifiers provision with Nix"): - provisionNotifiers.wait_for_unit("grafana.service") - provisionNotifiers.wait_for_open_port(3000) - provisionNotifiers.succeed( - "curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/alert-notifications/uid/test_notifiers | grep Test\ Notifiers" - ) - provisionNotifiers.shutdown() - ''; -})) args diff --git a/nixos/tests/grafana/provision-policies/default.nix b/nixos/tests/grafana/provision-policies/default.nix deleted file mode 100644 index 1dff6936e76c9..0000000000000 --- a/nixos/tests/grafana/provision-policies/default.nix +++ /dev/null @@ -1,82 +0,0 @@ -args@{ pkgs, ... }: - -(import ../../make-test-python.nix ({ lib, pkgs, ... }: - -let - inherit (lib) mkMerge nameValuePair maintainers; - - baseGrafanaConf = { - services.grafana = { - enable = true; - addr = "localhost"; - analytics.reporting.enable = false; - domain = "localhost"; - security = { - adminUser = "testadmin"; - adminPassword = "snakeoilpwd"; - }; - provision.enable = true; - }; - }; - - extraNodeConfs = { - provisionPoliciesNix = { - services.grafana.provision = { - alerting.policies.settings = { - policies = [{ - receiver = "Test Contact Point"; - }]; - }; - alerting.contactPoints.settings = { - contactPoints = [{ - name = "Test Contact Point"; - receivers = [{ - uid = "test_contact_point"; - type = "prometheus-alertmanager"; - settings.url = "http://localhost:9000"; - }]; - }]; - }; - }; - }; - - provisionPoliciesYaml = { - services.grafana.provision.alerting.policies.path = ./provision-policies.yaml; - services.grafana.provision.alerting.contactPoints.path = ./provision-contact-points.yaml; - }; - }; - - nodes = builtins.listToAttrs (map (provisionType: - nameValuePair provisionType (mkMerge [ - baseGrafanaConf - (extraNodeConfs.${provisionType} or {}) - ])) [ "provisionPoliciesNix" "provisionPoliciesYaml" ]); - -in { - name = "grafana-provision-policies"; - - meta = with maintainers; { - maintainers = [ kfears willibutz ]; - }; - - inherit nodes; - - testScript = '' - start_all() - with subtest("Successful policy provision with Nix"): - provisionPoliciesNix.wait_for_unit("grafana.service") - provisionPoliciesNix.wait_for_open_port(3000) - provisionPoliciesNix.succeed( - "curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/v1/provisioning/contact-points | grep Test\ Contact\ Point" - ) - provisionPoliciesNix.shutdown() - - with subtest("Successful policy provision with YAML"): - provisionPoliciesYaml.wait_for_unit("grafana.service") - provisionPoliciesYaml.wait_for_open_port(3000) - provisionPoliciesYaml.succeed( - "curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/v1/provisioning/contact-points | grep Test\ Contact\ Point" - ) - provisionPoliciesYaml.shutdown() - ''; -})) args diff --git a/nixos/tests/grafana/provision-policies/provision-contact-points.yaml b/nixos/tests/grafana/provision-policies/provision-contact-points.yaml deleted file mode 100644 index 2a5f14e75e2db..0000000000000 --- a/nixos/tests/grafana/provision-policies/provision-contact-points.yaml +++ /dev/null @@ -1,9 +0,0 @@ -apiVersion: 1 - -contactPoints: - - name: "Test Contact Point" - receivers: - - uid: "test_contact_point" - type: prometheus-alertmanager - settings: - url: http://localhost:9000 diff --git a/nixos/tests/grafana/provision-rules/default.nix b/nixos/tests/grafana/provision-rules/default.nix deleted file mode 100644 index 63b716c5770dc..0000000000000 --- a/nixos/tests/grafana/provision-rules/default.nix +++ /dev/null @@ -1,104 +0,0 @@ -args@{ pkgs, ... }: - -(import ../../make-test-python.nix ({ lib, pkgs, ... }: - -let - inherit (lib) mkMerge nameValuePair maintainers; - - baseGrafanaConf = { - services.grafana = { - enable = true; - addr = "localhost"; - analytics.reporting.enable = false; - domain = "localhost"; - security = { - adminUser = "testadmin"; - adminPassword = "snakeoilpwd"; - }; - provision.enable = true; - }; - }; - - extraNodeConfs = { - provisionRulesNix = { - services.grafana.provision = { - alerting.rules.settings = { - groups = [{ - name = "test_rule_group"; - folder = "test_folder"; - interval = "60s"; - rules = [{ - uid = "test_rule"; - title = "Test Rule"; - condition = "A"; - data = [{ - refId = "A"; - datasourceUid = "-100"; - model = { - conditions = [{ - evaluator = { - params = [ 3 ]; - type = "git"; - }; - operator.type = "and"; - query.params = [ "A" ]; - reducer.type = "last"; - type = "query"; - }]; - datasource = { - type = "__expr__"; - uid = "-100"; - }; - expression = "1==0"; - intervalMs = 1000; - maxDataPoints = 43200; - refId = "A"; - type = "math"; - }; - }]; - for = "60s"; - }]; - }]; - }; - }; - }; - - provisionRulesYaml = { - services.grafana.provision.alerting.rules.path = ./provision-rules.yaml; - }; - }; - - nodes = builtins.listToAttrs (map (provisionType: - nameValuePair provisionType (mkMerge [ - baseGrafanaConf - (extraNodeConfs.${provisionType} or {}) - ])) [ "provisionRulesNix" "provisionRulesYaml" ]); - -in { - name = "grafana-provision-rules"; - - meta = with maintainers; { - maintainers = [ kfears willibutz ]; - }; - - inherit nodes; - - testScript = '' - start_all() - with subtest("Successful rule provision with Nix"): - provisionRulesNix.wait_for_unit("grafana.service") - provisionRulesNix.wait_for_open_port(3000) - provisionRulesNix.succeed( - "curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/v1/provisioning/alert-rules/test_rule | grep Test\ Rule" - ) - provisionRulesNix.shutdown() - - with subtest("Successful rule provision with YAML"): - provisionRulesYaml.wait_for_unit("grafana.service") - provisionRulesYaml.wait_for_open_port(3000) - provisionRulesYaml.succeed( - "curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/v1/provisioning/alert-rules/test_rule | grep Test\ Rule" - ) - provisionRulesYaml.shutdown() - ''; -})) args diff --git a/nixos/tests/grafana/provision-templates/default.nix b/nixos/tests/grafana/provision-templates/default.nix deleted file mode 100644 index 82ca959e03f76..0000000000000 --- a/nixos/tests/grafana/provision-templates/default.nix +++ /dev/null @@ -1,72 +0,0 @@ -args@{ pkgs, ... }: - -(import ../../make-test-python.nix ({ lib, pkgs, ... }: - -let - inherit (lib) mkMerge nameValuePair maintainers; - - baseGrafanaConf = { - services.grafana = { - enable = true; - addr = "localhost"; - analytics.reporting.enable = false; - domain = "localhost"; - security = { - adminUser = "testadmin"; - adminPassword = "snakeoilpwd"; - }; - provision.enable = true; - }; - }; - - extraNodeConfs = { - provisionTemplatesNix = { - services.grafana.provision = { - alerting.templates.settings = { - templates = [{ - name = "Test Template"; - template = "Test message"; - }]; - }; - }; - }; - - provisionTemplatesYaml = { - services.grafana.provision.alerting.templates.path = ./provision-templates.yaml; - }; - }; - - nodes = builtins.listToAttrs (map (provisionType: - nameValuePair provisionType (mkMerge [ - baseGrafanaConf - (extraNodeConfs.${provisionType} or {}) - ])) [ "provisionTemplatesNix" "provisionTemplatesYaml" ]); - -in { - name = "grafana-provision-rules"; - - meta = with maintainers; { - maintainers = [ kfears willibutz ]; - }; - - inherit nodes; - - testScript = '' - start_all() - with subtest("Successful template provision with Nix"): - provisionTemplatesNix.wait_for_unit("grafana.service") - provisionTemplatesNix.wait_for_open_port(3000) - provisionTemplatesNix.succeed( - "curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/v1/provisioning/templates | grep Test\ Template" - ) - provisionTemplatesNix.shutdown() - - with subtest("Successful template provision with YAML"): - provisionTemplatesYaml.wait_for_unit("grafana.service") - provisionTemplatesYaml.wait_for_open_port(3000) - provisionTemplatesYaml.succeed( - "curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/v1/provisioning/templates | grep Test\ Template" - ) - provisionTemplatesYaml.shutdown() - ''; -})) args diff --git a/nixos/tests/grafana/provision-contact-points/provision-contact-points.yaml b/nixos/tests/grafana/provision/contact-points.yaml index 2a5f14e75e2db..2a5f14e75e2db 100644 --- a/nixos/tests/grafana/provision-contact-points/provision-contact-points.yaml +++ b/nixos/tests/grafana/provision/contact-points.yaml diff --git a/nixos/tests/grafana/provision-dashboards/provision-dashboards.yaml b/nixos/tests/grafana/provision/dashboards.yaml index dc83fe6b892dc..dc83fe6b892dc 100644 --- a/nixos/tests/grafana/provision-dashboards/provision-dashboards.yaml +++ b/nixos/tests/grafana/provision/dashboards.yaml diff --git a/nixos/tests/grafana/provision-datasources/provision-datasources.yaml b/nixos/tests/grafana/provision/datasources.yaml index ccf9481db7f3f..ccf9481db7f3f 100644 --- a/nixos/tests/grafana/provision-datasources/provision-datasources.yaml +++ b/nixos/tests/grafana/provision/datasources.yaml diff --git a/nixos/tests/grafana/provision/default.nix b/nixos/tests/grafana/provision/default.nix new file mode 100644 index 0000000000000..b2b00002347e9 --- /dev/null +++ b/nixos/tests/grafana/provision/default.nix @@ -0,0 +1,225 @@ +args@{ pkgs, ... }: + +(import ../../make-test-python.nix ({ lib, pkgs, ... }: + +let + inherit (lib) mkMerge nameValuePair maintainers; + + baseGrafanaConf = { + services.grafana = { + enable = true; + addr = "localhost"; + analytics.reporting.enable = false; + domain = "localhost"; + security = { + adminUser = "testadmin"; + adminPassword = "snakeoilpwd"; + }; + provision.enable = true; + }; + + systemd.tmpfiles.rules = [ + "L /var/lib/grafana/dashboards/test.json 0700 grafana grafana - ${pkgs.writeText "test.json" (builtins.readFile ./test_dashboard.json)}" + ]; + }; + + extraNodeConfs = { + provisionOld = { + services.grafana.provision = { + datasources = [{ + name = "Test Datasource"; + type = "testdata"; + access = "proxy"; + uid = "test_datasource"; + }]; + + dashboards = [{ options.path = "/var/lib/grafana/dashboards"; }]; + + notifiers = [{ + uid = "test_notifiers"; + name = "Test Notifiers"; + type = "email"; + settings = { + singleEmail = true; + addresses = "test@test.com"; + }; + }]; + }; + }; + + provisionNix = { + services.grafana.provision = { + datasources.settings = { + apiVersion = 1; + datasources = [{ + name = "Test Datasource"; + type = "testdata"; + access = "proxy"; + uid = "test_datasource"; + }]; + }; + + dashboards.settings = { + apiVersion = 1; + providers = [{ + name = "default"; + options.path = "/var/lib/grafana/dashboards"; + }]; + }; + + alerting = { + rules.settings = { + groups = [{ + name = "test_rule_group"; + folder = "test_folder"; + interval = "60s"; + rules = [{ + uid = "test_rule"; + title = "Test Rule"; + condition = "A"; + data = [{ + refId = "A"; + datasourceUid = "-100"; + model = { + conditions = [{ + evaluator = { + params = [ 3 ]; + type = "git"; + }; + operator.type = "and"; + query.params = [ "A" ]; + reducer.type = "last"; + type = "query"; + }]; + datasource = { + type = "__expr__"; + uid = "-100"; + }; + expression = "1==0"; + intervalMs = 1000; + maxDataPoints = 43200; + refId = "A"; + type = "math"; + }; + }]; + for = "60s"; + }]; + }]; + }; + + contactPoints.settings = { + contactPoints = [{ + name = "Test Contact Point"; + receivers = [{ + uid = "test_contact_point"; + type = "prometheus-alertmanager"; + settings.url = "http://localhost:9000"; + }]; + }]; + }; + + policies.settings = { + policies = [{ + receiver = "Test Contact Point"; + }]; + }; + + templates.settings = { + templates = [{ + name = "Test Template"; + template = "Test message"; + }]; + }; + + muteTimings.settings = { + muteTimes = [{ + name = "Test Mute Timing"; + }]; + }; + }; + }; + }; + + provisionYaml = { + services.grafana.provision = { + datasources.path = ./datasources.yaml; + dashboards.path = ./dashboards.yaml; + alerting = { + rules.path = ./rules.yaml; + contactPoints.path = ./contact-points.yaml; + policies.path = ./policies.yaml; + templates.path = ./templates.yaml; + muteTimings.path = ./mute-timings.yaml; + }; + }; + }; + }; + + nodes = builtins.mapAttrs (_: val: mkMerge [ val baseGrafanaConf ]) extraNodeConfs; +in { + name = "grafana-provision"; + + meta = with maintainers; { + maintainers = [ kfears willibutz ]; + }; + + inherit nodes; + + testScript = '' + start_all() + + nodeOld = ("Nix (old format)", provisionOld) + nodeNix = ("Nix (new format)", provisionNix) + nodeYaml = ("Nix (YAML)", provisionYaml) + + for nodeInfo in [nodeOld, nodeNix, nodeYaml]: + with subtest(f"Should start provision node: {nodeInfo[0]}"): + nodeInfo[1].wait_for_unit("grafana.service") + nodeInfo[1].wait_for_open_port(3000) + + with subtest(f"Successful datasource provision with {nodeInfo[0]}"): + nodeInfo[1].succeed( + "curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/datasources/uid/test_datasource | grep Test\ Datasource" + ) + + with subtest(f"Successful dashboard provision with {nodeInfo[0]}"): + nodeInfo[1].succeed( + "curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/dashboards/uid/test_dashboard | grep Test\ Dashboard" + ) + + + + with subtest(f"Successful notifiers provision with {nodeOld[0]}"): + nodeOld[1].succeed( + "curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/alert-notifications/uid/test_notifiers | grep Test\ Notifiers" + ) + + + + for nodeInfo in [nodeNix, nodeYaml]: + with subtest(f"Successful rule provision with {nodeInfo[0]}"): + nodeInfo[1].succeed( + "curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/v1/provisioning/alert-rules/test_rule | grep Test\ Rule" + ) + + with subtest(f"Successful contact point provision with {nodeInfo[0]}"): + nodeInfo[1].succeed( + "curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/v1/provisioning/contact-points | grep Test\ Contact\ Point" + ) + + with subtest(f"Successful policy provision with {nodeInfo[0]}"): + nodeInfo[1].succeed( + "curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/v1/provisioning/policies | grep Test\ Contact\ Point" + ) + + with subtest(f"Successful template provision with {nodeInfo[0]}"): + nodeInfo[1].succeed( + "curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/v1/provisioning/templates | grep Test\ Template" + ) + + with subtest("Successful mute timings provision with {nodeInfo[0]}"): + nodeInfo[1].succeed( + "curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/v1/provisioning/mute-timings | grep Test\ Mute\ Timing" + ) + ''; +})) args diff --git a/nixos/tests/grafana/provision-mute-timings/provision-mute-timings.yaml b/nixos/tests/grafana/provision/mute-timings.yaml index 1f47f7c18f0c9..1f47f7c18f0c9 100644 --- a/nixos/tests/grafana/provision-mute-timings/provision-mute-timings.yaml +++ b/nixos/tests/grafana/provision/mute-timings.yaml diff --git a/nixos/tests/grafana/provision-policies/provision-policies.yaml b/nixos/tests/grafana/provision/policies.yaml index eb31126c4ba5c..eb31126c4ba5c 100644 --- a/nixos/tests/grafana/provision-policies/provision-policies.yaml +++ b/nixos/tests/grafana/provision/policies.yaml diff --git a/nixos/tests/grafana/provision-rules/provision-rules.yaml b/nixos/tests/grafana/provision/rules.yaml index 946539c8cb699..946539c8cb699 100644 --- a/nixos/tests/grafana/provision-rules/provision-rules.yaml +++ b/nixos/tests/grafana/provision/rules.yaml diff --git a/nixos/tests/grafana/provision-templates/provision-templates.yaml b/nixos/tests/grafana/provision/templates.yaml index 09df247b34513..09df247b34513 100644 --- a/nixos/tests/grafana/provision-templates/provision-templates.yaml +++ b/nixos/tests/grafana/provision/templates.yaml diff --git a/nixos/tests/grafana/provision-dashboards/test_dashboard.json b/nixos/tests/grafana/provision/test_dashboard.json index 6e7a5b37f22b8..6e7a5b37f22b8 100644 --- a/nixos/tests/grafana/provision-dashboards/test_dashboard.json +++ b/nixos/tests/grafana/provision/test_dashboard.json |