diff --git a/nixos/modules/services/databases/cockroachdb.nix b/nixos/modules/services/databases/cockroachdb.nix
index eb061af9262..9a7aebe4f6a 100644
--- a/nixos/modules/services/databases/cockroachdb.nix
+++ b/nixos/modules/services/databases/cockroachdb.nix
@@ -1,4 +1,4 @@
-{ config, lib, pkgs, ... }:
+{ config, lib, pkgs, utils, ... }:
with lib;
@@ -6,46 +6,44 @@ let
cfg = config.services.cockroachdb;
crdb = cfg.package;
- escape = builtins.replaceStrings ["%"] ["%%"];
- ifNotNull = v: s: optionalString (v != null) s;
-
- startupCommand = lib.concatStringsSep " "
- [ # Basic startup
- "${crdb}/bin/cockroach start"
+ startupCommand = utils.escapeSystemdExecArgs
+ ([
+ # Basic startup
+ "${crdb}/bin/cockroach"
+ "start"
"--logtostderr"
"--store=/var/lib/cockroachdb"
- (ifNotNull cfg.locality "--locality='${cfg.locality}'")
# WebUI settings
- "--http-addr='${cfg.http.address}:${toString cfg.http.port}'"
+ "--http-addr=${cfg.http.address}:${toString cfg.http.port}"
# Cluster listen address
- "--listen-addr='${cfg.listen.address}:${toString cfg.listen.port}'"
+ "--listen-addr=${cfg.listen.address}:${toString cfg.listen.port}"
- # Cluster configuration
- (ifNotNull cfg.join "--join=${cfg.join}")
-
- # Cache and memory settings. Must be escaped.
- "--cache='${escape cfg.cache}'"
- "--max-sql-memory='${escape cfg.maxSqlMemory}'"
+ # Cache and memory settings.
+ "--cache=${cfg.cache}"
+ "--max-sql-memory=${cfg.maxSqlMemory}"
# Certificate/security settings.
(if cfg.insecure then "--insecure" else "--certs-dir=${cfg.certsDir}")
- ];
+ ]
+ ++ lib.optional (cfg.join != null) "--join=${cfg.join}"
+ ++ lib.optional (cfg.locality != null) "--locality=${cfg.locality}"
+ ++ cfg.extraArgs);
- addressOption = descr: defaultPort: {
- address = mkOption {
- type = types.str;
- default = "localhost";
- description = "Address to bind to for ${descr}";
- };
-
- port = mkOption {
- type = types.port;
- default = defaultPort;
- description = "Port to bind to for ${descr}";
- };
+ addressOption = descr: defaultPort: {
+ address = mkOption {
+ type = types.str;
+ default = "localhost";
+ description = "Address to bind to for ${descr}";
};
+
+ port = mkOption {
+ type = types.port;
+ default = defaultPort;
+ description = "Port to bind to for ${descr}";
+ };
+ };
in
{
@@ -159,6 +157,16 @@ in
only contain open source features and open source code).
'';
};
+
+ extraArgs = mkOption {
+ type = types.listOf types.str;
+ default = [];
+ example = [ "--advertise-addr" "[fe80::f6f2:::]" ];
+ description = ''
+ Extra CLI arguments passed to cockroach start.
+ For the full list of supported argumemnts, check
+ '';
+ };
};
};