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:49:09 +0200
committerBas van Dijk <v.dijk.bas@gmail.com>2019-04-17 14:49:09 +0200
commit55ef5d424636a122dc98f889d160d2d98571968b (patch)
tree167af5c57cd91a2a3948a3f28ccdcdc0c596dec5 /nixos/modules/services/monitoring/prometheus/default.nix
parent57e5b75f9cb3a1368fa1123ad426c72bc12f8e5d (diff)
downloadnixpkgs-55ef5d424636a122dc98f889d160d2d98571968b.tar
nixpkgs-55ef5d424636a122dc98f889d160d2d98571968b.tar.gz
nixpkgs-55ef5d424636a122dc98f889d160d2d98571968b.tar.bz2
nixpkgs-55ef5d424636a122dc98f889d160d2d98571968b.tar.lz
nixpkgs-55ef5d424636a122dc98f889d160d2d98571968b.tar.xz
nixpkgs-55ef5d424636a122dc98f889d160d2d98571968b.tar.zst
nixpkgs-55ef5d424636a122dc98f889d160d2d98571968b.zip
nixos/prometheus: set optional attributes to type types.nullOr
This makes sure that when a user hasn't set a Prometheus option it
won't show up in the prometheus.yml configuration file. This results
in smaller and easier to understand configuration files.
Diffstat (limited to 'nixos/modules/services/monitoring/prometheus/default.nix')
-rw-r--r--nixos/modules/services/monitoring/prometheus/default.nix99
1 files changed, 50 insertions, 49 deletions
diff --git a/nixos/modules/services/monitoring/prometheus/default.nix b/nixos/modules/services/monitoring/prometheus/default.nix
index ec410cb14eb..1679ff80452 100644
--- a/nixos/modules/services/monitoring/prometheus/default.nix
+++ b/nixos/modules/services/monitoring/prometheus/default.nix
@@ -105,7 +105,7 @@ let
   ] ++
   optional (cfg2.webExternalUrl != null) "--web.external-url=${cfg2.webExternalUrl}";
 
