feat(registry): add generic fleet namespace

This commit is contained in:
2026-08-23 19:55:23 -04:00
parent 21fa48d93d
commit fa3ee912f8
4 changed files with 110 additions and 0 deletions

View File

@@ -246,6 +246,51 @@
touch $out
'';
generic-registry-fleet-view =
let
hosts = {
alpha = lib.nixosSystem {
system = "x86_64-linux";
specialArgs.registry = registry;
modules = [
self.lib.registry.module
{
registry.address.alpha.service = "10.0.0.5";
system.stateVersion = "26.11";
}
];
};
beta = lib.nixosSystem {
system = "x86_64-linux";
specialArgs.registry = registry;
modules = [
self.lib.registry.module
(
{ registry, ... }:
{
environment.etc."registry-address-check".text = registry.address.alpha.service;
system.stateVersion = "26.11";
}
)
];
};
};
registry = self.lib.registry.collect { inherit hosts; };
betaConfig = hosts.beta.config;
in
pkgs.runCommand "generic-registry-fleet-view-check" { } ''
${
lib.optionalString (
!(
registry.address.alpha.service == "10.0.0.5"
&& betaConfig.environment.etc."registry-address-check".text == "10.0.0.5"
&& !(registry.address ? alpha-service)
)
) "exit 1"
}
touch $out
'';
network-endpoint-fleet-registry =
let
hostEndpointConfig =

View File

@@ -14,6 +14,11 @@ let
;
serviceIdentityRegistry = import ./service-identities.nix { inherit lib; };
registryLib = import ./registry.nix { inherit lib; };
registry = registryLib.load {
dir = self + "/registry";
args = { inherit lib; };
};
networkEndpoints = import ./network-endpoints.nix { inherit lib; };
reverseProxyRoutes = import ./reverse-proxy-routes.nix { inherit lib; };
@@ -41,6 +46,7 @@ let
{
inherit inputs networkFleetEndpoints self;
my = self.lib;
registry = self.lib.registry.collect { hosts = self.nixosConfigurations; };
reverseProxyFleetRoutes = self.lib.reverseProxyRoutes.collectFleetRoutes self.nixosConfigurations networkFleetEndpoints;
};
@@ -71,6 +77,7 @@ let
inputs.disko.nixosModules.disko
inputs.sops-nix.nixosModules.sops
inputs.stylix.nixosModules.stylix
registry.module
(self + "/system.nix")
(self + "/hosts/${hostName}")
{ networking.hostName = hostName; }
@@ -90,6 +97,7 @@ in
mkHost
mkHosts
bridgeName
registry
networkEndpoints
reverseProxyRoutes
;

53
lib/registry.nix Normal file
View File

@@ -0,0 +1,53 @@
{ lib }:
let
inherit (lib)
filterAttrs
hasSuffix
mapAttrs
mapAttrs'
mkOption
nameValuePair
removeSuffix
types
;
registryName = fileName: removeSuffix ".nix" fileName;
registryOption = registry: mkOption {
type = types.attrsOf (types.attrsOf registry.type);
default = { };
description = ''
Lazily collected fleet-visible registry entries, nested by host and entry name.
'';
};
in
{
load =
{
dir,
args ? { },
}:
let
definitions = mapAttrs' (
name: type:
let
path = dir + "/${name}";
in
nameValuePair (registryName name) (import path args)
) (filterAttrs (name: type: type == "regular" && hasSuffix ".nix" name) (builtins.readDir dir));
in
{
inherit definitions;
module = {
options.registry = mapAttrs (_name: registry: registryOption registry) definitions;
};
collect =
{ hosts }:
mapAttrs (
registryName: _registry:
mapAttrs (hostName: host: host.config.registry.${registryName}.${hostName} or { }) hosts
) definitions;
};
}

4
registry/address.nix Normal file
View File

@@ -0,0 +1,4 @@
{ lib }:
{
type = lib.types.str;
}