All checks were successful
Terraform Plan / Terraform Plan (push) Successful in 17s
78 lines
2.3 KiB
Nix
78 lines
2.3 KiB
Nix
{
|
|
description = "NixOS kubeadm cluster configs";
|
|
|
|
inputs = {
|
|
nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.05";
|
|
};
|
|
|
|
outputs = { nixpkgs, ... }:
|
|
let
|
|
system = "x86_64-linux";
|
|
lib = nixpkgs.lib;
|
|
pkgs = nixpkgs.legacyPackages.${system};
|
|
nodeNames = [ "cp-1" "cp-2" "cp-3" "wk-1" "wk-2" "wk-3" ];
|
|
|
|
mkNode = {
|
|
name,
|
|
role,
|
|
extraModules ? [ ],
|
|
}:
|
|
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 {
|
|
inherit system;
|
|
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";
|
|
boot.loader.grub.devices = lib.mkDefault [ "/dev/sda" ];
|
|
fileSystems."/" = lib.mkDefault {
|
|
device = "/dev/disk/by-label/nixos";
|
|
fsType = "ext4";
|
|
};
|
|
})
|
|
] ++ extraModules;
|
|
};
|
|
|
|
mkNodeByName = name:
|
|
mkNode {
|
|
inherit name;
|
|
role = if lib.hasPrefix "cp-" name then "control-plane" else "worker";
|
|
};
|
|
|
|
mkEvalCheck = name:
|
|
let
|
|
cfg = mkNode {
|
|
inherit name;
|
|
role = if lib.hasPrefix "cp-" name then "control-plane" else "worker";
|
|
extraModules = [
|
|
({ lib, ... }: {
|
|
boot.loader.grub.devices = lib.mkDefault [ "/dev/sda" ];
|
|
fileSystems."/" = lib.mkDefault {
|
|
device = "/dev/disk/by-label/nixos";
|
|
fsType = "ext4";
|
|
};
|
|
})
|
|
];
|
|
};
|
|
in
|
|
pkgs.runCommand "eval-${name}" { } ''
|
|
cat > "$out" <<'EOF'
|
|
host=${cfg.config.networking.hostName}
|
|
role=${if lib.hasPrefix "cp-" name then "control-plane" else "worker"}
|
|
stateVersion=${cfg.config.system.stateVersion}
|
|
EOF
|
|
'';
|
|
in {
|
|
nixosConfigurations = lib.genAttrs nodeNames mkNodeByName;
|
|
|
|
checks.${system} = lib.genAttrs nodeNames mkEvalCheck;
|
|
};
|
|
}
|