sigs.k8s.io/cluster-api@v1.7.1/internal/apis/controlplane/kubeadm/v1alpha4/conversion.go (about) 1 /* 2 Copyright 2020 The Kubernetes Authors. 3 4 Licensed under the Apache License, Version 2.0 (the "License"); 5 you may not use this file except in compliance with the License. 6 You may obtain a copy of the License at 7 8 http://www.apache.org/licenses/LICENSE-2.0 9 10 Unless required by applicable law or agreed to in writing, software 11 distributed under the License is distributed on an "AS IS" BASIS, 12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 See the License for the specific language governing permissions and 14 limitations under the License. 15 */ 16 17 package v1alpha4 18 19 import ( 20 apiconversion "k8s.io/apimachinery/pkg/conversion" 21 "sigs.k8s.io/controller-runtime/pkg/conversion" 22 23 bootstrapv1 "sigs.k8s.io/cluster-api/bootstrap/kubeadm/api/v1beta1" 24 controlplanev1 "sigs.k8s.io/cluster-api/controlplane/kubeadm/api/v1beta1" 25 bootstrapv1alpha4 "sigs.k8s.io/cluster-api/internal/apis/bootstrap/kubeadm/v1alpha4" 26 utilconversion "sigs.k8s.io/cluster-api/util/conversion" 27 ) 28 29 func (src *KubeadmControlPlane) ConvertTo(dstRaw conversion.Hub) error { 30 dst := dstRaw.(*controlplanev1.KubeadmControlPlane) 31 32 if err := Convert_v1alpha4_KubeadmControlPlane_To_v1beta1_KubeadmControlPlane(src, dst, nil); err != nil { 33 return err 34 } 35 36 // Manually restore data. 37 restored := &controlplanev1.KubeadmControlPlane{} 38 if ok, err := utilconversion.UnmarshalData(src, restored); err != nil || !ok { 39 return err 40 } 41 42 dst.Spec.KubeadmConfigSpec.Files = restored.Spec.KubeadmConfigSpec.Files 43 44 dst.Spec.KubeadmConfigSpec.Users = restored.Spec.KubeadmConfigSpec.Users 45 if restored.Spec.KubeadmConfigSpec.Users != nil { 46 for i := range restored.Spec.KubeadmConfigSpec.Users { 47 if restored.Spec.KubeadmConfigSpec.Users[i].PasswdFrom != nil { 48 dst.Spec.KubeadmConfigSpec.Users[i].PasswdFrom = restored.Spec.KubeadmConfigSpec.Users[i].PasswdFrom 49 } 50 } 51 } 52 53 dst.Spec.KubeadmConfigSpec.Ignition = restored.Spec.KubeadmConfigSpec.Ignition 54 if restored.Spec.KubeadmConfigSpec.InitConfiguration != nil { 55 if dst.Spec.KubeadmConfigSpec.InitConfiguration == nil { 56 dst.Spec.KubeadmConfigSpec.InitConfiguration = &bootstrapv1.InitConfiguration{} 57 } 58 dst.Spec.KubeadmConfigSpec.InitConfiguration.Patches = restored.Spec.KubeadmConfigSpec.InitConfiguration.Patches 59 dst.Spec.KubeadmConfigSpec.InitConfiguration.SkipPhases = restored.Spec.KubeadmConfigSpec.InitConfiguration.SkipPhases 60 } 61 if restored.Spec.KubeadmConfigSpec.JoinConfiguration != nil { 62 if dst.Spec.KubeadmConfigSpec.JoinConfiguration == nil { 63 dst.Spec.KubeadmConfigSpec.JoinConfiguration = &bootstrapv1.JoinConfiguration{} 64 } 65 dst.Spec.KubeadmConfigSpec.JoinConfiguration.Patches = restored.Spec.KubeadmConfigSpec.JoinConfiguration.Patches 66 dst.Spec.KubeadmConfigSpec.JoinConfiguration.SkipPhases = restored.Spec.KubeadmConfigSpec.JoinConfiguration.SkipPhases 67 } 68 69 dst.Spec.MachineTemplate.NodeDeletionTimeout = restored.Spec.MachineTemplate.NodeDeletionTimeout 70 dst.Spec.RolloutBefore = restored.Spec.RolloutBefore 71 dst.Spec.MachineTemplate.NodeVolumeDetachTimeout = restored.Spec.MachineTemplate.NodeVolumeDetachTimeout 72 73 if restored.Spec.KubeadmConfigSpec.JoinConfiguration != nil && restored.Spec.KubeadmConfigSpec.JoinConfiguration.NodeRegistration.ImagePullPolicy != "" { 74 if dst.Spec.KubeadmConfigSpec.JoinConfiguration == nil { 75 dst.Spec.KubeadmConfigSpec.JoinConfiguration = &bootstrapv1.JoinConfiguration{} 76 } 77 dst.Spec.KubeadmConfigSpec.JoinConfiguration.NodeRegistration.ImagePullPolicy = restored.Spec.KubeadmConfigSpec.JoinConfiguration.NodeRegistration.ImagePullPolicy 78 } 79 80 if restored.Spec.KubeadmConfigSpec.InitConfiguration != nil && restored.Spec.KubeadmConfigSpec.InitConfiguration.NodeRegistration.ImagePullPolicy != "" { 81 if dst.Spec.KubeadmConfigSpec.InitConfiguration == nil { 82 dst.Spec.KubeadmConfigSpec.InitConfiguration = &bootstrapv1.InitConfiguration{} 83 } 84 dst.Spec.KubeadmConfigSpec.InitConfiguration.NodeRegistration.ImagePullPolicy = restored.Spec.KubeadmConfigSpec.InitConfiguration.NodeRegistration.ImagePullPolicy 85 } 86 87 if restored.Spec.RemediationStrategy != nil { 88 dst.Spec.RemediationStrategy = restored.Spec.RemediationStrategy 89 } 90 if restored.Status.LastRemediation != nil { 91 dst.Status.LastRemediation = restored.Status.LastRemediation 92 } 93 94 return nil 95 } 96 97 func (dst *KubeadmControlPlane) ConvertFrom(srcRaw conversion.Hub) error { 98 src := srcRaw.(*controlplanev1.KubeadmControlPlane) 99 100 if err := Convert_v1beta1_KubeadmControlPlane_To_v1alpha4_KubeadmControlPlane(src, dst, nil); err != nil { 101 return err 102 } 103 104 // Preserve Hub data on down-conversion except for metadata 105 return utilconversion.MarshalData(src, dst) 106 } 107 108 func (src *KubeadmControlPlaneList) ConvertTo(dstRaw conversion.Hub) error { 109 dst := dstRaw.(*controlplanev1.KubeadmControlPlaneList) 110 111 return Convert_v1alpha4_KubeadmControlPlaneList_To_v1beta1_KubeadmControlPlaneList(src, dst, nil) 112 } 113 114 func (dst *KubeadmControlPlaneList) ConvertFrom(srcRaw conversion.Hub) error { 115 src := srcRaw.(*controlplanev1.KubeadmControlPlaneList) 116 117 return Convert_v1beta1_KubeadmControlPlaneList_To_v1alpha4_KubeadmControlPlaneList(src, dst, nil) 118 } 119 120 func (src *KubeadmControlPlaneTemplate) ConvertTo(dstRaw conversion.Hub) error { 121 dst := dstRaw.(*controlplanev1.KubeadmControlPlaneTemplate) 122 123 if err := Convert_v1alpha4_KubeadmControlPlaneTemplate_To_v1beta1_KubeadmControlPlaneTemplate(src, dst, nil); err != nil { 124 return err 125 } 126 127 // Manually restore data. 128 restored := &controlplanev1.KubeadmControlPlaneTemplate{} 129 if ok, err := utilconversion.UnmarshalData(src, restored); err != nil || !ok { 130 return err 131 } 132 133 dst.Spec.Template.Spec.KubeadmConfigSpec.Files = restored.Spec.Template.Spec.KubeadmConfigSpec.Files 134 dst.Spec.Template.Spec.KubeadmConfigSpec.Users = restored.Spec.Template.Spec.KubeadmConfigSpec.Users 135 dst.Spec.Template.Spec.KubeadmConfigSpec.Ignition = restored.Spec.Template.Spec.KubeadmConfigSpec.Ignition 136 dst.Spec.Template.Spec.MachineTemplate = restored.Spec.Template.Spec.MachineTemplate 137 138 if restored.Spec.Template.Spec.KubeadmConfigSpec.Users != nil { 139 for i := range restored.Spec.Template.Spec.KubeadmConfigSpec.Users { 140 if restored.Spec.Template.Spec.KubeadmConfigSpec.Users[i].PasswdFrom != nil { 141 dst.Spec.Template.Spec.KubeadmConfigSpec.Users[i].PasswdFrom = restored.Spec.Template.Spec.KubeadmConfigSpec.Users[i].PasswdFrom 142 } 143 } 144 } 145 146 dst.Spec.Template.ObjectMeta = restored.Spec.Template.ObjectMeta 147 if restored.Spec.Template.Spec.MachineTemplate != nil { 148 dst.Spec.Template.Spec.MachineTemplate.ObjectMeta = restored.Spec.Template.Spec.MachineTemplate.ObjectMeta 149 } 150 151 if restored.Spec.Template.Spec.KubeadmConfigSpec.InitConfiguration != nil { 152 if dst.Spec.Template.Spec.KubeadmConfigSpec.InitConfiguration == nil { 153 dst.Spec.Template.Spec.KubeadmConfigSpec.InitConfiguration = &bootstrapv1.InitConfiguration{} 154 } 155 dst.Spec.Template.Spec.KubeadmConfigSpec.InitConfiguration.Patches = restored.Spec.Template.Spec.KubeadmConfigSpec.InitConfiguration.Patches 156 dst.Spec.Template.Spec.KubeadmConfigSpec.InitConfiguration.SkipPhases = restored.Spec.Template.Spec.KubeadmConfigSpec.InitConfiguration.SkipPhases 157 } 158 if restored.Spec.Template.Spec.KubeadmConfigSpec.JoinConfiguration != nil { 159 if dst.Spec.Template.Spec.KubeadmConfigSpec.JoinConfiguration == nil { 160 dst.Spec.Template.Spec.KubeadmConfigSpec.JoinConfiguration = &bootstrapv1.JoinConfiguration{} 161 } 162 dst.Spec.Template.Spec.KubeadmConfigSpec.JoinConfiguration.Patches = restored.Spec.Template.Spec.KubeadmConfigSpec.JoinConfiguration.Patches 163 dst.Spec.Template.Spec.KubeadmConfigSpec.JoinConfiguration.SkipPhases = restored.Spec.Template.Spec.KubeadmConfigSpec.JoinConfiguration.SkipPhases 164 } 165 if dst.Spec.Template.Spec.MachineTemplate == nil { 166 dst.Spec.Template.Spec.MachineTemplate = restored.Spec.Template.Spec.MachineTemplate 167 } else if restored.Spec.Template.Spec.MachineTemplate != nil { 168 dst.Spec.Template.Spec.MachineTemplate.NodeDeletionTimeout = restored.Spec.Template.Spec.MachineTemplate.NodeDeletionTimeout 169 dst.Spec.Template.Spec.MachineTemplate.NodeVolumeDetachTimeout = restored.Spec.Template.Spec.MachineTemplate.NodeVolumeDetachTimeout 170 } 171 172 dst.Spec.Template.Spec.RolloutBefore = restored.Spec.Template.Spec.RolloutBefore 173 174 if restored.Spec.Template.Spec.KubeadmConfigSpec.JoinConfiguration != nil && restored.Spec.Template.Spec.KubeadmConfigSpec.JoinConfiguration.NodeRegistration.ImagePullPolicy != "" { 175 if dst.Spec.Template.Spec.KubeadmConfigSpec.JoinConfiguration == nil { 176 dst.Spec.Template.Spec.KubeadmConfigSpec.JoinConfiguration = &bootstrapv1.JoinConfiguration{} 177 } 178 dst.Spec.Template.Spec.KubeadmConfigSpec.JoinConfiguration.NodeRegistration.ImagePullPolicy = restored.Spec.Template.Spec.KubeadmConfigSpec.JoinConfiguration.NodeRegistration.ImagePullPolicy 179 } 180 181 if restored.Spec.Template.Spec.KubeadmConfigSpec.InitConfiguration != nil && restored.Spec.Template.Spec.KubeadmConfigSpec.InitConfiguration.NodeRegistration.ImagePullPolicy != "" { 182 if dst.Spec.Template.Spec.KubeadmConfigSpec.InitConfiguration == nil { 183 dst.Spec.Template.Spec.KubeadmConfigSpec.InitConfiguration = &bootstrapv1.InitConfiguration{} 184 } 185 dst.Spec.Template.Spec.KubeadmConfigSpec.InitConfiguration.NodeRegistration.ImagePullPolicy = restored.Spec.Template.Spec.KubeadmConfigSpec.InitConfiguration.NodeRegistration.ImagePullPolicy 186 } 187 188 if restored.Spec.Template.Spec.RemediationStrategy != nil { 189 dst.Spec.Template.Spec.RemediationStrategy = restored.Spec.Template.Spec.RemediationStrategy 190 } 191 192 return nil 193 } 194 195 func (dst *KubeadmControlPlaneTemplate) ConvertFrom(srcRaw conversion.Hub) error { 196 src := srcRaw.(*controlplanev1.KubeadmControlPlaneTemplate) 197 198 if err := Convert_v1beta1_KubeadmControlPlaneTemplate_To_v1alpha4_KubeadmControlPlaneTemplate(src, dst, nil); err != nil { 199 return err 200 } 201 202 // Preserve Hub data on down-conversion except for metadata 203 return utilconversion.MarshalData(src, dst) 204 } 205 206 func (src *KubeadmControlPlaneTemplateList) ConvertTo(dstRaw conversion.Hub) error { 207 dst := dstRaw.(*controlplanev1.KubeadmControlPlaneTemplateList) 208 209 return Convert_v1alpha4_KubeadmControlPlaneTemplateList_To_v1beta1_KubeadmControlPlaneTemplateList(src, dst, nil) 210 } 211 212 func (dst *KubeadmControlPlaneTemplateList) ConvertFrom(srcRaw conversion.Hub) error { 213 src := srcRaw.(*controlplanev1.KubeadmControlPlaneTemplateList) 214 215 return Convert_v1beta1_KubeadmControlPlaneTemplateList_To_v1alpha4_KubeadmControlPlaneTemplateList(src, dst, nil) 216 } 217 218 func Convert_v1alpha4_KubeadmControlPlaneSpec_To_v1beta1_KubeadmControlPlaneTemplateResourceSpec(in *KubeadmControlPlaneSpec, out *controlplanev1.KubeadmControlPlaneTemplateResourceSpec, s apiconversion.Scope) error { 219 out.MachineTemplate = &controlplanev1.KubeadmControlPlaneTemplateMachineTemplate{ 220 NodeDrainTimeout: in.MachineTemplate.NodeDrainTimeout, 221 } 222 223 if err := bootstrapv1alpha4.Convert_v1alpha4_KubeadmConfigSpec_To_v1beta1_KubeadmConfigSpec(&in.KubeadmConfigSpec, &out.KubeadmConfigSpec, s); err != nil { 224 return err 225 } 226 227 out.RolloutAfter = in.RolloutAfter 228 229 if in.RolloutStrategy != nil { 230 out.RolloutStrategy = &controlplanev1.RolloutStrategy{} 231 if len(in.RolloutStrategy.Type) > 0 { 232 out.RolloutStrategy.Type = controlplanev1.RolloutStrategyType(in.RolloutStrategy.Type) 233 } 234 if in.RolloutStrategy.RollingUpdate != nil { 235 out.RolloutStrategy.RollingUpdate = &controlplanev1.RollingUpdate{} 236 237 if in.RolloutStrategy.RollingUpdate.MaxSurge != nil { 238 out.RolloutStrategy.RollingUpdate.MaxSurge = in.RolloutStrategy.RollingUpdate.MaxSurge 239 } 240 } 241 } 242 243 return nil 244 } 245 246 func Convert_v1beta1_KubeadmControlPlaneTemplateResourceSpec_To_v1alpha4_KubeadmControlPlaneSpec(in *controlplanev1.KubeadmControlPlaneTemplateResourceSpec, out *KubeadmControlPlaneSpec, s apiconversion.Scope) error { 247 if in.MachineTemplate != nil { 248 out.MachineTemplate.NodeDrainTimeout = in.MachineTemplate.NodeDrainTimeout 249 } 250 251 if err := bootstrapv1alpha4.Convert_v1beta1_KubeadmConfigSpec_To_v1alpha4_KubeadmConfigSpec(&in.KubeadmConfigSpec, &out.KubeadmConfigSpec, s); err != nil { 252 return err 253 } 254 255 out.RolloutAfter = in.RolloutAfter 256 257 if in.RolloutStrategy != nil { 258 out.RolloutStrategy = &RolloutStrategy{} 259 if len(in.RolloutStrategy.Type) > 0 { 260 out.RolloutStrategy.Type = RolloutStrategyType(in.RolloutStrategy.Type) 261 } 262 if in.RolloutStrategy.RollingUpdate != nil { 263 out.RolloutStrategy.RollingUpdate = &RollingUpdate{} 264 265 if in.RolloutStrategy.RollingUpdate.MaxSurge != nil { 266 out.RolloutStrategy.RollingUpdate.MaxSurge = in.RolloutStrategy.RollingUpdate.MaxSurge 267 } 268 } 269 } 270 271 return nil 272 } 273 274 func Convert_v1beta1_KubeadmControlPlaneMachineTemplate_To_v1alpha4_KubeadmControlPlaneMachineTemplate(in *controlplanev1.KubeadmControlPlaneMachineTemplate, out *KubeadmControlPlaneMachineTemplate, s apiconversion.Scope) error { 275 // .NodeDrainTimeout was added in v1beta1. 276 return autoConvert_v1beta1_KubeadmControlPlaneMachineTemplate_To_v1alpha4_KubeadmControlPlaneMachineTemplate(in, out, s) 277 } 278 279 func Convert_v1beta1_KubeadmControlPlaneSpec_To_v1alpha4_KubeadmControlPlaneSpec(in *controlplanev1.KubeadmControlPlaneSpec, out *KubeadmControlPlaneSpec, scope apiconversion.Scope) error { 280 // .RolloutBefore was added in v1beta1. 281 // .RemediationStrategy was added in v1beta1. 282 return autoConvert_v1beta1_KubeadmControlPlaneSpec_To_v1alpha4_KubeadmControlPlaneSpec(in, out, scope) 283 } 284 285 func Convert_v1beta1_KubeadmControlPlaneStatus_To_v1alpha4_KubeadmControlPlaneStatus(in *controlplanev1.KubeadmControlPlaneStatus, out *KubeadmControlPlaneStatus, scope apiconversion.Scope) error { 286 // .LastRemediation was added in v1beta1. 287 return autoConvert_v1beta1_KubeadmControlPlaneStatus_To_v1alpha4_KubeadmControlPlaneStatus(in, out, scope) 288 } 289 290 func Convert_v1beta1_KubeadmControlPlaneTemplateResource_To_v1alpha4_KubeadmControlPlaneTemplateResource(in *controlplanev1.KubeadmControlPlaneTemplateResource, out *KubeadmControlPlaneTemplateResource, scope apiconversion.Scope) error { 291 // .metadata and .spec.machineTemplate.metadata was added in v1beta1. 292 return autoConvert_v1beta1_KubeadmControlPlaneTemplateResource_To_v1alpha4_KubeadmControlPlaneTemplateResource(in, out, scope) 293 }