about summary refs log tree commit diff
diff options
context:
space:
mode:
authorKFears <kfearsoff@gmail.com>2022-10-15 21:42:48 +0400
committerKFears <kfearsoff@gmail.com>2022-10-22 23:56:15 +0400
commit5ea8f47014f9681c852214fe0281d771d00bac7e (patch)
treefad976d8e69cb91633e333ad66e28041a5bb31ff
parent9f963f36e521b36e7ac08f09c65659cb58929d98 (diff)
nixos/grafana: write more efficient tests
-rw-r--r--nixos/tests/grafana/basic.nix9
-rw-r--r--nixos/tests/grafana/default.nix9
-rw-r--r--nixos/tests/grafana/provision-contact-points/default.nix76
-rw-r--r--nixos/tests/grafana/provision-dashboards/default.nix92
-rw-r--r--nixos/tests/grafana/provision-datasources/default.nix95
-rw-r--r--nixos/tests/grafana/provision-mute-timings/default.nix71
-rw-r--r--nixos/tests/grafana/provision-notifiers.nix63
-rw-r--r--nixos/tests/grafana/provision-policies/default.nix82
-rw-r--r--nixos/tests/grafana/provision-policies/provision-contact-points.yaml9
-rw-r--r--nixos/tests/grafana/provision-rules/default.nix104
-rw-r--r--nixos/tests/grafana/provision-templates/default.nix72
-rw-r--r--nixos/tests/grafana/provision/contact-points.yaml (renamed from nixos/tests/grafana/provision-contact-points/provision-contact-points.yaml)0
-rw-r--r--nixos/tests/grafana/provision/dashboards.yaml (renamed from nixos/tests/grafana/provision-dashboards/provision-dashboards.yaml)0
-rw-r--r--nixos/tests/grafana/provision/datasources.yaml (renamed from nixos/tests/grafana/provision-datasources/provision-datasources.yaml)0
-rw-r--r--nixos/tests/grafana/provision/default.nix225
-rw-r--r--nixos/tests/grafana/provision/mute-timings.yaml (renamed from nixos/tests/grafana/provision-mute-timings/provision-mute-timings.yaml)0
-rw-r--r--nixos/tests/grafana/provision/policies.yaml (renamed from nixos/tests/grafana/provision-policies/provision-policies.yaml)0
-rw-r--r--nixos/tests/grafana/provision/rules.yaml (renamed from nixos/tests/grafana/provision-rules/provision-rules.yaml)0
-rw-r--r--nixos/tests/grafana/provision/templates.yaml (renamed from nixos/tests/grafana/provision-templates/provision-templates.yaml)0
-rw-r--r--nixos/tests/grafana/provision/test_dashboard.json (renamed from nixos/tests/grafana/provision-dashboards/test_dashboard.json)0
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