@@ -34,10 +34,10 @@ extension K8sHelper {
3434 }
3535
3636 static func bootstrapControlPlane(
37- nodeID: String , apiServerSANs: [ String ] , advertiseAddress: String ,
37+ nodeID: String , nodeImage : String , apiServerSANs: [ String ] , advertiseAddress: String ,
3838 schedulable: Bool , cniManifestPath: String ? = nil , client: ContainerClient , log: Logger
3939 ) async throws {
40- let configYAML = initConfigYAML ( advertiseAddress: advertiseAddress, certSANs: apiServerSANs)
40+ let configYAML = try initConfigYAML ( nodeImage : nodeImage , advertiseAddress: advertiseAddress, certSANs: apiServerSANs)
4141 var r = try await execCapture (
4242 containerId: nodeID, executable: " /bin/sh " ,
4343 arguments: [ " -c " , " cat > /etc/kubernetes/kubeadm-config.yaml <<'EOF' \n \( configYAML) \n EOF " ] ,
@@ -144,7 +144,7 @@ extension K8sHelper {
144144 """
145145 }
146146
147- private static func initConfigYAML( advertiseAddress: String , certSANs: [ String ] ) -> String {
147+ private static func initConfigYAML( nodeImage : String , advertiseAddress: String , certSANs: [ String ] ) throws -> String {
148148 let sans = certSANs. map { " - \( $0) " } . joined ( separator: " \n " )
149149 return """
150150 apiVersion: kubeadm.k8s.io/v1beta4
@@ -157,7 +157,7 @@ extension K8sHelper {
157157 ---
158158 apiVersion: kubeadm.k8s.io/v1beta4
159159 kind: ClusterConfiguration
160- kubernetesVersion: \( kubernetesVersion ( ) )
160+ kubernetesVersion: \( try kubernetesVersion ( nodeImage : nodeImage ) )
161161 networking:
162162 podSubnet: \( podSubnet)
163163 apiServer:
@@ -171,9 +171,14 @@ extension K8sHelper {
171171 """
172172 }
173173
174- private static func kubernetesVersion( ) -> String {
174+ /// kubeadm needs the exact version, and only the tag carries it.
175+ static func kubernetesVersion( nodeImage: String ) throws -> String {
175176 let nameAndTag = nodeImage. split ( separator: " @ " ) . first. map ( String . init) ?? nodeImage
176- guard let ref = try ? Reference . parse ( nameAndTag) , let tag = ref. tag else { return " v1.35 " }
177+ guard let ref = try ? Reference . parse ( nameAndTag) , let tag = ref. tag else {
178+ throw ContainerizationError (
179+ . invalidArgument,
180+ message: " node image \( nodeImage) has no tag; use a tagged image such as docker.io/kindest/node:v1.34.11 " )
181+ }
177182 return tag
178183 }
179184}
0 commit comments