with import {}; let etcdNodes = { k1-0 = "10.1.30.100"; k1-1 = "10.1.30.101"; k1-2 = "10.1.30.102"; }; etcdCluster = { enable = true; existing = true; nodes = etcdNodes; }; master = { features.host = { name = "k1-0"; address = "10.1.30.100"; }; features.k8s = { host.name = "k1-0"; host.address = "10.1.30.100"; master.enable = true; master.socat443 = true; nodes = nodes; inherit etcdCluster; }; imports = [ ./cluster.nix ./hw/k1-0.nix ]; }; nodes = [ { name = "k1-1"; address = "10.1.30.101"; } { name = "k1-2"; address = "10.1.30.102"; } { name = "k1-3"; address = "10.1.30.103"; } { name = "k1-4"; address = "10.1.30.104"; } { name = "k1-5"; address = "10.1.30.105"; } ]; mkNode = x: { "${x.name}" = lib.mkMerge [ { features.host = x; } (if builtins.hasAttr x.name etcdNodes then { features.k8s = { inherit etcdCluster; }; } else {}) ] // { imports = [ ./cluster.nix (./hw + "/${x.name}.nix") ]; }; }; in builtins.foldl' (a: x: a // mkNode x) { "${master.features.host.name}" = master; } nodes