with import {}; let etcdNodes = { k2-0 = "10.1.8.60"; k2-1 = "10.1.8.61"; k2-2 = "10.1.8.62"; }; etcdCluster = { enable = true; existing = true; nodes = etcdNodes; }; master = { features.k8s = { host.name = "k2-0"; host.address = "10.1.8.60"; master.enable = true; nodes = nodes; inherit etcdCluster; }; fileSystems = { "/vol/local-storage/vol1" = { device = "/vol/vol1"; options = [ "bind" ]; }; }; services.kubernetes.kubelet.taints.unschedulable = { key = "node.kubernetes.io/unschedulable"; value = "true"; effect = "NoSchedule"; }; imports = [ ./cluster.nix ./hw/k2-0.nix ]; }; nodes = [ { name = "k2-1"; address = "10.1.8.61"; } { name = "k2-2"; address = "10.1.8.62"; } { name = "k2-3"; address = "10.1.8.63"; } { name = "k2-4"; address = "10.1.8.64"; } { name = "k2-5"; address = "10.1.8.65"; } { name = "k2-6"; address = "10.1.8.66"; } ]; mkNode = x: { "${x.name}" = lib.mkMerge [ { features.k8s.host = x; } (if builtins.hasAttr x.name etcdNodes then { features.k8s = { inherit etcdCluster; }; } else {}) (if x.name == "k2-6" then { services.kubernetes.kubelet.taints.sonarqube = { key = "reserved"; value = "sonarqube"; effect = "NoSchedule"; }; } else {}) ] // { imports = [ ./cluster.nix (./hw + "/${x.name}.nix") ]; }; }; in builtins.foldl' (a: x: a // mkNode x) { "${master.features.k8s.host.name}" = master; } nodes