schema improvements

This commit is contained in:
Johannes Kirschbauer
2024-06-20 18:36:26 +02:00
committed by hsjobeki
parent d934b67c72
commit 5f72778ade
10 changed files with 244 additions and 135 deletions

View File

@@ -3,23 +3,49 @@ let
clanDir = config.clan.core.clanDir;
machineDir = clanDir + "/machines/";
cfg = config.clan.borgbackup-static;
# cfg.roles = config.clan.borgbackup-static;
# machine < machine_module < inventory
# nixos < borgbackup < borgbackup-static > UI
# metadata
# Developer User field descriptions
roles = config.clan.borgbackup-static.inventory.roles;
machine_name = config.clan.core.machineName;
in
{
imports = [ ../borgbackup ];
# imports = if myRole == "server" then [ ../borgbackup/roles/server.nix ];
# Inventory / Interface.nix
# options.clan.inventory.borgbackup-static.description.
options.clan.borgbackup-static.roles = lib.mkOption {
type = lib.types.attrsOf (lib.types.listOf lib.types.str);
# options.clan.borgbackup-static.roles = lib.mkOption {
# type = lib.types.attrsOf (lib.types.listOf lib.types.str);
# };
# Can be used via inventory.json
#
# .borgbackup-static.inventory.roles
#
options.clan.borgbackup-static.inventory = lib.mkOption {
type = lib.types.submodule {
# imports = [./inventory/interface.nix];
# idea
# config.metadata = builtins.fromTOML ...
# config.defaultRoles = ["client"];
# -> interface.nix
options = {
roles = lib.mkOption { type = lib.types.attrsOf (lib.types.listOf lib.types.str); };
};
};
};
config.services.borgbackup.repos =
let
filteredMachines = builtins.attrNames (lib.filterAttrs (_: v: builtins.elem "client" v) cfg.roles);
filteredMachines = builtins.attrNames (lib.filterAttrs (_: v: builtins.elem "client" v) roles);
borgbackupIpMachinePath = machines: machineDir + machines + "/facts/borgbackup.ssh.pub";
machinesMaybeKey = builtins.map (
@@ -40,13 +66,13 @@ in
};
}) machinesWithKey;
in
lib.mkIf (builtins.elem "server" cfg.roles.${machine_name}) (
lib.mkIf (builtins.elem "server" roles.${machine_name}) (
if (builtins.listToAttrs hosts) != null then builtins.listToAttrs hosts else { }
);
config.clan.borgbackup.destinations =
let
servers = builtins.attrNames (lib.filterAttrs (_n: v: (builtins.elem "server" v)) cfg.roles);
servers = builtins.attrNames (lib.filterAttrs (_n: v: (builtins.elem "server" v)) roles);
destinations = builtins.map (server_name: {
name = server_name;
@@ -55,5 +81,5 @@ in
};
}) servers;
in
lib.mkIf (builtins.elem "client" cfg.roles.${machine_name}) (builtins.listToAttrs destinations);
lib.mkIf (builtins.elem "client" roles.${machine_name}) (builtins.listToAttrs destinations);
}