diff --git a/nixos/modules/services/monitoring/zabbix-agent.nix b/nixos/modules/services/monitoring/zabbix-agent.nix
index b3383ed628b2..73eed7aa66af 100644
--- a/nixos/modules/services/monitoring/zabbix-agent.nix
+++ b/nixos/modules/services/monitoring/zabbix-agent.nix
@@ -3,8 +3,9 @@
let
cfg = config.services.zabbixAgent;
- inherit (lib) mkDefault mkEnableOption mkIf mkOption;
+ inherit (lib) mkDefault mkEnableOption mkIf mkMerge mkOption;
inherit (lib) attrValues concatMapStringsSep literalExample optionalString types;
+ inherit (lib.generators) toKeyValue;
user = "zabbix-agent";
group = "zabbix-agent";
@@ -14,19 +15,15 @@ let
paths = attrValues cfg.modules;
};
- configFile = pkgs.writeText "zabbix_agent.conf" ''
- LogType = console
- Server = ${cfg.server}
- ListenIP = ${cfg.listen.ip}
- ListenPort = ${toString cfg.listen.port}
- ${optionalString (cfg.modules != {}) "LoadModulePath = ${moduleEnv}/lib"}
- ${concatMapStringsSep "\n" (name: "LoadModule = ${name}") (builtins.attrNames cfg.modules)}
- ${cfg.extraConfig}
- '';
+ configFile = pkgs.writeText "zabbix_agent.conf" (toKeyValue { listsAsDuplicateKeys = true; } cfg.settings);
in
{
+ imports = [
+ (lib.mkRemovedOptionModule [ "services" "zabbixAgent" "extraConfig" ] "Use services.zabbixAgent.settings instead.")
+ ];
+
# interface
options = {
@@ -105,15 +102,18 @@ in
'';
};
- # TODO: for bonus points migrate this to https://github.com/NixOS/rfcs/pull/42
- extraConfig = mkOption {
- default = "";
- type = types.lines;
+ settings = mkOption {
+ type = with types; attrsOf (oneOf [ int str (listOf str) ]);
+ default = {};
description = ''
- Configuration that is injected verbatim into the configuration file. Refer to
+ Zabbix Agent configuration. Refer to
for details on supported values.
'';
+ example = {
+ Hostname = "example.org";
+ DebugLevel = 4;
+ };
};
};
@@ -124,6 +124,17 @@ in
config = mkIf cfg.enable {
+ services.zabbixAgent.settings = mkMerge [
+ {
+ LogType = "console";
+ Server = cfg.server;
+ ListenIP = cfg.listen.ip;
+ ListenPort = cfg.listen.port;
+ LoadModule = builtins.attrNames cfg.modules;
+ }
+ (mkIf (cfg.modules != {}) { LoadModulePath = "${moduleEnv}/lib"; })
+ ];
+
networking.firewall = mkIf cfg.openFirewall {
allowedTCPPorts = [ cfg.listen.port ];
};
diff --git a/nixos/modules/services/monitoring/zabbix-proxy.nix b/nixos/modules/services/monitoring/zabbix-proxy.nix
index 9d214469c3b3..d51507c91a1f 100644
--- a/nixos/modules/services/monitoring/zabbix-proxy.nix
+++ b/nixos/modules/services/monitoring/zabbix-proxy.nix
@@ -5,8 +5,9 @@ let
pgsql = config.services.postgresql;
mysql = config.services.mysql;
- inherit (lib) mkDefault mkEnableOption mkIf mkOption;
+ inherit (lib) mkDefault mkEnableOption mkIf mkMerge mkOption;
inherit (lib) attrValues concatMapStringsSep literalExample optional optionalAttrs optionalString types;
+ inherit (lib.generators) toKeyValue;
user = "zabbix";
group = "zabbix";
@@ -19,24 +20,7 @@ let
paths = attrValues cfg.modules;
};
- configFile = pkgs.writeText "zabbix_proxy.conf" ''
- LogType = console
- ListenIP = ${cfg.listen.ip}
- ListenPort = ${toString cfg.listen.port}
- Server = ${cfg.server}
- # TODO: set to cfg.database.socket if database type is pgsql?
- DBHost = ${optionalString (cfg.database.createLocally != true) cfg.database.host}
- ${optionalString (cfg.database.createLocally != true) "DBPort = ${cfg.database.port}"}
- DBName = ${cfg.database.name}
- DBUser = ${cfg.database.user}
- ${optionalString (cfg.database.passwordFile != null) "Include ${passwordFile}"}
- ${optionalString (mysqlLocal && cfg.database.socket != null) "DBSocket = ${cfg.database.socket}"}
- SocketDir = ${runtimeDir}
- FpingLocation = /run/wrappers/bin/fping
- ${optionalString (cfg.modules != {}) "LoadModulePath = ${moduleEnv}/lib"}
- ${concatMapStringsSep "\n" (name: "LoadModule = ${name}") (builtins.attrNames cfg.modules)}
- ${cfg.extraConfig}
- '';
+ configFile = pkgs.writeText "zabbix_proxy.conf" (toKeyValue { listsAsDuplicateKeys = true; } cfg.settings);
mysqlLocal = cfg.database.createLocally && cfg.database.type == "mysql";
pgsqlLocal = cfg.database.createLocally && cfg.database.type == "pgsql";
@@ -44,6 +28,10 @@ let
in
{
+ imports = [
+ (lib.mkRemovedOptionModule [ "services" "zabbixProxy" "extraConfig" ] "Use services.zabbixProxy.settings instead.")
+ ];
+
# interface
options = {
@@ -182,15 +170,19 @@ in
'';
};
- # TODO: for bonus points migrate this to https://github.com/NixOS/rfcs/pull/42
- extraConfig = mkOption {
- default = "";
- type = types.lines;
+ settings = mkOption {
+ type = with types; attrsOf (oneOf [ int str (listOf str) ]);
+ default = {};
description = ''
- Configuration that is injected verbatim into the configuration file. Refer to
+ Zabbix Proxy configuration. Refer to
for details on supported values.
'';
+ example = {
+ CacheSize = "1G";
+ SSHKeyLocation = "/var/lib/zabbix/.ssh";
+ StartPingers = 32;
+ };
};
};
@@ -213,6 +205,26 @@ in
}
];
+ services.zabbixProxy.settings = mkMerge [
+ {
+ LogType = "console";
+ ListenIP = cfg.listen.ip;
+ ListenPort = cfg.listen.port;
+ Server = cfg.server;
+ # TODO: set to cfg.database.socket if database type is pgsql?
+ DBHost = optionalString (cfg.database.createLocally != true) cfg.database.host;
+ DBName = cfg.database.name;
+ DBUser = cfg.database.user;
+ SocketDir = runtimeDir;
+ FpingLocation = "/run/wrappers/bin/fping";
+ LoadModule = builtins.attrNames cfg.modules;
+ }
+ (mkIf (cfg.database.createLocally != true) { DBPort = cfg.database.port; })
+ (mkIf (cfg.database.passwordFile != null) { Include = [ "${passwordFile}" ]; })
+ (mkIf (mysqlLocal && cfg.database.socket != null) { DBSocket = cfg.database.socket; })
+ (mkIf (cfg.modules != {}) { LoadModulePath = "${moduleEnv}/lib"; })
+ ];
+
networking.firewall = mkIf cfg.openFirewall {
allowedTCPPorts = [ cfg.listen.port ];
};
diff --git a/nixos/modules/services/monitoring/zabbix-server.nix b/nixos/modules/services/monitoring/zabbix-server.nix
index b4e4378ce1e7..df09488a8ccc 100644
--- a/nixos/modules/services/monitoring/zabbix-server.nix
+++ b/nixos/modules/services/monitoring/zabbix-server.nix
@@ -5,8 +5,9 @@ let
pgsql = config.services.postgresql;
mysql = config.services.mysql;
- inherit (lib) mkDefault mkEnableOption mkIf mkOption;
+ inherit (lib) mkDefault mkEnableOption mkIf mkMerge mkOption;
inherit (lib) attrValues concatMapStringsSep literalExample optional optionalAttrs optionalString types;
+ inherit (lib.generators) toKeyValue;
user = "zabbix";
group = "zabbix";
@@ -19,24 +20,7 @@ let
paths = attrValues cfg.modules;
};
- configFile = pkgs.writeText "zabbix_server.conf" ''
- LogType = console
- ListenIP = ${cfg.listen.ip}
- ListenPort = ${toString cfg.listen.port}
- # TODO: set to cfg.database.socket if database type is pgsql?
- DBHost = ${optionalString (cfg.database.createLocally != true) cfg.database.host}
- ${optionalString (cfg.database.createLocally != true) "DBPort = ${cfg.database.port}"}
- DBName = ${cfg.database.name}
- DBUser = ${cfg.database.user}
- ${optionalString (cfg.database.passwordFile != null) "Include ${passwordFile}"}
- ${optionalString (mysqlLocal && cfg.database.socket != null) "DBSocket = ${cfg.database.socket}"}
- PidFile = ${runtimeDir}/zabbix_server.pid
- SocketDir = ${runtimeDir}
- FpingLocation = /run/wrappers/bin/fping
- ${optionalString (cfg.modules != {}) "LoadModulePath = ${moduleEnv}/lib"}
- ${concatMapStringsSep "\n" (name: "LoadModule = ${name}") (builtins.attrNames cfg.modules)}
- ${cfg.extraConfig}
- '';
+ configFile = pkgs.writeText "zabbix_server.conf" (toKeyValue { listsAsDuplicateKeys = true; } cfg.settings);
mysqlLocal = cfg.database.createLocally && cfg.database.type == "mysql";
pgsqlLocal = cfg.database.createLocally && cfg.database.type == "pgsql";
@@ -47,6 +31,7 @@ in
imports = [
(lib.mkRenamedOptionModule [ "services" "zabbixServer" "dbServer" ] [ "services" "zabbixServer" "database" "host" ])
(lib.mkRemovedOptionModule [ "services" "zabbixServer" "dbPassword" ] "Use services.zabbixServer.database.passwordFile instead.")
+ (lib.mkRemovedOptionModule [ "services" "zabbixServer" "extraConfig" ] "Use services.zabbixServer.settings instead.")
];
# interface
@@ -176,15 +161,19 @@ in
'';
};
- # TODO: for bonus points migrate this to https://github.com/NixOS/rfcs/pull/42
- extraConfig = mkOption {
- default = "";
- type = types.lines;
+ settings = mkOption {
+ type = with types; attrsOf (oneOf [ int str (listOf str) ]);
+ default = {};
description = ''
- Configuration that is injected verbatim into the configuration file. Refer to
+ Zabbix Server configuration. Refer to
for details on supported values.
'';
+ example = {
+ CacheSize = "1G";
+ SSHKeyLocation = "/var/lib/zabbix/.ssh";
+ StartPingers = 32;
+ };
};
};
@@ -204,6 +193,26 @@ in
}
];
+ services.zabbixServer.settings = mkMerge [
+ {
+ LogType = "console";
+ ListenIP = cfg.listen.ip;
+ ListenPort = cfg.listen.port;
+ # TODO: set to cfg.database.socket if database type is pgsql?
+ DBHost = optionalString (cfg.database.createLocally != true) cfg.database.host;
+ DBName = cfg.database.name;
+ DBUser = cfg.database.user;
+ PidFile = "${runtimeDir}/zabbix_server.pid";
+ SocketDir = runtimeDir;
+ FpingLocation = "/run/wrappers/bin/fping";
+ LoadModule = builtins.attrNames cfg.modules;
+ }
+ (mkIf (cfg.database.createLocally != true) { DBPort = cfg.database.port; })
+ (mkIf (cfg.database.passwordFile != null) { Include = [ "${passwordFile}" ]; })
+ (mkIf (mysqlLocal && cfg.database.socket != null) { DBSocket = cfg.database.socket; })
+ (mkIf (cfg.modules != {}) { LoadModulePath = "${moduleEnv}/lib"; })
+ ];
+
networking.firewall = mkIf cfg.openFirewall {
allowedTCPPorts = [ cfg.listen.port ];
};