nixos/cfssl: use systemd StateDirectory to provision the data directory
This commit is contained in:
parent
b9393b0c82
commit
67abfde611
1 changed files with 49 additions and 37 deletions
|
@ -1,4 +1,4 @@
|
||||||
{ config, lib, pkgs, ... }:
|
{ config, options, lib, pkgs, ... }:
|
||||||
|
|
||||||
with lib;
|
with lib;
|
||||||
|
|
||||||
|
@ -11,7 +11,16 @@ in {
|
||||||
dataDir = mkOption {
|
dataDir = mkOption {
|
||||||
default = "/var/lib/cfssl";
|
default = "/var/lib/cfssl";
|
||||||
type = types.path;
|
type = types.path;
|
||||||
description = "Cfssl work directory.";
|
description = ''
|
||||||
|
The work directory for CFSSL.
|
||||||
|
|
||||||
|
<note><para>
|
||||||
|
If left as the default value this directory will automatically be
|
||||||
|
created before the CFSSL server starts, otherwise you are
|
||||||
|
responsible for ensuring the directory exists with appropriate
|
||||||
|
ownership and permissions.
|
||||||
|
</para></note>
|
||||||
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
address = mkOption {
|
address = mkOption {
|
||||||
|
@ -153,7 +162,6 @@ in {
|
||||||
|
|
||||||
users.extraUsers.cfssl = {
|
users.extraUsers.cfssl = {
|
||||||
description = "cfssl user";
|
description = "cfssl user";
|
||||||
createHome = true;
|
|
||||||
home = cfg.dataDir;
|
home = cfg.dataDir;
|
||||||
group = "cfssl";
|
group = "cfssl";
|
||||||
uid = config.ids.uids.cfssl;
|
uid = config.ids.uids.cfssl;
|
||||||
|
@ -164,41 +172,45 @@ in {
|
||||||
wantedBy = [ "multi-user.target" ];
|
wantedBy = [ "multi-user.target" ];
|
||||||
after = [ "network.target" ];
|
after = [ "network.target" ];
|
||||||
|
|
||||||
serviceConfig = {
|
serviceConfig = lib.mkMerge [
|
||||||
WorkingDirectory = cfg.dataDir;
|
{
|
||||||
StateDirectory = cfg.dataDir;
|
WorkingDirectory = cfg.dataDir;
|
||||||
StateDirectoryMode = 700;
|
Restart = "always";
|
||||||
Restart = "always";
|
User = "cfssl";
|
||||||
User = "cfssl";
|
|
||||||
|
|
||||||
ExecStart = with cfg; let
|
ExecStart = with cfg; let
|
||||||
opt = n: v: optionalString (v != null) ''-${n}="${v}"'';
|
opt = n: v: optionalString (v != null) ''-${n}="${v}"'';
|
||||||
in
|
in
|
||||||
lib.concatStringsSep " \\\n" [
|
lib.concatStringsSep " \\\n" [
|
||||||
"${pkgs.cfssl}/bin/cfssl serve"
|
"${pkgs.cfssl}/bin/cfssl serve"
|
||||||
(opt "address" address)
|
(opt "address" address)
|
||||||
(opt "port" (toString port))
|
(opt "port" (toString port))
|
||||||
(opt "ca" ca)
|
(opt "ca" ca)
|
||||||
(opt "ca-key" caKey)
|
(opt "ca-key" caKey)
|
||||||
(opt "ca-bundle" caBundle)
|
(opt "ca-bundle" caBundle)
|
||||||
(opt "int-bundle" intBundle)
|
(opt "int-bundle" intBundle)
|
||||||
(opt "int-dir" intDir)
|
(opt "int-dir" intDir)
|
||||||
(opt "metadata" metadata)
|
(opt "metadata" metadata)
|
||||||
(opt "remote" remote)
|
(opt "remote" remote)
|
||||||
(opt "config" configFile)
|
(opt "config" configFile)
|
||||||
(opt "responder" responder)
|
(opt "responder" responder)
|
||||||
(opt "responder-key" responderKey)
|
(opt "responder-key" responderKey)
|
||||||
(opt "tls-key" tlsKey)
|
(opt "tls-key" tlsKey)
|
||||||
(opt "tls-cert" tlsCert)
|
(opt "tls-cert" tlsCert)
|
||||||
(opt "mutual-tls-ca" mutualTlsCa)
|
(opt "mutual-tls-ca" mutualTlsCa)
|
||||||
(opt "mutual-tls-cn" mutualTlsCn)
|
(opt "mutual-tls-cn" mutualTlsCn)
|
||||||
(opt "mutual-tls-client-key" mutualTlsClientKey)
|
(opt "mutual-tls-client-key" mutualTlsClientKey)
|
||||||
(opt "mutual-tls-client-cert" mutualTlsClientCert)
|
(opt "mutual-tls-client-cert" mutualTlsClientCert)
|
||||||
(opt "tls-remote-ca" tlsRemoteCa)
|
(opt "tls-remote-ca" tlsRemoteCa)
|
||||||
(opt "db-config" dbConfig)
|
(opt "db-config" dbConfig)
|
||||||
(opt "loglevel" (toString logLevel))
|
(opt "loglevel" (toString logLevel))
|
||||||
];
|
];
|
||||||
};
|
}
|
||||||
|
(mkIf (cfg.dataDir == options.services.cfssl.dataDir.default) {
|
||||||
|
StateDirectory = baseNameOf cfg.dataDir;
|
||||||
|
StateDirectoryMode = 700;
|
||||||
|
})
|
||||||
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
services.cfssl = {
|
services.cfssl = {
|
||||||
|
|
Loading…
Reference in a new issue