-  filterValidPrometheus = filterAttrsListRecursive (n: v: !(n == "_module" || v == null || v == [] || v == {}));
+  filterValidPrometheus = filterAttrsListRecursive (n: v: !(n == "_module" || v == null));
   filterAttrsListRecursive = pred: x:
     if isAttrs x then
       listToAttrs (
@@ -123,37 +123,37 @@ let
   promTypes.globalConfig = types.submodule {
     options = {
       scrape_interval = mkOption {
-        type = types.str;
-        default = "1m";
+        type = types.nullOr types.str;
+        default = null;
         description = ''
           How frequently to scrape targets by default.
         '';
       };
 
       scrape_timeout = mkOption {
-        type = types.str;
-        default = "10s";
+        type = types.nullOr types.str;
+        default = null;
         description = ''
           How long until a scrape request times out.
         '';
       };
 
       evaluation_interval = mkOption {
-        type = types.str;
-        default = "1m";
+        type = types.nullOr types.str;
+        default = null;
         description = ''
           How frequently to evaluate rules by default.
         '';
       };
 
       external_labels = mkOption {
-        type = types.attrsOf types.str;
+        type = types.nullOr (types.attrsOf types.str);
         description = ''
           The labels to add to any time series or alerts when
           communicating with external systems (federation, remote
           storage, Alertmanager).
         '';
-        default = {};
+        default = null;
       };
     };
   };
@@ -183,15 +183,15 @@ let
         '';
       };
       metrics_path = mkOption {
-        type = types.str;
-        default = "/metrics";
+        type = types.nullOr types.str;
+        default = null;
         description = ''
           The HTTP resource path on which to fetch metrics from targets.
         '';
       };
       honor_labels = mkOption {
-        type = types.bool;
-        default = false;
+        type = types.nullOr types.bool;
+        default = null;
         description = ''
           Controls how Prometheus handles conflicts between labels
           that are already present in scraped data and labels that
@@ -213,15 +213,15 @@ let
         '';
       };
       scheme = mkOption {
-        type = types.enum ["http" "https"];
-        default = "http";
+        type = types.nullOr (types.enum ["http" "https"]);
+        default = null;
         description = ''
           The URL scheme with which to fetch metrics from targets.
         '';
       };
       params = mkOption {
-        type = types.attrsOf (types.listOf types.str);
-        default = {};
+        type = types.nullOr (types.attrsOf (types.listOf types.str));
+        default = null;
         description = ''
           Optional HTTP URL parameters.
         '';
@@ -256,43 +256,43 @@ let
         '';
       };
       dns_sd_configs = mkOption {
-        type = types.listOf promTypes.dns_sd_config;
-        default = [];
+        type = types.nullOr (types.listOf promTypes.dns_sd_config);
+        default = null;
         description = ''
           List of DNS service discovery configurations.
         '';
       };
       consul_sd_configs = mkOption {
-        type = types.listOf promTypes.consul_sd_config;
-        default = [];
+        type = types.nullOr (types.listOf promTypes.consul_sd_config);
+        default = null;
         description = ''
           List of Consul service discovery configurations.
         '';
       };
       file_sd_configs = mkOption {
-        type = types.listOf promTypes.file_sd_config;
-        default = [];
+        type = types.nullOr (types.listOf promTypes.file_sd_config);
+        default = null;
         description = ''
           List of file service discovery configurations.
         '';
       };
       static_configs = mkOption {
-        type = types.listOf promTypes.static_config;
-        default = [];
+        type = types.nullOr (types.listOf promTypes.static_config);
+        default = null;
         description = ''
           List of labeled target groups for this job.
         '';
       };
       ec2_sd_configs = mkOption {
-        type = types.listOf promTypes.ec2_sd_config;
-        default = [];
+        type = types.nullOr (types.listOf promTypes.ec2_sd_config);
+        default = null;
         description = ''
           List of EC2 service discovery configurations.
         '';
       };
       relabel_configs = mkOption {
-        type = types.listOf promTypes.relabel_config;
-        default = [];
+        type = types.nullOr (types.listOf promTypes.relabel_config);
+        default = null;
         description = ''
           List of relabel configurations.
         '';
@@ -371,8 +371,8 @@ let
         '';
       };
       port = mkOption {
-        type = types.int;
-        default = 80;
+        type = types.nullOr types.int;
+        default = null;
         description = ''
           The port to scrape metrics from. If using the public IP
           address, this must instead be specified in the relabeling
@@ -417,8 +417,8 @@ let
         '';
       };
       refresh_interval = mkOption {
-        type = types.str;
-        default = "30s";
+        type = types.nullOr types.str;
+        default = null;
         description = ''
           The time after which the provided names are refreshed.
         '';
@@ -429,7 +429,8 @@ let
   promTypes.consul_sd_config = types.submodule {
     options = {
       server = mkOption {
-        type = types.str;
+        type = types.nullOr types.str;
+        default = null;
         description = "Consul server to query.";
       };
       token = mkOption {
@@ -454,14 +455,15 @@ let
       };
 
       services = mkOption {
-        type = types.listOf types.str;
+        type = types.nullOr (types.listOf types.str);
+        default = null;
         description = ''
           A list of services for which targets are retrieved.
         '';
       };
       tag_separator = mkOption {
-        type = types.str;
-        default = ",";
+        type = types.nullOr types.str;
+        default = null;
         description = ''
           The string by which Consul tags are joined into the tag label.
         '';
@@ -477,12 +479,11 @@ let
           Patterns for files from which target groups are extracted. Refer
           to the Prometheus documentation for permitted filename patterns
           and formats.
-
         '';
       };
       refresh_interval = mkOption {
-        type = types.str;
-        default = "30s";
+        type = types.nullOr types.str;
+        default = null;
         description = ''
           Refresh interval to re-read the files.
         '';
@@ -493,7 +494,7 @@ let
   promTypes.relabel_config = types.submodule {
     options = {
       source_labels = mkOption {
-        type = with types; nullOr (listOf str);
+        type = types.nullOr (types.listOf str);
         default = null;
         description = ''
           The source labels select values from existing labels. Their content
@@ -502,8 +503,8 @@ let
         '';
       };
       separator = mkOption {
-        type = types.str;
-        default = ";";
+        type = types.nullOr types.str;
+        default = null;
         description = ''
           Separator placed between concatenated source label values.
         '';
@@ -517,23 +518,23 @@ let
         '';
       };
       regex = mkOption {
-        type = types.str;
-        default = "(.*)";
+        type = types.nullOr types.str;
+        default = null;
         description = ''
           Regular expression against which the extracted value is matched.
         '';
       };
       replacement = mkOption {
-        type = types.str;
-        default = "$1";
+        type = types.nullOr types.str;
+        default = null;
         description = ''
           Replacement value against which a regex replace is performed if the
           regular expression matches.
         '';
       };
       action = mkOption {
-        type = types.enum ["replace" "keep" "drop"];
-        default = "replace";
+        type = types.nullOr (types.enum ["replace" "keep" "drop"]);
+        default = null;
         description = ''
           Action to perform based on regex matching.
         '';