Inventory: implement borgbackup
This commit is contained in:
committed by
hsjobeki
parent
8d060d8243
commit
feace3a8e9
89
inventory/default.nix
Normal file
89
inventory/default.nix
Normal file
@@ -0,0 +1,89 @@
|
||||
{ inputs, self, ... }:
|
||||
let
|
||||
clan-core = self;
|
||||
system = "x86_64-linux";
|
||||
pkgs = clan-core.inputs.nixpkgs.legacyPackages.${system};
|
||||
|
||||
# syncthing_inventory = builtins.fromJSON (builtins.readFile ./src/tests/syncthing.json);
|
||||
syncthing_inventory = builtins.fromJSON (builtins.readFile ./src/tests/borgbackup.json);
|
||||
|
||||
machines = machinesFromInventory {
|
||||
inherit clan-core;
|
||||
lib = pkgs.lib;
|
||||
} syncthing_inventory;
|
||||
|
||||
/*
|
||||
Returns a NixOS configuration for every machine in the inventory.
|
||||
|
||||
machinesFromInventory :: Inventory -> { ${machine_name} :: NixOSConfiguration }
|
||||
*/
|
||||
machinesFromInventory =
|
||||
{ lib, clan-core, ... }:
|
||||
inventory:
|
||||
# For every machine in the inventory, build a NixOS configuration
|
||||
# For each machine generate config, forEach service, if the machine is used.
|
||||
builtins.mapAttrs (
|
||||
machine_name: _:
|
||||
builtins.foldl' (
|
||||
acc: service_name:
|
||||
let
|
||||
service_config = inventory.services.${service_name};
|
||||
isInService = builtins.elem machine_name (builtins.attrNames service_config.machineConfig);
|
||||
|
||||
machine_service_config = (service_config.machineConfig.${machine_name} or { }).config or { };
|
||||
global_config = inventory.services.${service_name}.config;
|
||||
module_name = inventory.services.${service_name}.module;
|
||||
in
|
||||
# Possible roles: "server", "client", "peer"
|
||||
if
|
||||
builtins.trace ''
|
||||
isInService ${builtins.toJSON isInService},
|
||||
${builtins.toJSON machine_name} ${builtins.toJSON (builtins.attrNames service_config.machineConfig)}
|
||||
'' isInService
|
||||
then
|
||||
acc
|
||||
++ [
|
||||
{
|
||||
imports = [ clan-core.clanModules.${module_name} ];
|
||||
config.clan.${module_name} = lib.mkMerge [
|
||||
global_config
|
||||
machine_service_config
|
||||
];
|
||||
}
|
||||
{
|
||||
config.clan.${module_name} = {
|
||||
# TODO: filter, show only the roles that are needed by the machine
|
||||
roles = builtins.mapAttrs (_m: c: c.roles) service_config.machineConfig;
|
||||
};
|
||||
}
|
||||
]
|
||||
else
|
||||
acc
|
||||
) [ ] (builtins.attrNames inventory.services)
|
||||
) inventory.machines;
|
||||
in
|
||||
{
|
||||
clan = clan-core.lib.buildClan {
|
||||
meta.name = "vis clans";
|
||||
# Should usually point to the directory of flake.nix
|
||||
directory = self;
|
||||
|
||||
machines = {
|
||||
"vi_machine" = {
|
||||
imports = machines.vi_machine;
|
||||
};
|
||||
"vyr_machine" = {
|
||||
imports = machines.vyr_machine;
|
||||
};
|
||||
"camina_machine" = {
|
||||
imports = machines.camina_machine;
|
||||
};
|
||||
};
|
||||
};
|
||||
intern = machines;
|
||||
# inherit (clan) nixosConfigurations clanInternals;
|
||||
# add the Clan cli tool to the dev shell
|
||||
devShells.${system}.default = pkgs.mkShell {
|
||||
packages = [ clan-core.packages.${system}.clan-cli ];
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user