Generic secrets for pgp keys.
This commit is contained in:
parent
32fda29efe
commit
df4260a35a
62
nix/kubernetes/keys/contrib/base64/package.nix
Normal file
62
nix/kubernetes/keys/contrib/base64/package.nix
Normal file
@ -0,0 +1,62 @@
|
||||
# From: https://gist.github.com/manveru/74eb41d850bc146b7e78c4cb059507e2
|
||||
# From: https://discourse.nixos.org/t/string-to-base-64/32624/3
|
||||
{ lib, ... }:
|
||||
{
|
||||
toBase64 =
|
||||
text:
|
||||
let
|
||||
inherit (lib)
|
||||
sublist
|
||||
mod
|
||||
stringToCharacters
|
||||
concatMapStrings
|
||||
;
|
||||
inherit (lib.strings) charToInt;
|
||||
inherit (builtins)
|
||||
substring
|
||||
foldl'
|
||||
genList
|
||||
elemAt
|
||||
length
|
||||
concatStringsSep
|
||||
stringLength
|
||||
;
|
||||
lookup = stringToCharacters "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
||||
sliceN =
|
||||
size: list: n:
|
||||
sublist (n * size) size list;
|
||||
pows = [
|
||||
(64 * 64 * 64)
|
||||
(64 * 64)
|
||||
64
|
||||
1
|
||||
];
|
||||
intSextets = i: map (j: mod (i / j) 64) pows;
|
||||
compose =
|
||||
f: g: x:
|
||||
f (g x);
|
||||
intToChar = elemAt lookup;
|
||||
convertTripletInt = sliceInt: concatMapStrings intToChar (intSextets sliceInt);
|
||||
sliceToInt = foldl' (acc: val: acc * 256 + val) 0;
|
||||
convertTriplet = compose convertTripletInt sliceToInt;
|
||||
join = concatStringsSep "";
|
||||
convertLastSlice =
|
||||
slice:
|
||||
let
|
||||
len = length slice;
|
||||
in
|
||||
if len == 1 then
|
||||
(substring 0 2 (convertTripletInt ((sliceToInt slice) * 256 * 256))) + "=="
|
||||
else if len == 2 then
|
||||
(substring 0 3 (convertTripletInt ((sliceToInt slice) * 256))) + "="
|
||||
else
|
||||
"";
|
||||
len = stringLength text;
|
||||
nFullSlices = len / 3;
|
||||
bytes = map charToInt (stringToCharacters text);
|
||||
tripletAt = sliceN 3 bytes;
|
||||
head = genList (compose convertTriplet tripletAt) nFullSlices;
|
||||
tail = convertLastSlice (tripletAt nFullSlices);
|
||||
in
|
||||
join (head ++ [ tail ]);
|
||||
}
|
||||
@ -13,5 +13,6 @@ symlinkJoin {
|
||||
++ (builtins.attrValues k8s.client-configs)
|
||||
++ (builtins.attrValues k8s.ssh-keys)
|
||||
++ (builtins.attrValues k8s.pgp-keys)
|
||||
++ (builtins.attrValues k8s.k8s-ssh-secrets);
|
||||
++ (builtins.attrValues k8s.k8s-ssh-secrets)
|
||||
++ (builtins.attrValues k8s.k8s-secrets-generic);
|
||||
}
|
||||
|
||||
52
nix/kubernetes/keys/package/k8s-secret-generic/package.nix
Normal file
52
nix/kubernetes/keys/package/k8s-secret-generic/package.nix
Normal file
@ -0,0 +1,52 @@
|
||||
# unpackPhase
|
||||
# patchPhase
|
||||
# configurePhase
|
||||
# buildPhase
|
||||
# checkPhase
|
||||
# installPhase
|
||||
# fixupPhase
|
||||
# installCheckPhase
|
||||
# distPhase
|
||||
{
|
||||
lib,
|
||||
pkgs,
|
||||
stdenv,
|
||||
k8s,
|
||||
kubectl,
|
||||
secret_name,
|
||||
secret_namespace,
|
||||
secret_values ? { },
|
||||
...
|
||||
}:
|
||||
let
|
||||
toBase64 = (pkgs.callPackage ../../contrib/base64/package.nix { inherit lib; }).toBase64;
|
||||
secret_yaml = {
|
||||
apiVersion = "v1";
|
||||
kind = "Secret";
|
||||
metadata = {
|
||||
name = "${secret_name}";
|
||||
namespace = "${secret_namespace}";
|
||||
};
|
||||
data = (builtins.mapAttrs (key: val: (toBase64 val)) secret_values);
|
||||
};
|
||||
settingsFormat = pkgs.formats.yaml { };
|
||||
yaml_body = settingsFormat.generate "${secret_name}.yaml" secret_yaml;
|
||||
yaml_file = pkgs.writeTextFile {
|
||||
name = "${secret_name}.yaml";
|
||||
text = (builtins.readFile yaml_body);
|
||||
};
|
||||
in
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
name = "k8s-secret-generic-${secret_name}";
|
||||
nativeBuildInputs = [ kubectl ];
|
||||
buildInputs = [ ];
|
||||
|
||||
unpackPhase = "true";
|
||||
|
||||
# lib.attrsets.mapAttrsToList
|
||||
|
||||
installPhase = ''
|
||||
mkdir "$out"
|
||||
cp "${yaml_file}" "$out/${secret_name}.yaml"
|
||||
'';
|
||||
})
|
||||
@ -129,6 +129,23 @@ makeScope newScope (
|
||||
};
|
||||
}
|
||||
);
|
||||
k8s-secrets-generic = (
|
||||
builtins.mapAttrs
|
||||
(
|
||||
secret_name: secret_config:
|
||||
(callPackage ./package/k8s-secret-generic/package.nix (
|
||||
additional_vars // { inherit secret_name; } // secret_config
|
||||
))
|
||||
)
|
||||
{
|
||||
"sops-gpg" = {
|
||||
secret_namespace = "flux-system";
|
||||
secret_values = {
|
||||
"sops.asc" = (builtins.readFile "${self.pgp-keys.flux_gpg}/flux_gpg_private_key.asc");
|
||||
};
|
||||
};
|
||||
}
|
||||
);
|
||||
client-configs = (
|
||||
builtins.mapAttrs
|
||||
(
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user