summary refs log tree commit diff
path: root/nixos/modules/services/monitoring/prometheus/default.nix
diff options
context:
space:
mode:
authorBas van Dijk <v.dijk.bas@gmail.com>2019-04-17 14:08:16 +0200
committerBas van Dijk <v.dijk.bas@gmail.com>2019-04-17 14:08:16 +0200
commit57e5b75f9cb3a1368fa1123ad426c72bc12f8e5d (patch)
tree4a151089c5126e54321d1b7b6bfec5c46929f149 /nixos/modules/services/monitoring/prometheus/default.nix
parent6ae33c9afeb4b66fd08887c06352564f6f9c9a6e (diff)
downloadnixpkgs-57e5b75f9cb3a1368fa1123ad426c72bc12f8e5d.tar
nixpkgs-57e5b75f9cb3a1368fa1123ad426c72bc12f8e5d.tar.gz
nixpkgs-57e5b75f9cb3a1368fa1123ad426c72bc12f8e5d.tar.bz2
nixpkgs-57e5b75f9cb3a1368fa1123ad426c72bc12f8e5d.tar.lz
nixpkgs-57e5b75f9cb3a1368fa1123ad426c72bc12f8e5d.tar.xz
nixpkgs-57e5b75f9cb3a1368fa1123ad426c72bc12f8e5d.tar.zst
nixpkgs-57e5b75f9cb3a1368fa1123ad426c72bc12f8e5d.zip
nixos/prometheus: filter out the _module attr in a central place
We previously filtered out the `_module` attribute in a NixOS
configuration by filtering it using the option's `apply` function.

This meant that every option that had a submodule type needed to have
this apply function. Adding this function is easy to forget thus this
mechanism is error prone.

We now recursively filter out the `_module` attributes at the place we
construct the Prometheus configuration file. Since we now do the filtering
centrally we don't have to do it per option making it less prone to errors.
Diffstat (limited to 'nixos/modules/services/monitoring/prometheus/default.nix')
-rw-r--r--nixos/modules/services/monitoring/prometheus/default.nix25
1 files changed, 5 insertions, 20 deletions
diff --git a/nixos/modules/services/monitoring/prometheus/default.nix b/nixos/modules/services/monitoring/prometheus/default.nix
index e7ac12c07d3..ec410cb14eb 100644
--- a/nixos/modules/services/monitoring/prometheus/default.nix
+++ b/nixos/modules/services/monitoring/prometheus/default.nix
@@ -22,9 +22,6 @@ let
   workingDir  = stateDirBase + stateDir;
   workingDir2 = stateDirBase + cfg2.stateDir;
 
-  # Get a submodule without any embedded metadata:
-  _filter = x: filterAttrs (k: v: k != "_module") x;
-
   # a wrapper that verifies that the configuration is valid
   promtoolCheck = what: name: file: pkgs.runCommand "${name}-${what}-checked"
     { buildInputs = [ cfg.package ]; } ''
@@ -50,11 +47,11 @@ let
 
   # This becomes the main config file for Prometheus 1
   promConfig = {
-    global = cfg.globalConfig;
+    global = filterValidPrometheus cfg.globalConfig;
     rule_files = map (promtoolCheck "check-rules" "rules") (cfg.ruleFiles ++ [
       (pkgs.writeText "prometheus.rules" (concatStringsSep "\n" cfg.rules))
     ]);
-    scrape_configs = filterEmpty cfg.scrapeConfigs;
+    scrape_configs = filterValidPrometheus cfg.scrapeConfigs;
   };
 
   generatedPrometheusYml = writePrettyJSON "prometheus.yml" promConfig;
