nixos/influxdb: refactor (#484156)

This commit is contained in:
Atemu
2026-01-28 01:07:29 +00:00
committed by GitHub
+123 -114
View File
@@ -7,106 +7,7 @@
let
cfg = config.services.influxdb;
configOptions = lib.recursiveUpdate {
meta = {
bind-address = ":8088";
commit-timeout = "50ms";
dir = "${cfg.dataDir}/meta";
election-timeout = "1s";
heartbeat-timeout = "1s";
hostname = "localhost";
leader-lease-timeout = "500ms";
retention-autocreate = true;
};
data = {
dir = "${cfg.dataDir}/data";
wal-dir = "${cfg.dataDir}/wal";
max-wal-size = 104857600;
wal-enable-logging = true;
wal-flush-interval = "10m";
wal-partition-flush-delay = "2s";
};
cluster = {
shard-writer-timeout = "5s";
write-timeout = "5s";
};
retention = {
enabled = true;
check-interval = "30m";
};
http = {
enabled = true;
auth-enabled = false;
bind-address = ":8086";
https-enabled = false;
log-enabled = true;
pprof-enabled = false;
write-tracing = false;
};
monitor = {
store-enabled = false;
store-database = "_internal";
store-interval = "10s";
};
admin = {
enabled = true;
bind-address = ":8083";
https-enabled = false;
};
graphite = [
{
enabled = false;
}
];
udp = [
{
enabled = false;
}
];
collectd = [
{
enabled = false;
typesdb = "${pkgs.collectd-data}/share/collectd/types.db";
database = "collectd_db";
bind-address = ":25826";
}
];
opentsdb = [
{
enabled = false;
}
];
continuous_queries = {
enabled = true;
log-enabled = true;
recompute-previous-n = 2;
recompute-no-older-than = "10m";
compute-runs-per-interval = 10;
compute-no-more-than = "2m";
};
hinted-handoff = {
enabled = true;
dir = "${cfg.dataDir}/hh";
max-size = 1073741824;
max-age = "168h";
retry-rate-limit = 0;
retry-interval = "1s";
};
} cfg.extraConfig;
configFile = (pkgs.formats.toml { }).generate "config.toml" configOptions;
settingsFormat = pkgs.formats.toml { };
in
{
@@ -116,11 +17,7 @@ in
services.influxdb = {
enable = lib.mkOption {
default = false;
description = "Whether to enable the influxdb server";
type = lib.types.bool;
};
enable = lib.mkEnableOption "the influxdb server";
package = lib.mkPackageOption pkgs "influxdb" { };
@@ -142,10 +39,116 @@ in
type = lib.types.path;
};
extraConfig = lib.mkOption {
settings = lib.mkOption {
default = { };
description = "Extra configuration options for influxdb";
type = lib.types.attrs;
type = lib.types.submodule {
freeformType = settingsFormat.type;
config =
let
mkAllOptionDefault = lib.mapAttrs (n: lib.mkOptionDefault);
in
{
meta = mkAllOptionDefault {
bind-address = ":8088";
commit-timeout = "50ms";
dir = "${cfg.dataDir}/meta";
election-timeout = "1s";
heartbeat-timeout = "1s";
hostname = "localhost";
leader-lease-timeout = "500ms";
retention-autocreate = true;
};
data = mkAllOptionDefault {
dir = "${cfg.dataDir}/data";
wal-dir = "${cfg.dataDir}/wal";
max-wal-size = 104857600;
wal-enable-logging = true;
wal-flush-interval = "10m";
wal-partition-flush-delay = "2s";
};
cluster = mkAllOptionDefault {
shard-writer-timeout = "5s";
write-timeout = "5s";
};
retention = mkAllOptionDefault {
enabled = true;
check-interval = "30m";
};
http = mkAllOptionDefault {
enabled = true;
auth-enabled = false;
bind-address = ":8086";
https-enabled = false;
log-enabled = true;
pprof-enabled = false;
write-tracing = false;
};
monitor = mkAllOptionDefault {
store-enabled = false;
store-database = "_internal";
store-interval = "10s";
};
admin = mkAllOptionDefault {
enabled = true;
bind-address = ":8083";
https-enabled = false;
};
# We can't make lists sensibly overrideable, so you have to override
# them whole
graphite = lib.mkOptionDefault [
{
enabled = false;
}
];
udp = lib.mkOptionDefault [
{
enabled = false;
}
];
collectd = lib.mkOptionDefault [
{
enabled = false;
typesdb = "${pkgs.collectd-data}/share/collectd/types.db";
database = "collectd_db";
bind-address = ":25826";
}
];
opentsdb = lib.mkOptionDefault [
{
enabled = false;
}
];
continuous_queries = mkAllOptionDefault {
enabled = true;
log-enabled = true;
recompute-previous-n = 2;
recompute-no-older-than = "10m";
compute-runs-per-interval = 10;
compute-no-more-than = "2m";
};
hinted-handoff = mkAllOptionDefault {
enabled = true;
dir = "${cfg.dataDir}/hh";
max-size = 1073741824;
max-age = "168h";
retry-rate-limit = 0;
retry-interval = "1s";
};
};
};
};
};
};
@@ -163,17 +166,16 @@ in
wantedBy = [ "multi-user.target" ];
after = [ "network.target" ];
serviceConfig = {
ExecStart = ''${cfg.package}/bin/influxd -config "${configFile}"'';
ExecStart = ''${cfg.package}/bin/influxd -config "${settingsFormat.generate "config.toml" cfg.settings}"'';
User = cfg.user;
Group = cfg.group;
Restart = "on-failure";
};
postStart =
let
scheme = if configOptions.http.https-enabled then "-k https" else "http";
bindAddr = (ba: if lib.hasPrefix ":" ba then "127.0.0.1${ba}" else "${ba}") (
toString configOptions.http.bind-address
);
scheme = if cfg.settings.http.https-enabled or false then "-k https" else "http";
inherit (cfg.settings.http) bind-address;
bindAddr = if lib.hasPrefix ":" bind-address then "127.0.0.1${bind-address}" else bind-address;
in
lib.mkBefore ''
until ${pkgs.curl.bin}/bin/curl -s -o /dev/null ${scheme}://${bindAddr}/ping; do
@@ -182,7 +184,7 @@ in
'';
};
users.users = lib.optionalAttrs (cfg.user == "influxdb") {
users.users = lib.mkIf (cfg.user == "influxdb") {
influxdb = {
uid = config.ids.uids.influxdb;
group = "influxdb";
@@ -190,9 +192,16 @@ in
};
};
users.groups = lib.optionalAttrs (cfg.group == "influxdb") {
users.groups = lib.mkIf (cfg.group == "influxdb") {
influxdb.gid = config.ids.gids.influxdb;
};
};
imports = [
# FIXME remove after 26.11
(lib.mkRenamedOptionModule
[ "services" "influxdb" "extraConfig" ]
[ "services" "influxdb" "settings" ]
)
];
}