mirror of
https://github.com/NixOS/nixpkgs.git
synced 2025-06-13 05:05:29 +03:00

This change adds services.pgbouncer.settings option as per [RFC 0042] and deprecates other options that were previously used to generate configuration file. In addition to that, we also place the configuration file under environment.etc to allow reloading configuration without service restart. [RFC 0042]: https://github.com/NixOS/rfcs/blob/master/rfcs/0042-config-option.md
215 lines
7.8 KiB
Nix
215 lines
7.8 KiB
Nix
{ config, lib, utils, pkgs, ... }:
|
|
let
|
|
cfg = config.services.pgbouncer;
|
|
|
|
settingsFormat = pkgs.formats.ini { };
|
|
configFile = settingsFormat.generate "pgbouncer.ini" cfg.settings;
|
|
configPath = "pgbouncer/pgbouncer.ini";
|
|
in
|
|
{
|
|
imports = [
|
|
(lib.mkRenamedOptionModule
|
|
[ "services" "pgbouncer" "logFile" ]
|
|
[ "services" "pgbouncer" "settings" "pgbouncer" "log_file" ])
|
|
(lib.mkRenamedOptionModule
|
|
[ "services" "pgbouncer" "listenAddress" ]
|
|
[ "services" "pgbouncer" "settings" "pgbouncer" "listen_addr" ])
|
|
(lib.mkRenamedOptionModule
|
|
[ "services" "pgbouncer" "listenPort" ]
|
|
[ "services" "pgbouncer" "settings" "pgbouncer" "listen_port" ])
|
|
(lib.mkRenamedOptionModule
|
|
[ "services" "pgbouncer" "poolMode" ]
|
|
[ "services" "pgbouncer" "settings" "pgbouncer" "pool_mode" ])
|
|
(lib.mkRenamedOptionModule
|
|
[ "services" "pgbouncer" "maxClientConn" ]
|
|
[ "services" "pgbouncer" "settings" "pgbouncer" "max_client_conn" ])
|
|
(lib.mkRenamedOptionModule
|
|
[ "services" "pgbouncer" "defaultPoolSize" ]
|
|
[ "services" "pgbouncer" "settings" "pgbouncer" "default_pool_size" ])
|
|
(lib.mkRenamedOptionModule
|
|
[ "services" "pgbouncer" "maxDbConnections" ]
|
|
[ "services" "pgbouncer" "settings" "pgbouncer" "max_db_connections" ])
|
|
(lib.mkRenamedOptionModule
|
|
[ "services" "pgbouncer" "maxUserConnections" ]
|
|
[ "services" "pgbouncer" "settings" "pgbouncer" "max_user_connections" ])
|
|
(lib.mkRenamedOptionModule
|
|
[ "services" "pgbouncer" "ignoreStartupParameters" ]
|
|
[ "services" "pgbouncer" "settings" "pgbouncer" "ignore_startup_parameters" ])
|
|
(lib.mkRenamedOptionModule
|
|
[ "services" "pgbouncer" "databases" ]
|
|
[ "services" "pgbouncer" "settings" "databases" ])
|
|
(lib.mkRenamedOptionModule
|
|
[ "services" "pgbouncer" "users" ]
|
|
[ "services" "pgbouncer" "settings" "users" ])
|
|
(lib.mkRenamedOptionModule
|
|
[ "services" "pgbouncer" "peers" ]
|
|
[ "services" "pgbouncer" "settings" "peers" ])
|
|
(lib.mkRenamedOptionModule
|
|
[ "services" "pgbouncer" "authType" ]
|
|
[ "services" "pgbouncer" "settings" "pgbouncer" "auth_type" ])
|
|
(lib.mkRenamedOptionModule
|
|
[ "services" "pgbouncer" "authHbaFile" ]
|
|
[ "services" "pgbouncer" "settings" "pgbouncer" "auth_hba_file" ])
|
|
(lib.mkRenamedOptionModule
|
|
[ "services" "pgbouncer" "authFile" ]
|
|
[ "services" "pgbouncer" "settings" "pgbouncer" "auth_file" ])
|
|
(lib.mkRenamedOptionModule
|
|
[ "services" "pgbouncer" "authUser" ]
|
|
[ "services" "pgbouncer" "settings" "pgbouncer" "auth_user" ])
|
|
(lib.mkRenamedOptionModule
|
|
[ "services" "pgbouncer" "authQuery" ]
|
|
[ "services" "pgbouncer" "settings" "pgbouncer" "auth_query" ])
|
|
(lib.mkRenamedOptionModule
|
|
[ "services" "pgbouncer" "authDbname" ]
|
|
[ "services" "pgbouncer" "settings" "pgbouncer" "auth_dbname" ])
|
|
(lib.mkRenamedOptionModule
|
|
[ "services" "pgbouncer" "adminUsers" ]
|
|
[ "services" "pgbouncer" "settings" "pgbouncer" "admin_users" ])
|
|
(lib.mkRenamedOptionModule
|
|
[ "services" "pgbouncer" "statsUsers" ]
|
|
[ "services" "pgbouncer" "settings" "pgbouncer" "stats_users" ])
|
|
(lib.mkRenamedOptionModule
|
|
[ "services" "pgbouncer" "verbose" ]
|
|
[ "services" "pgbouncer" "settings" "pgbouncer" "verbose" ])
|
|
(lib.mkChangedOptionModule
|
|
[ "services" "pgbouncer" "syslog" "enable" ]
|
|
[ "services" "pgbouncer" "settings" "pgbouncer" "syslog" ]
|
|
(config:
|
|
let
|
|
enable = lib.getAttrFromPath
|
|
[ "services" "pgbouncer" "syslog" "enable" ]
|
|
config;
|
|
in
|
|
if enable then 1 else 0))
|
|
(lib.mkRenamedOptionModule
|
|
[ "services" "pgbouncer" "syslog" "syslogIdent" ]
|
|
[ "services" "pgbouncer" "settings" "pgbouncer" "syslog_ident" ])
|
|
(lib.mkRenamedOptionModule
|
|
[ "services" "pgbouncer" "syslog" "syslogFacility" ]
|
|
[ "services" "pgbouncer" "settings" "pgbouncer" "syslog_facility" ])
|
|
(lib.mkRenamedOptionModule
|
|
[ "services" "pgbouncer" "tls" "client" "sslmode" ]
|
|
[ "services" "pgbouncer" "settings" "pgbouncer" "client_tls_sslmode" ])
|
|
(lib.mkRenamedOptionModule
|
|
[ "services" "pgbouncer" "tls" "client" "keyFile" ]
|
|
[ "services" "pgbouncer" "settings" "pgbouncer" "client_tls_key_file" ])
|
|
(lib.mkRenamedOptionModule
|
|
[ "services" "pgbouncer" "tls" "client" "certFile" ]
|
|
[ "services" "pgbouncer" "settings" "pgbouncer" "client_tls_cert_file" ])
|
|
(lib.mkRenamedOptionModule
|
|
[ "services" "pgbouncer" "tls" "client" "caFile" ]
|
|
[ "services" "pgbouncer" "settings" "pgbouncer" "client_tls_ca_file" ])
|
|
(lib.mkRenamedOptionModule
|
|
[ "services" "pgbouncer" "tls" "server" "sslmode" ]
|
|
[ "services" "pgbouncer" "settings" "pgbouncer" "server_tls_sslmode" ])
|
|
(lib.mkRenamedOptionModule
|
|
[ "services" "pgbouncer" "tls" "server" "keyFile" ]
|
|
[ "services" "pgbouncer" "settings" "pgbouncer" "server_tls_key_file" ])
|
|
(lib.mkRenamedOptionModule
|
|
[ "services" "pgbouncer" "tls" "server" "certFile" ]
|
|
[ "services" "pgbouncer" "settings" "pgbouncer" "server_tls_cert_file" ])
|
|
(lib.mkRenamedOptionModule
|
|
[ "services" "pgbouncer" "tls" "server" "caFile" ]
|
|
[ "services" "pgbouncer" "settings" "pgbouncer" "server_tls_ca_file" ])
|
|
(lib.mkRemovedOptionModule [ "services" "pgbouncer" "extraConfig" ] "Use services.pgbouncer.settings instead.")
|
|
];
|
|
|
|
options.services.pgbouncer = {
|
|
enable = lib.mkEnableOption "PostgreSQL connection pooler";
|
|
|
|
package = lib.mkPackageOption pkgs "pgbouncer" { };
|
|
|
|
openFirewall = lib.mkOption {
|
|
type = lib.types.bool;
|
|
default = false;
|
|
description = ''
|
|
Whether to automatically open the specified TCP port in the firewall.
|
|
'';
|
|
};
|
|
|
|
settings = lib.mkOption {
|
|
type = settingsFormat.type;
|
|
default = { };
|
|
description = ''
|
|
Configuration for PgBouncer, see <https://www.pgbouncer.org/config.html>
|
|
for supported values.
|
|
'';
|
|
};
|
|
|
|
# Linux settings
|
|
openFilesLimit = lib.mkOption {
|
|
type = lib.types.int;
|
|
default = 65536;
|
|
description = ''
|
|
Maximum number of open files.
|
|
'';
|
|
};
|
|
|
|
user = lib.mkOption {
|
|
type = lib.types.str;
|
|
default = "pgbouncer";
|
|
description = ''
|
|
The user pgbouncer is run as.
|
|
'';
|
|
};
|
|
|
|
group = lib.mkOption {
|
|
type = lib.types.str;
|
|
default = "pgbouncer";
|
|
description = ''
|
|
The group pgbouncer is run as.
|
|
'';
|
|
};
|
|
|
|
homeDir = lib.mkOption {
|
|
type = lib.types.path;
|
|
default = "/var/lib/pgbouncer";
|
|
description = ''
|
|
Specifies the home directory.
|
|
'';
|
|
};
|
|
};
|
|
|
|
config = lib.mkIf cfg.enable {
|
|
users.groups.${cfg.group} = { };
|
|
users.users.${cfg.user} = {
|
|
description = "PgBouncer service user";
|
|
group = cfg.group;
|
|
home = cfg.homeDir;
|
|
createHome = true;
|
|
isSystemUser = true;
|
|
};
|
|
|
|
environment.etc.${configPath}.source = configFile;
|
|
|
|
# Default to RuntimeDirectory instead of /tmp.
|
|
services.pgbouncer.settings.pgbouncer.unix_socket_dir = lib.mkDefault "/run/pgbouncer";
|
|
|
|
systemd.services.pgbouncer = {
|
|
description = "PgBouncer - PostgreSQL connection pooler";
|
|
wants = [ "network-online.target" ];
|
|
after = [ "network-online.target" ];
|
|
wantedBy = [ "multi-user.target" ];
|
|
reloadTriggers = [ configFile ];
|
|
serviceConfig = {
|
|
Type = "notify-reload";
|
|
User = cfg.user;
|
|
Group = cfg.group;
|
|
ExecStart = utils.escapeSystemdExecArgs [
|
|
(lib.getExe pkgs.pgbouncer)
|
|
"/etc/${configPath}"
|
|
];
|
|
RuntimeDirectory = "pgbouncer";
|
|
LimitNOFILE = cfg.openFilesLimit;
|
|
};
|
|
};
|
|
|
|
networking.firewall = lib.mkIf cfg.openFirewall {
|
|
allowedTCPPorts = [
|
|
(cfg.settings.pgbouncer.listen_port or 6432)
|
|
];
|
|
};
|
|
};
|
|
|
|
meta.maintainers = [ lib.maintainers._1000101 ];
|
|
}
|