sigs.k8s.io/cluster-api@v1.7.1/internal/apis/controlplane/kubeadm/v1alpha3/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 v1alpha3 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 utilconversion "sigs.k8s.io/cluster-api/util/conversion" 26 ) 27 28 func (src *KubeadmControlPlane) ConvertTo(dstRaw conversion.Hub) error { 29 dst := dstRaw.(*controlplanev1.KubeadmControlPlane) 30 31 if err := Convert_v1alpha3_KubeadmControlPlane_To_v1beta1_KubeadmControlPlane(src, dst, nil); err != nil { 32 return err 33 } 34 35 // Manually restore data. 36 restored := &controlplanev1.KubeadmControlPlane{} 37 if ok, err := utilconversion.UnmarshalData(src, restored); err != nil || !ok { 38 return err 39 } 40 41 dst.Spec.MachineTemplate.ObjectMeta = restored.Spec.MachineTemplate.ObjectMeta 42 dst.Spec.MachineTemplate.NodeDeletionTimeout = restored.Spec.MachineTemplate.NodeDeletionTimeout 43 dst.Spec.KubeadmConfigSpec.Files = restored.Spec.KubeadmConfigSpec.Files 44 dst.Spec.KubeadmConfigSpec.Users = restored.Spec.KubeadmConfigSpec.Users 45 dst.Spec.MachineTemplate.NodeVolumeDetachTimeout = restored.Spec.MachineTemplate.NodeVolumeDetachTimeout 46 dst.Status.Version = restored.Status.Version 47 48 if restored.Spec.KubeadmConfigSpec.Users != nil { 49 for i := range restored.Spec.KubeadmConfigSpec.Users { 50 if restored.Spec.KubeadmConfigSpec.Users[i].PasswdFrom != nil { 51 dst.Spec.KubeadmConfigSpec.Users[i].PasswdFrom = restored.Spec.KubeadmConfigSpec.Users[i].PasswdFrom 52 } 53 } 54 } 55 56 if restored.Spec.KubeadmConfigSpec.JoinConfiguration != nil && restored.Spec.KubeadmConfigSpec.JoinConfiguration.NodeRegistration.IgnorePreflightErrors != nil { 57 if dst.Spec.KubeadmConfigSpec.JoinConfiguration == nil { 58 dst.Spec.KubeadmConfigSpec.JoinConfiguration = &bootstrapv1.JoinConfiguration{} 59 } 60 dst.Spec.KubeadmConfigSpec.JoinConfiguration.NodeRegistration.IgnorePreflightErrors = restored.Spec.KubeadmConfigSpec.JoinConfiguration.NodeRegistration.IgnorePreflightErrors 61 } 62 63 if restored.Spec.KubeadmConfigSpec.InitConfiguration != nil && restored.Spec.KubeadmConfigSpec.InitConfiguration.NodeRegistration.IgnorePreflightErrors != nil { 64 if dst.Spec.KubeadmConfigSpec.InitConfiguration == nil { 65 dst.Spec.KubeadmConfigSpec.InitConfiguration = &bootstrapv1.InitConfiguration{} 66 } 67 dst.Spec.KubeadmConfigSpec.InitConfiguration.NodeRegistration.IgnorePreflightErrors = restored.Spec.KubeadmConfigSpec.InitConfiguration.NodeRegistration.IgnorePreflightErrors 68 } 69 70 dst.Spec.KubeadmConfigSpec.Ignition = restored.Spec.KubeadmConfigSpec.Ignition 71 if restored.Spec.KubeadmConfigSpec.InitConfiguration != nil { 72 if dst.Spec.KubeadmConfigSpec.InitConfiguration == nil { 73 dst.Spec.KubeadmConfigSpec.InitConfiguration = &bootstrapv1.InitConfiguration{} 74 } 75 dst.Spec.KubeadmConfigSpec.InitConfiguration.Patches = restored.Spec.KubeadmConfigSpec.InitConfiguration.Patches 76 dst.Spec.KubeadmConfigSpec.InitConfiguration.SkipPhases = restored.Spec.KubeadmConfigSpec.InitConfiguration.SkipPhases 77 } 78 if restored.Spec.KubeadmConfigSpec.JoinConfiguration != nil { 79 if dst.Spec.KubeadmConfigSpec.JoinConfiguration == nil { 80 dst.Spec.KubeadmConfigSpec.JoinConfiguration = &bootstrapv1.JoinConfiguration{} 81 } 82 dst.Spec.KubeadmConfigSpec.JoinConfiguration.Patches = restored.Spec.KubeadmConfigSpec.JoinConfiguration.Patches 83 dst.Spec.KubeadmConfigSpec.JoinConfiguration.SkipPhases = restored.Spec.KubeadmConfigSpec.JoinConfiguration.SkipPhases 84 } 85 86 dst.Spec.RolloutBefore = restored.Spec.RolloutBefore 87 88 if restored.Spec.KubeadmConfigSpec.JoinConfiguration != nil && restored.Spec.KubeadmConfigSpec.JoinConfiguration.NodeRegistration.ImagePullPolicy != "" { 89 if dst.Spec.KubeadmConfigSpec.JoinConfiguration == nil { 90 dst.Spec.KubeadmConfigSpec.JoinConfiguration = &bootstrapv1.JoinConfiguration{} 91 } 92 dst.Spec.KubeadmConfigSpec.JoinConfiguration.NodeRegistration.ImagePullPolicy = restored.Spec.KubeadmConfigSpec.JoinConfiguration.NodeRegistration.ImagePullPolicy 93 } 94 95 if restored.Spec.KubeadmConfigSpec.InitConfiguration != nil && restored.Spec.KubeadmConfigSpec.InitConfiguration.NodeRegistration.ImagePullPolicy != "" { 96 if dst.Spec.KubeadmConfigSpec.InitConfiguration == nil { 97 dst.Spec.KubeadmConfigSpec.InitConfiguration = &bootstrapv1.InitConfiguration{} 98 } 99 dst.Spec.KubeadmConfigSpec.InitConfiguration.NodeRegistration.ImagePullPolicy = restored.Spec.KubeadmConfigSpec.InitConfiguration.NodeRegistration.ImagePullPolicy 100 } 101 102 if restored.Spec.RemediationStrategy != nil { 103 dst.Spec.RemediationStrategy = restored.Spec.RemediationStrategy 104 } 105 if restored.Status.LastRemediation != nil { 106 dst.Status.LastRemediation = restored.Status.LastRemediation 107 } 108 109 return nil 110 } 111 112 func (dst *KubeadmControlPlane) ConvertFrom(srcRaw conversion.Hub) error { 113 src := srcRaw.(*controlplanev1.KubeadmControlPlane) 114 115 if err := Convert_v1beta1_KubeadmControlPlane_To_v1alpha3_KubeadmControlPlane(src, dst, nil); err != nil { 116 return err 117 } 118 119 // Preserve Hub data on down-conversion except for metadata 120 if err := utilconversion.MarshalData(src, dst); err != nil { 121 return err 122 } 123 124 return nil 125 } 126 127 func (src *KubeadmControlPlaneList) ConvertTo(dstRaw conversion.Hub) error { 128 dst := dstRaw.(*controlplanev1.KubeadmControlPlaneList) 129 130 return Convert_v1alpha3_KubeadmControlPlaneList_To_v1beta1_KubeadmControlPlaneList(src, dst, nil) 131 } 132 133 func (dst *KubeadmControlPlaneList) ConvertFrom(srcRaw conversion.Hub) error { 134 src := srcRaw.(*controlplanev1.KubeadmControlPlaneList) 135 136 return Convert_v1beta1_KubeadmControlPlaneList_To_v1alpha3_KubeadmControlPlaneList(src, dst, nil) 137 } 138 139 func Convert_v1beta1_KubeadmControlPlaneSpec_To_v1alpha3_KubeadmControlPlaneSpec(in *controlplanev1.KubeadmControlPlaneSpec, out *KubeadmControlPlaneSpec, s apiconversion.Scope) error { 140 out.UpgradeAfter = in.RolloutAfter 141 out.InfrastructureTemplate = in.MachineTemplate.InfrastructureRef 142 out.NodeDrainTimeout = in.MachineTemplate.NodeDrainTimeout 143 return autoConvert_v1beta1_KubeadmControlPlaneSpec_To_v1alpha3_KubeadmControlPlaneSpec(in, out, s) 144 } 145 146 func Convert_v1beta1_KubeadmControlPlaneStatus_To_v1alpha3_KubeadmControlPlaneStatus(in *controlplanev1.KubeadmControlPlaneStatus, out *KubeadmControlPlaneStatus, s apiconversion.Scope) error { 147 // NOTE: custom conversion func is required because status.Version does not exist in v1alpha3. 148 return autoConvert_v1beta1_KubeadmControlPlaneStatus_To_v1alpha3_KubeadmControlPlaneStatus(in, out, s) 149 } 150 151 func Convert_v1alpha3_KubeadmControlPlaneSpec_To_v1beta1_KubeadmControlPlaneSpec(in *KubeadmControlPlaneSpec, out *controlplanev1.KubeadmControlPlaneSpec, s apiconversion.Scope) error { 152 out.RolloutAfter = in.UpgradeAfter 153 out.MachineTemplate.InfrastructureRef = in.InfrastructureTemplate 154 out.MachineTemplate.NodeDrainTimeout = in.NodeDrainTimeout 155 return autoConvert_v1alpha3_KubeadmControlPlaneSpec_To_v1beta1_KubeadmControlPlaneSpec(in, out, s) 156 }