feat: add fleet configuration options module
- Create fleet/fleet-option.nix to define athenix.fleet and athenix.hwTypes options - Use lib.evalModules to evaluate inventory separately from host configs - Enable external overrides of fleet and hardware types via lib.mkForce - Fix infinite recursion issue by avoiding config references in imports
This commit is contained in:
66
fleet/fleet-option.nix
Normal file
66
fleet/fleet-option.nix
Normal file
@@ -0,0 +1,66 @@
|
||||
# ============================================================================
|
||||
# Fleet Option Definition
|
||||
# ============================================================================
|
||||
# This module only defines the athenix.fleet option without any dependencies.
|
||||
# Used by fleet.nix to evaluate inventory data without circular dependencies.
|
||||
{ inputs, ... }:
|
||||
{ lib, ... }:
|
||||
let
|
||||
fleetDefinition = lib.mkOption {
|
||||
description = "Hardware types definitions for the fleet.";
|
||||
type = lib.types.attrsOf (lib.types.submodule ({ name, ...}: {
|
||||
options = {
|
||||
type = lib.mkOption {
|
||||
type = lib.types.oneOf [
|
||||
lib.types.str
|
||||
lib.types.listOf lib.types.str
|
||||
];
|
||||
default = name;
|
||||
description = "Type(s) of system configuration for this device.";
|
||||
};
|
||||
system = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = "x86_64-linux";
|
||||
description = "NixOS system architecture for this hardware type.";
|
||||
};
|
||||
devices = lib.mkOption {
|
||||
type = lib.types.oneOf [
|
||||
lib.types.int
|
||||
(lib.types.attrsOf
|
||||
(lib.types.submodule ({ name, ... }: {
|
||||
freeformType = lib.types.attrs;
|
||||
})
|
||||
))
|
||||
];
|
||||
};
|
||||
count = lib.mkOption {
|
||||
type = lib.types.int;
|
||||
default = 0;
|
||||
description = "Number of devices of this type to create.";
|
||||
};
|
||||
defaultCount = lib.mkOption {
|
||||
type = lib.types.int;
|
||||
default = 0;
|
||||
description = "Default number of devices to create with default configurations and numbered hostnames.";
|
||||
};
|
||||
overrides = lib.mkOption {
|
||||
type = lib.types.attrs;
|
||||
default = { };
|
||||
description = "Overrides to apply to all devices of this type.";
|
||||
};
|
||||
};
|
||||
}));
|
||||
};
|
||||
in
|
||||
{
|
||||
options.athenix = {
|
||||
fleet = fleetDefinition;
|
||||
hwTypes = lib.mkOption {
|
||||
description = "Hardware types definitions for the fleet.";
|
||||
type = lib.types.attrs;
|
||||
};
|
||||
};
|
||||
|
||||
config.athenix.fleet = lib.mkDefault (import ../inventory.nix);
|
||||
config.athenix.hwTypes = lib.mkDefault (import ../hw { inherit inputs; });
|
||||
}
|
||||
Reference in New Issue
Block a user