@@ -77,11 +74,11 @@ let
 
   # This becomes the main config file for Prometheus 2
   promConfig2 = {
-    global = cfg2.globalConfig;
+    global = filterValidPrometheus cfg2.globalConfig;
     rule_files = map (prom2toolCheck "check rules" "rules") (cfg2.ruleFiles ++ [
       (pkgs.writeText "prometheus.rules" (concatStringsSep "\n" cfg2.rules))
     ]);
-    scrape_configs = filterEmpty cfg2.scrapeConfigs;
+    scrape_configs = filterValidPrometheus cfg2.scrapeConfigs;
     alerting = optionalAttrs (cfg2.alertmanagerURL != []) {
       alertmanagers = [{
         static_configs = [{
@@ -108,7 +105,7 @@ let
   ] ++
   optional (cfg2.webExternalUrl != null) "--web.external-url=${cfg2.webExternalUrl}";
 
-  filterEmpty = filterAttrsListRecursive (_n: v: !(v == null || v == [] || v == {}));
+  filterValidPrometheus = filterAttrsListRecursive (n: v: !(n == "_module" || v == null || v == [] || v == {}));
   filterAttrsListRecursive = pred: x:
     if isAttrs x then
       listToAttrs (
@@ -247,7 +244,6 @@ let
           };
         });
         default = null;
-        apply = x: mapNullable _filter x;
         description = ''
           Optional http login credentials for metrics scraping.
         '';
@@ -255,7 +251,6 @@ let
       tls_config = mkOption {
         type = types.nullOr promTypes.tls_config;
         default = null;
-        apply = x: mapNullable _filter x;
         description = ''
           Configures the scrape request's TLS settings.
         '';
@@ -263,7 +258,6 @@ let
       dns_sd_configs = mkOption {
         type = types.listOf promTypes.dns_sd_config;
         default = [];
-        apply = x: map _filter x;
         description = ''
           List of DNS service discovery configurations.
         '';
@@ -271,7 +265,6 @@ let
       consul_sd_configs = mkOption {
         type = types.listOf promTypes.consul_sd_config;
         default = [];
-        apply = x: map _filter x;
         description = ''
           List of Consul service discovery configurations.
         '';
@@ -279,7 +272,6 @@ let
       file_sd_configs = mkOption {
         type = types.listOf promTypes.file_sd_config;
         default = [];
-        apply = x: map _filter x;
         description = ''
           List of file service discovery configurations.
         '';
@@ -287,7 +279,6 @@ let
       static_configs = mkOption {
         type = types.listOf promTypes.static_config;
         default = [];
-        apply = x: map _filter x;
         description = ''
           List of labeled target groups for this job.
         '';
@@ -295,7 +286,6 @@ let
       ec2_sd_configs = mkOption {
         type = types.listOf promTypes.ec2_sd_config;
         default = [];
-        apply = x: map _filter x;
         description = ''
           List of EC2 service discovery configurations.
         '';
@@ -303,7 +293,6 @@ let
       relabel_configs = mkOption {
         type = types.listOf promTypes.relabel_config;
         default = [];
-        apply = x: map _filter x;
         description = ''
           List of relabel configurations.
         '';
@@ -662,7 +651,6 @@ in {
       globalConfig = mkOption {
         type = promTypes.globalConfig;
         default = {};
-        apply = _filter;
         description = ''
           Parameters that are valid in all  configuration contexts. They
           also serve as defaults for other configuration sections
@@ -688,7 +676,6 @@ in {
       scrapeConfigs = mkOption {
         type = types.listOf promTypes.scrape_config;
         default = [];
-        apply = x: map _filter x;
         description = ''
           A list of scrape configurations.
         '';
@@ -786,7 +773,6 @@ in {
       globalConfig = mkOption {
         type = promTypes.globalConfig;
         default = {};
-        apply = _filter;
         description = ''
           Parameters that are valid in all  configuration contexts. They
           also serve as defaults for other configuration sections
@@ -812,7 +798,6 @@ in {
       scrapeConfigs = mkOption {
         type = types.listOf promTypes.scrape_config;
         default = [];
-        apply = x: map _filter x;
         description = ''
           A list of scrape configurations.
         '';