Tom Hubrecht
6c4099d369
All checks were successful
Check meta / check_meta (pull_request) Successful in 17s
Check meta / check_dns (pull_request) Successful in 16s
build configuration / build_compute01 (pull_request) Successful in 1m19s
build configuration / build_storage01 (pull_request) Successful in 1m15s
build configuration / build_vault01 (pull_request) Successful in 1m10s
build configuration / build_krz01 (pull_request) Successful in 2m4s
build configuration / build_web01 (pull_request) Successful in 1m40s
build configuration / build_web02 (pull_request) Successful in 1m12s
lint / check (pull_request) Successful in 24s
build configuration / build_geo01 (pull_request) Successful in 1m7s
build configuration / build_rescue01 (pull_request) Successful in 1m10s
build configuration / build_geo02 (pull_request) Successful in 1m7s
build configuration / build_bridge01 (pull_request) Successful in 1m8s
build configuration / push_to_cache_vault01 (pull_request) Successful in 1m56s
build configuration / push_to_cache_storage01 (pull_request) Successful in 1m57s
build configuration / push_to_cache_compute01 (pull_request) Successful in 2m19s
build configuration / push_to_cache_web01 (pull_request) Successful in 2m21s
build configuration / push_to_cache_krz01 (pull_request) Successful in 2m30s
build configuration / push_to_cache_geo01 (pull_request) Successful in 1m8s
build configuration / push_to_cache_web02 (pull_request) Successful in 1m17s
Check meta / check_meta (push) Successful in 17s
Check meta / check_dns (push) Successful in 17s
build configuration / push_to_cache_geo02 (pull_request) Successful in 1m11s
build configuration / push_to_cache_bridge01 (pull_request) Successful in 1m10s
build configuration / push_to_cache_rescue01 (pull_request) Successful in 1m23s
build configuration / build_storage01 (push) Successful in 1m16s
build configuration / build_vault01 (push) Successful in 1m13s
build configuration / build_compute01 (push) Successful in 1m20s
build configuration / build_web01 (push) Successful in 1m38s
build configuration / build_krz01 (push) Successful in 1m58s
lint / check (push) Successful in 25s
build configuration / build_web02 (push) Successful in 1m9s
build configuration / build_geo01 (push) Successful in 1m9s
build configuration / build_geo02 (push) Successful in 1m10s
build configuration / build_rescue01 (push) Successful in 1m15s
build configuration / build_bridge01 (push) Successful in 1m2s
build configuration / push_to_cache_storage01 (push) Successful in 1m25s
build configuration / push_to_cache_vault01 (push) Successful in 1m37s
build configuration / push_to_cache_web02 (push) Successful in 1m21s
build configuration / push_to_cache_compute01 (push) Successful in 1m56s
build configuration / push_to_cache_web01 (push) Successful in 2m18s
build configuration / push_to_cache_geo01 (push) Successful in 1m15s
build configuration / push_to_cache_krz01 (push) Successful in 2m25s
build configuration / push_to_cache_geo02 (push) Successful in 1m8s
build configuration / push_to_cache_bridge01 (push) Successful in 1m8s
build configuration / push_to_cache_rescue01 (push) Successful in 1m23s
130 lines
2.6 KiB
Nix
130 lines
2.6 KiB
Nix
{
|
|
config,
|
|
lib,
|
|
dgn-keys,
|
|
name,
|
|
...
|
|
}:
|
|
|
|
let
|
|
inherit (lib) mkEnableOption mkOption remove;
|
|
|
|
inherit (lib.types)
|
|
attrs
|
|
attrsOf
|
|
listOf
|
|
str
|
|
submodule
|
|
;
|
|
|
|
cfg = config.dgn-backups;
|
|
|
|
homes = {
|
|
compute01 = "/data/slow/bupstash";
|
|
geo01 = "/data/bupstash";
|
|
geo02 = "/data/bupstash";
|
|
storage01 = "/data/slow/bupstash";
|
|
};
|
|
|
|
starts = {
|
|
compute01 = "*-*-* *:38:00";
|
|
storage01 = "*-*-* *:21:00";
|
|
web01 = "*-*-* *:47:00";
|
|
};
|
|
|
|
mkJobs = builtins.mapAttrs (
|
|
_:
|
|
{ to, settings }:
|
|
{
|
|
startAt = starts.${name};
|
|
key = config.age.secrets."bupstash-put_key".path;
|
|
repositoryCommands = lib.extra.mapSingleFuse (
|
|
host: "ssh -i /etc/ssh/ssh_host_ed25519_key bupstash-repo@${host}.dgnum"
|
|
) to;
|
|
}
|
|
// settings
|
|
);
|
|
in
|
|
|
|
{
|
|
options.dgn-backups = {
|
|
enable = mkEnableOption "DGNum backup service.";
|
|
|
|
postgresDatabases = mkOption {
|
|
type = listOf str;
|
|
default = [ ];
|
|
description = ''
|
|
List of postgres databases to dump into bupstash.
|
|
'';
|
|
};
|
|
|
|
jobs = mkOption {
|
|
type = attrsOf (submodule {
|
|
options = {
|
|
to = mkOption {
|
|
type = listOf str;
|
|
default = remove name [
|
|
"compute01"
|
|
"geo01"
|
|
"geo02"
|
|
"storage01"
|
|
];
|
|
description = "Hosts to send the backups to.";
|
|
};
|
|
|
|
settings = mkOption {
|
|
type = attrs;
|
|
default = { };
|
|
description = "Base bupstash job config.";
|
|
};
|
|
};
|
|
});
|
|
default = { };
|
|
description = "List of bupstash jobs.";
|
|
};
|
|
};
|
|
|
|
config = {
|
|
dgn-backups.jobs = lib.extra.mapFuse (db: {
|
|
"${db}-db".settings = {
|
|
user = "postgres";
|
|
command = [
|
|
"${lib.getExe' config.services.postgresql.package "pg_dump"}"
|
|
db
|
|
];
|
|
};
|
|
}) cfg.postgresDatabases;
|
|
|
|
services.bupstash = {
|
|
repositories = {
|
|
inherit (cfg) enable;
|
|
|
|
home = homes.${name};
|
|
|
|
access = [
|
|
{
|
|
repo = "default";
|
|
keys = dgn-keys.getKeys [
|
|
"compute01"
|
|
"storage01"
|
|
"vault01"
|
|
"web01"
|
|
];
|
|
allowed = [ "put" ];
|
|
}
|
|
];
|
|
};
|
|
|
|
jobs = mkJobs cfg.jobs;
|
|
};
|
|
|
|
programs.ssh.knownHosts =
|
|
lib.extra.mapFuse (host: { "${host}.dgnum".publicKey = builtins.head dgn-keys._keys.${host}; })
|
|
[
|
|
"compute01"
|
|
"geo01"
|
|
"geo02"
|
|
"storage01"
|
|
];
|
|
};
|
|
}
|