Void CLI #99
2 changed files with 56 additions and 0 deletions
52
cluster/catalog/default.nix
Normal file
52
cluster/catalog/default.nix
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
{ config, lib, ... }:
|
||||||
|
|
||||||
|
let
|
||||||
|
inherit (config) cluster flake;
|
||||||
|
in
|
||||||
|
|
||||||
|
{
|
||||||
|
perSystem = { config, pkgs, ... }: {
|
||||||
|
catalog.cluster = {
|
||||||
|
services = lib.mapAttrs (name: svc: {
|
||||||
|
description = "Cluster service: ${name}";
|
||||||
|
actions = let
|
||||||
|
mkDeployAction = { description, agents }: {
|
||||||
|
inherit description;
|
||||||
|
packages = [
|
||||||
|
config.packages.cachix
|
||||||
|
pkgs.tmux
|
||||||
|
];
|
||||||
|
command = let
|
||||||
|
cachixDeployJson = pkgs.writeText "cachix-deploy.json" (builtins.toJSON {
|
||||||
|
agents = lib.genAttrs agents (name: builtins.unsafeDiscardStringContext flake.nixosConfigurations.${name}.config.system.build.toplevel);
|
||||||
|
});
|
||||||
|
in ''
|
||||||
|
set -e
|
||||||
|
echo building ${toString (lib.length agents)} configurations in parallel
|
||||||
|
tmux new-session ${lib.concatStringsSep " split-window " (
|
||||||
|
map (host: let
|
||||||
|
drvPath = builtins.unsafeDiscardStringContext flake.nixosConfigurations.${host}.config.system.build.toplevel.drvPath;
|
||||||
|
in '' 'echo building configuration for ${host}; nix build -L --no-link --store "ssh-ng://${host}" --eval-store auto "${drvPath}^*"'\; '') agents
|
||||||
|
)} select-layout even-vertical
|
||||||
|
|
||||||
|
source ~/.config/cachix/deploy
|
||||||
|
cachix deploy activate ${cachixDeployJson}
|
||||||
|
echo
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
in {
|
||||||
|
deployAll = mkDeployAction {
|
||||||
|
description = "Deploy ALL groups of this service.";
|
||||||
|
agents = lib.unique (lib.concatLists (lib.attrValues svc.nodes));
|
||||||
|
};
|
||||||
|
} // lib.mapAttrs' (group: agents: {
|
||||||
|
name = "deployGroup-${group}";
|
||||||
|
value = mkDeployAction {
|
||||||
|
description = "Deploy the '${group}' group of this service.";
|
||||||
|
inherit agents;
|
||||||
|
};
|
||||||
|
}) svc.nodes;
|
||||||
|
}) cluster.config.services;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
|
@ -1,6 +1,10 @@
|
||||||
{ depot, lib, ... }:
|
{ depot, lib, ... }:
|
||||||
|
|
||||||
{
|
{
|
||||||
|
imports = [
|
||||||
|
./catalog
|
||||||
|
];
|
||||||
|
|
||||||
options.cluster = lib.mkOption {
|
options.cluster = lib.mkOption {
|
||||||
type = lib.types.raw;
|
type = lib.types.raw;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue