From e9660ceeec8000dc14ee466bf4734ce739b9d1f8 Mon Sep 17 00:00:00 2001 From: File Magic Date: Thu, 16 Jul 2026 20:26:09 -0400 Subject: [PATCH] flake.nix [kubernetes/]: generate nodeConfigs dynamically from CLUSTER_INDEX and WORKER_COUNT --- kubernetes/flake.nix | 63 +++++++++++++++++++++++++++++--------------- 1 file changed, 42 insertions(+), 21 deletions(-) diff --git a/kubernetes/flake.nix b/kubernetes/flake.nix index 0027830..2f0be12 100644 --- a/kubernetes/flake.nix +++ b/kubernetes/flake.nix @@ -15,6 +15,22 @@ sshPublicKey = builtins.readFile ./ssh-public-key; k8sApiToken = "8c3ff57ab1e1de5de0dd0feddb3f26ac"; + # Read cluster configuration from environment + clusterIndex = + let + envVal = builtins.getEnv "CLUSTER_INDEX"; + in + if envVal == "" then 0 else builtins.fromJSON envVal; + + workerCount = + let + envVal = builtins.getEnv "WORKER_COUNT"; + in + if envVal == "" then 3 else builtins.fromJSON envVal; + + subnetThirdOctet = 122 + clusterIndex; + subnetPrefix = "192.168.${toString subnetThirdOctet}"; + qemuGuestModule = { imports = [ "${toString nixpkgs}/nixos/modules/profiles/qemu-guest.nix" ]; fileSystems."/" = { @@ -25,33 +41,36 @@ virtualisation.diskSize = 20480; }; - nodeConfigs = { + # Master node (always index 0) + masterNode = { k8s-master-0 = { - ip = "192.168.122.10"; + ip = "${subnetPrefix}.10"; modules = [ ./master.nix ]; }; - k8s-worker-0 = { - ip = "192.168.122.11"; - modules = [ ./worker.nix ]; - extraConfig = { - services.kubernetes.kubelet.nodeIp = "192.168.122.11"; - }; - }; - k8s-worker-1 = { - ip = "192.168.122.12"; - modules = [ ./worker.nix ]; - extraConfig = { - services.kubernetes.kubelet.nodeIp = "192.168.122.12"; - }; - }; - k8s-worker-2 = { - ip = "192.168.122.13"; + }; + + # Worker nodes (dynamically generated) + workerNodes = lib.genAttrs (lib.genList (i: "k8s-worker-${toString i}") workerCount) ( + name: + let + idx = lib.last (lib.splitString "-" name); + ipSuffix = 11 + (builtins.fromJSON idx); + in + { + ip = "${subnetPrefix}.${toString ipSuffix}"; modules = [ ./worker.nix ]; extraConfig = { - services.kubernetes.kubelet.nodeIp = "192.168.122.13"; + services.kubernetes.kubelet.nodeIp = "${subnetPrefix}.${toString ipSuffix}"; }; - }; - }; + } + ); + + nodeConfigs = masterNode // workerNodes; + + # Generate /etc/hosts content for all nodes + nodeHosts = lib.concatStringsSep "\n" ( + lib.mapAttrsToList (name: node: "${node.ip} ${name}") nodeConfigs + ); mkModules = name: node: @@ -81,6 +100,8 @@ { _module.args.sshPublicKey = sshPublicKey; _module.args.k8sApiToken = k8sApiToken; + _module.args.subnetThirdOctet = subnetThirdOctet; + _module.args.nodeHosts = nodeHosts; } ]; }; -- 2.51.2