secrets: fix: don't generate secrets if no secrets are defined
This commit is contained in:
@@ -66,12 +66,14 @@
|
|||||||
description = ''
|
description = ''
|
||||||
script to upload secrets to the deployment server
|
script to upload secrets to the deployment server
|
||||||
'';
|
'';
|
||||||
|
default = "${pkgs.coreutils}/bin/true";
|
||||||
};
|
};
|
||||||
generateSecrets = lib.mkOption {
|
generateSecrets = lib.mkOption {
|
||||||
type = lib.types.path;
|
type = lib.types.path;
|
||||||
description = ''
|
description = ''
|
||||||
script to generate secrets
|
script to generate secrets
|
||||||
'';
|
'';
|
||||||
|
default = "${pkgs.coreutils}/bin/true";
|
||||||
};
|
};
|
||||||
vm.config = lib.mkOption {
|
vm.config = lib.mkOption {
|
||||||
type = lib.types.attrs;
|
type = lib.types.attrs;
|
||||||
|
|||||||
@@ -13,44 +13,46 @@ in
|
|||||||
config = lib.mkIf (config.clanCore.secretStore == "password-store") {
|
config = lib.mkIf (config.clanCore.secretStore == "password-store") {
|
||||||
clanCore.secretsDirectory = config.clan.password-store.targetDirectory;
|
clanCore.secretsDirectory = config.clan.password-store.targetDirectory;
|
||||||
clanCore.secretsUploadDirectory = config.clan.password-store.targetDirectory;
|
clanCore.secretsUploadDirectory = config.clan.password-store.targetDirectory;
|
||||||
system.clan.generateSecrets = pkgs.writeScript "generate-secrets" ''
|
system.clan.generateSecrets = lib.mkIf (config.clanCore.secrets != { }) (
|
||||||
#!/bin/sh
|
pkgs.writeScript "generate-secrets" ''
|
||||||
set -efu
|
#!/bin/sh
|
||||||
|
set -efu
|
||||||
|
|
||||||
test -d "$CLAN_DIR"
|
test -d "$CLAN_DIR"
|
||||||
PATH=${lib.makeBinPath [
|
PATH=${lib.makeBinPath [
|
||||||
pkgs.pass
|
pkgs.pass
|
||||||
]}:$PATH
|
]}:$PATH
|
||||||
|
|
||||||
# TODO maybe initialize password store if it doesn't exist yet
|
# TODO maybe initialize password store if it doesn't exist yet
|
||||||
|
|
||||||
${lib.foldlAttrs (acc: n: v: ''
|
${lib.foldlAttrs (acc: n: v: ''
|
||||||
${acc}
|
${acc}
|
||||||
# ${n}
|
# ${n}
|
||||||
# if any of the secrets are missing, we regenerate all connected facts/secrets
|
# if any of the secrets are missing, we regenerate all connected facts/secrets
|
||||||
(if ! (${lib.concatMapStringsSep " && " (x: "test -e ${passwordstoreDir}/machines/${config.clanCore.machineName}/${x.name}.gpg >/dev/null") (lib.attrValues v.secrets)}); then
|
(if ! (${lib.concatMapStringsSep " && " (x: "test -e ${passwordstoreDir}/machines/${config.clanCore.machineName}/${x.name}.gpg >/dev/null") (lib.attrValues v.secrets)}); then
|
||||||
|
|
||||||
tmpdir=$(mktemp -d)
|
tmpdir=$(mktemp -d)
|
||||||
trap "rm -rf $tmpdir" EXIT
|
trap "rm -rf $tmpdir" EXIT
|
||||||
cd $tmpdir
|
cd $tmpdir
|
||||||
|
|
||||||
facts=$(mktemp -d)
|
facts=$(mktemp -d)
|
||||||
trap "rm -rf $facts" EXIT
|
trap "rm -rf $facts" EXIT
|
||||||
secrets=$(mktemp -d)
|
secrets=$(mktemp -d)
|
||||||
trap "rm -rf $secrets" EXIT
|
trap "rm -rf $secrets" EXIT
|
||||||
( ${v.generator} )
|
( ${v.generator} )
|
||||||
|
|
||||||
${lib.concatMapStrings (fact: ''
|
${lib.concatMapStrings (fact: ''
|
||||||
mkdir -p "$CLAN_DIR"/"$(dirname ${fact.path})"
|
mkdir -p "$CLAN_DIR"/"$(dirname ${fact.path})"
|
||||||
cp "$facts"/${fact.name} "$CLAN_DIR"/${fact.path}
|
cp "$facts"/${fact.name} "$CLAN_DIR"/${fact.path}
|
||||||
'') (lib.attrValues v.facts)}
|
'') (lib.attrValues v.facts)}
|
||||||
|
|
||||||
${lib.concatMapStrings (secret: ''
|
${lib.concatMapStrings (secret: ''
|
||||||
cat "$secrets"/${secret.name} | pass insert -m machines/${config.clanCore.machineName}/${secret.name}
|
cat "$secrets"/${secret.name} | pass insert -m machines/${config.clanCore.machineName}/${secret.name}
|
||||||
'') (lib.attrValues v.secrets)}
|
'') (lib.attrValues v.secrets)}
|
||||||
fi)
|
fi)
|
||||||
'') "" config.clanCore.secrets}
|
'') "" config.clanCore.secrets}
|
||||||
'';
|
''
|
||||||
|
);
|
||||||
system.clan.uploadSecrets = pkgs.writeScript "upload-secrets" ''
|
system.clan.uploadSecrets = pkgs.writeScript "upload-secrets" ''
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
set -efu
|
set -efu
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ in
|
|||||||
config = lib.mkIf (config.clanCore.secretStore == "sops") {
|
config = lib.mkIf (config.clanCore.secretStore == "sops") {
|
||||||
clanCore.secretsDirectory = "/run/secrets";
|
clanCore.secretsDirectory = "/run/secrets";
|
||||||
clanCore.secretsPrefix = config.clanCore.machineName + "-";
|
clanCore.secretsPrefix = config.clanCore.machineName + "-";
|
||||||
system.clan = {
|
system.clan = lib.mkIf (config.clanCore.secrets != { }) {
|
||||||
|
|
||||||
generateSecrets = pkgs.writeScript "generate-secrets" ''
|
generateSecrets = pkgs.writeScript "generate-secrets" ''
|
||||||
#!${pkgs.python3}/bin/python
|
#!${pkgs.python3}/bin/python
|
||||||
|
|||||||
Reference in New Issue
Block a user