services: Rework the PostgreSQL config file to use a record type.
For the default config file representation. This makes it possible to more easily change the configuration file, and have dynamic content. * gnu/services/databases.scm (<postgresql-config-file>): New record type. (%default-postgres-config): Remove this, it's been replaced by the configuration file. (<postgresql-configuration>): Alter the default for the config file field. (postgresql-service): Alter the default value for the config-file parameter.
This commit is contained in:
parent
0fa4702c04
commit
936e7a5245
|
@ -29,8 +29,16 @@
|
||||||
#:use-module (guix modules)
|
#:use-module (guix modules)
|
||||||
#:use-module (guix records)
|
#:use-module (guix records)
|
||||||
#:use-module (guix gexp)
|
#:use-module (guix gexp)
|
||||||
|
#:use-module (srfi srfi-1)
|
||||||
#:use-module (ice-9 match)
|
#:use-module (ice-9 match)
|
||||||
#:export (postgresql-configuration
|
#:export (<postgresql-config-file>
|
||||||
|
postgresql-config-file
|
||||||
|
postgresql-config-file?
|
||||||
|
postgresql-config-file-log-destination
|
||||||
|
postgresql-config-file-hba-file
|
||||||
|
postgresql-config-file-ident-file
|
||||||
|
postgresql-config-file-extra-config
|
||||||
|
|
||||||
postgresql-configuration?
|
postgresql-configuration?
|
||||||
postgresql-service
|
postgresql-service
|
||||||
postgresql-service-type
|
postgresql-service-type
|
||||||
|
@ -68,6 +76,60 @@
|
||||||
;;;
|
;;;
|
||||||
;;; Code:
|
;;; Code:
|
||||||
|
|
||||||
|
(define %default-postgres-hba
|
||||||
|
(plain-file "pg_hba.conf"
|
||||||
|
"
|
||||||
|
local all all trust
|
||||||
|
host all all 127.0.0.1/32 trust
|
||||||
|
host all all ::1/128 trust"))
|
||||||
|
|
||||||
|
(define %default-postgres-ident
|
||||||
|
(plain-file "pg_ident.conf"
|
||||||
|
"# MAPNAME SYSTEM-USERNAME PG-USERNAME"))
|
||||||
|
|
||||||
|
(define-record-type* <postgresql-config-file>
|
||||||
|
postgresql-config-file make-postgresql-config-file
|
||||||
|
postgresql-config-file?
|
||||||
|
(log-destination postgresql-config-file-log-destination
|
||||||
|
(default "syslog"))
|
||||||
|
(hba-file postgresql-config-file-hba-file
|
||||||
|
(default %default-postgres-hba))
|
||||||
|
(ident-file postgresql-config-file-ident-file
|
||||||
|
(default %default-postgres-ident))
|
||||||
|
(extra-config postgresql-config-file-extra-config
|
||||||
|
(default '())))
|
||||||
|
|
||||||
|
(define-gexp-compiler (postgresql-config-file-compiler
|
||||||
|
(file <postgresql-config-file>) system target)
|
||||||
|
(match file
|
||||||
|
(($ <postgresql-config-file> log-destination hba-file
|
||||||
|
ident-file extra-config)
|
||||||
|
(define (quote' string)
|
||||||
|
(if string
|
||||||
|
(list "'" string "'")
|
||||||
|
'()))
|
||||||
|
|
||||||
|
(define contents
|
||||||
|
(append-map
|
||||||
|
(match-lambda
|
||||||
|
((key) '())
|
||||||
|
((key . #f) '())
|
||||||
|
((key values ...) `(,key " = " ,@values "\n")))
|
||||||
|
|
||||||
|
`(("log_destination" ,@(quote' log-destination))
|
||||||
|
("hba_file" ,@(quote' hba-file))
|
||||||
|
("ident_file" ,@(quote' ident-file))
|
||||||
|
,@extra-config)))
|
||||||
|
|
||||||
|
(gexp->derivation
|
||||||
|
"postgresql.conf"
|
||||||
|
#~(call-with-output-file (ungexp output "out")
|
||||||
|
(lambda (port)
|
||||||
|
(display
|
||||||
|
(string-append #$@contents)
|
||||||
|
port)))
|
||||||
|
#:local-build? #t))))
|
||||||
|
|
||||||
(define-record-type* <postgresql-configuration>
|
(define-record-type* <postgresql-configuration>
|
||||||
postgresql-configuration make-postgresql-configuration
|
postgresql-configuration make-postgresql-configuration
|
||||||
postgresql-configuration?
|
postgresql-configuration?
|
||||||
|
@ -78,27 +140,10 @@
|
||||||
(locale postgresql-configuration-locale
|
(locale postgresql-configuration-locale
|
||||||
(default "en_US.utf8"))
|
(default "en_US.utf8"))
|
||||||
(config-file postgresql-configuration-file
|
(config-file postgresql-configuration-file
|
||||||
(default %default-postgres-config))
|
(default (postgresql-config-file)))
|
||||||
(data-directory postgresql-configuration-data-directory
|
(data-directory postgresql-configuration-data-directory
|
||||||
(default "/var/lib/postgresql/data")))
|
(default "/var/lib/postgresql/data")))
|
||||||
|
|
||||||
(define %default-postgres-hba
|
|
||||||
(plain-file "pg_hba.conf"
|
|
||||||
"
|
|
||||||
local all all trust
|
|
||||||
host all all 127.0.0.1/32 trust
|
|
||||||
host all all ::1/128 trust"))
|
|
||||||
|
|
||||||
(define %default-postgres-ident
|
|
||||||
(plain-file "pg_ident.conf"
|
|
||||||
"# MAPNAME SYSTEM-USERNAME PG-USERNAME"))
|
|
||||||
|
|
||||||
(define %default-postgres-config
|
|
||||||
(mixed-text-file "postgresql.conf"
|
|
||||||
"log_destination = 'syslog'\n"
|
|
||||||
"hba_file = '" %default-postgres-hba "'\n"
|
|
||||||
"ident_file = '" %default-postgres-ident "'\n"))
|
|
||||||
|
|
||||||
(define %postgresql-accounts
|
(define %postgresql-accounts
|
||||||
(list (user-group (name "postgres") (system? #t))
|
(list (user-group (name "postgres") (system? #t))
|
||||||
(user-account
|
(user-account
|
||||||
|
@ -192,7 +237,7 @@ host all all ::1/128 trust"))
|
||||||
(define* (postgresql-service #:key (postgresql postgresql)
|
(define* (postgresql-service #:key (postgresql postgresql)
|
||||||
(port 5432)
|
(port 5432)
|
||||||
(locale "en_US.utf8")
|
(locale "en_US.utf8")
|
||||||
(config-file %default-postgres-config)
|
(config-file (postgresql-config-file))
|
||||||
(data-directory "/var/lib/postgresql/data"))
|
(data-directory "/var/lib/postgresql/data"))
|
||||||
"Return a service that runs @var{postgresql}, the PostgreSQL database server.
|
"Return a service that runs @var{postgresql}, the PostgreSQL database server.
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue