refactor: generate kubeadm host configs from flake
All checks were successful
Terraform Plan / Terraform Plan (push) Successful in 17s

This commit is contained in:
2026-02-28 16:09:05 +00:00
parent 7206d8cd41
commit abac6300ca
8 changed files with 24 additions and 101 deletions

View File

@@ -12,6 +12,7 @@ This folder defines role-based NixOS configs for a kubeadm cluster.
- Shared Kubernetes/node prerequisites in `modules/k8s-common.nix` - Shared Kubernetes/node prerequisites in `modules/k8s-common.nix`
- Shared cluster defaults in `modules/k8s-cluster-settings.nix` - Shared cluster defaults in `modules/k8s-cluster-settings.nix`
- Role-specific settings for control planes and workers - Role-specific settings for control planes and workers
- Generated per-node host configs from `flake.nix` (no duplicated host files)
- Bootstrap helper commands: - Bootstrap helper commands:
- `th-kubeadm-init` - `th-kubeadm-init`
- `th-kubeadm-join-control-plane` - `th-kubeadm-join-control-plane`
@@ -20,7 +21,7 @@ This folder defines role-based NixOS configs for a kubeadm cluster.
## Hardware config files ## Hardware config files
Each host file optionally imports `hosts/hardware/<host>.nix` if present. The flake automatically imports `hosts/hardware/<host>.nix` if present.
Copy each node's generated hardware config into this folder: Copy each node's generated hardware config into this folder:
```bash ```bash

View File

@@ -8,19 +8,31 @@
outputs = { nixpkgs, ... }: outputs = { nixpkgs, ... }:
let let
system = "x86_64-linux"; system = "x86_64-linux";
mkHost = hostModules: lib = nixpkgs.lib;
mkNode = { name, role }:
let
roleModule = if role == "control-plane" then ./modules/k8s-control-plane.nix else ./modules/k8s-worker.nix;
hardwarePath = ./hosts/hardware + "/${name}.nix";
in
nixpkgs.lib.nixosSystem { nixpkgs.lib.nixosSystem {
inherit system; inherit system;
modules = hostModules; modules = [
./modules/k8s-cluster-settings.nix
./modules/k8s-common.nix
roleModule
({ lib, ... }: {
imports = lib.optional (builtins.pathExists hardwarePath) hardwarePath;
networking.hostName = name;
system.stateVersion = "25.05";
})
];
}; };
in { in {
nixosConfigurations = { nixosConfigurations = lib.genAttrs [ "cp-1" "cp-2" "cp-3" "wk-1" "wk-2" "wk-3" ] (name:
cp-1 = mkHost [ ./hosts/cp-1.nix ]; mkNode {
cp-2 = mkHost [ ./hosts/cp-2.nix ]; inherit name;
cp-3 = mkHost [ ./hosts/cp-3.nix ]; role = if lib.hasPrefix "cp-" name then "control-plane" else "worker";
wk-1 = mkHost [ ./hosts/wk-1.nix ]; });
wk-2 = mkHost [ ./hosts/wk-2.nix ];
wk-3 = mkHost [ ./hosts/wk-3.nix ];
};
}; };
} }

View File

@@ -1,15 +0,0 @@
{ lib, ... }:
{
imports =
[
../modules/k8s-cluster-settings.nix
../modules/k8s-common.nix
../modules/k8s-control-plane.nix
]
++ lib.optional (builtins.pathExists ./hardware/cp-1.nix) ./hardware/cp-1.nix;
networking.hostName = "cp-1";
system.stateVersion = "25.05";
}

View File

@@ -1,15 +0,0 @@
{ lib, ... }:
{
imports =
[
../modules/k8s-cluster-settings.nix
../modules/k8s-common.nix
../modules/k8s-control-plane.nix
]
++ lib.optional (builtins.pathExists ./hardware/cp-2.nix) ./hardware/cp-2.nix;
networking.hostName = "cp-2";
system.stateVersion = "25.05";
}

View File

@@ -1,15 +0,0 @@
{ lib, ... }:
{
imports =
[
../modules/k8s-cluster-settings.nix
../modules/k8s-common.nix
../modules/k8s-control-plane.nix
]
++ lib.optional (builtins.pathExists ./hardware/cp-3.nix) ./hardware/cp-3.nix;
networking.hostName = "cp-3";
system.stateVersion = "25.05";
}

View File

@@ -1,15 +0,0 @@
{ lib, ... }:
{
imports =
[
../modules/k8s-cluster-settings.nix
../modules/k8s-common.nix
../modules/k8s-worker.nix
]
++ lib.optional (builtins.pathExists ./hardware/wk-1.nix) ./hardware/wk-1.nix;
networking.hostName = "wk-1";
system.stateVersion = "25.05";
}

View File

@@ -1,15 +0,0 @@
{ lib, ... }:
{
imports =
[
../modules/k8s-cluster-settings.nix
../modules/k8s-common.nix
../modules/k8s-worker.nix
]
++ lib.optional (builtins.pathExists ./hardware/wk-2.nix) ./hardware/wk-2.nix;
networking.hostName = "wk-2";
system.stateVersion = "25.05";
}

View File

@@ -1,15 +0,0 @@
{ lib, ... }:
{
imports =
[
../modules/k8s-cluster-settings.nix
../modules/k8s-common.nix
../modules/k8s-worker.nix
]
++ lib.optional (builtins.pathExists ./hardware/wk-3.nix) ./hardware/wk-3.nix;
networking.hostName = "wk-3";
system.stateVersion = "25.05";
}