sigs.k8s.io/cluster-api@v1.7.1/internal/apis/core/v1alpha3/conversion.go (about) 1 /* 2 Copyright 2019 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 clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1" 24 "sigs.k8s.io/cluster-api/util/conditions" 25 utilconversion "sigs.k8s.io/cluster-api/util/conversion" 26 ) 27 28 func (src *Cluster) ConvertTo(dstRaw conversion.Hub) error { 29 dst := dstRaw.(*clusterv1.Cluster) 30 31 if err := Convert_v1alpha3_Cluster_To_v1beta1_Cluster(src, dst, nil); err != nil { 32 return err 33 } 34 35 // Given this is a bool and there is no timestamp associated with it, when this condition is set, its timestamp 36 // will be "now". See https://github.com/kubernetes-sigs/cluster-api/issues/3798#issuecomment-708619826 for more 37 // discussion. 38 if src.Status.ControlPlaneInitialized { 39 conditions.MarkTrue(dst, clusterv1.ControlPlaneInitializedCondition) 40 } 41 42 // Manually restore data. 43 restored := &clusterv1.Cluster{} 44 if ok, err := utilconversion.UnmarshalData(src, restored); err != nil || !ok { 45 return err 46 } 47 48 if restored.Spec.Topology != nil { 49 dst.Spec.Topology = restored.Spec.Topology 50 } 51 52 return nil 53 } 54 55 func (dst *Cluster) ConvertFrom(srcRaw conversion.Hub) error { 56 src := srcRaw.(*clusterv1.Cluster) 57 58 if err := Convert_v1beta1_Cluster_To_v1alpha3_Cluster(src, dst, nil); err != nil { 59 return err 60 } 61 62 // Set the v1alpha3 boolean status field if the v1alpha4 condition was true 63 if conditions.IsTrue(src, clusterv1.ControlPlaneInitializedCondition) { 64 dst.Status.ControlPlaneInitialized = true 65 } 66 67 // Preserve Hub data on down-conversion except for metadata 68 if err := utilconversion.MarshalData(src, dst); err != nil { 69 return err 70 } 71 72 return nil 73 } 74 75 func (src *ClusterList) ConvertTo(dstRaw conversion.Hub) error { 76 dst := dstRaw.(*clusterv1.ClusterList) 77 78 return Convert_v1alpha3_ClusterList_To_v1beta1_ClusterList(src, dst, nil) 79 } 80 81 func (dst *ClusterList) ConvertFrom(srcRaw conversion.Hub) error { 82 src := srcRaw.(*clusterv1.ClusterList) 83 84 return Convert_v1beta1_ClusterList_To_v1alpha3_ClusterList(src, dst, nil) 85 } 86 87 func (src *Machine) ConvertTo(dstRaw conversion.Hub) error { 88 dst := dstRaw.(*clusterv1.Machine) 89 90 if err := Convert_v1alpha3_Machine_To_v1beta1_Machine(src, dst, nil); err != nil { 91 return err 92 } 93 94 // Manually restore data. 95 restored := &clusterv1.Machine{} 96 if ok, err := utilconversion.UnmarshalData(src, restored); err != nil || !ok { 97 return err 98 } 99 100 dst.Spec.NodeDeletionTimeout = restored.Spec.NodeDeletionTimeout 101 dst.Spec.NodeVolumeDetachTimeout = restored.Spec.NodeVolumeDetachTimeout 102 dst.Status.NodeInfo = restored.Status.NodeInfo 103 dst.Status.CertificatesExpiryDate = restored.Status.CertificatesExpiryDate 104 return nil 105 } 106 107 func (dst *Machine) ConvertFrom(srcRaw conversion.Hub) error { 108 src := srcRaw.(*clusterv1.Machine) 109 110 if err := Convert_v1beta1_Machine_To_v1alpha3_Machine(src, dst, nil); err != nil { 111 return err 112 } 113 114 // Preserve Hub data on down-conversion except for metadata 115 if err := utilconversion.MarshalData(src, dst); err != nil { 116 return err 117 } 118 119 return nil 120 } 121 122 func (src *MachineList) ConvertTo(dstRaw conversion.Hub) error { 123 dst := dstRaw.(*clusterv1.MachineList) 124 125 return Convert_v1alpha3_MachineList_To_v1beta1_MachineList(src, dst, nil) 126 } 127 128 func (dst *MachineList) ConvertFrom(srcRaw conversion.Hub) error { 129 src := srcRaw.(*clusterv1.MachineList) 130 131 return Convert_v1beta1_MachineList_To_v1alpha3_MachineList(src, dst, nil) 132 } 133 134 func (src *MachineSet) ConvertTo(dstRaw conversion.Hub) error { 135 dst := dstRaw.(*clusterv1.MachineSet) 136 137 if err := Convert_v1alpha3_MachineSet_To_v1beta1_MachineSet(src, dst, nil); err != nil { 138 return err 139 } 140 // Manually restore data. 141 restored := &clusterv1.MachineSet{} 142 if ok, err := utilconversion.UnmarshalData(src, restored); err != nil || !ok { 143 return err 144 } 145 dst.Spec.Template.Spec.NodeDeletionTimeout = restored.Spec.Template.Spec.NodeDeletionTimeout 146 dst.Spec.Template.Spec.NodeVolumeDetachTimeout = restored.Spec.Template.Spec.NodeVolumeDetachTimeout 147 dst.Status.Conditions = restored.Status.Conditions 148 return nil 149 } 150 151 func (dst *MachineSet) ConvertFrom(srcRaw conversion.Hub) error { 152 src := srcRaw.(*clusterv1.MachineSet) 153 154 if err := Convert_v1beta1_MachineSet_To_v1alpha3_MachineSet(src, dst, nil); err != nil { 155 return err 156 } 157 158 // Preserve Hub data on down-conversion except for metadata 159 if err := utilconversion.MarshalData(src, dst); err != nil { 160 return err 161 } 162 return nil 163 } 164 165 func (src *MachineSetList) ConvertTo(dstRaw conversion.Hub) error { 166 dst := dstRaw.(*clusterv1.MachineSetList) 167 168 return Convert_v1alpha3_MachineSetList_To_v1beta1_MachineSetList(src, dst, nil) 169 } 170 171 func (dst *MachineSetList) ConvertFrom(srcRaw conversion.Hub) error { 172 src := srcRaw.(*clusterv1.MachineSetList) 173 174 return Convert_v1beta1_MachineSetList_To_v1alpha3_MachineSetList(src, dst, nil) 175 } 176 177 func (src *MachineDeployment) ConvertTo(dstRaw conversion.Hub) error { 178 dst := dstRaw.(*clusterv1.MachineDeployment) 179 180 if err := Convert_v1alpha3_MachineDeployment_To_v1beta1_MachineDeployment(src, dst, nil); err != nil { 181 return err 182 } 183 184 // Manually restore data. 185 restored := &clusterv1.MachineDeployment{} 186 if ok, err := utilconversion.UnmarshalData(src, restored); err != nil || !ok { 187 return err 188 } 189 190 if restored.Spec.Strategy != nil && restored.Spec.Strategy.RollingUpdate != nil { 191 if dst.Spec.Strategy == nil { 192 dst.Spec.Strategy = &clusterv1.MachineDeploymentStrategy{} 193 } 194 if dst.Spec.Strategy.RollingUpdate == nil { 195 dst.Spec.Strategy.RollingUpdate = &clusterv1.MachineRollingUpdateDeployment{} 196 } 197 dst.Spec.Strategy.RollingUpdate.DeletePolicy = restored.Spec.Strategy.RollingUpdate.DeletePolicy 198 } 199 200 dst.Spec.Template.Spec.NodeDeletionTimeout = restored.Spec.Template.Spec.NodeDeletionTimeout 201 dst.Spec.Template.Spec.NodeVolumeDetachTimeout = restored.Spec.Template.Spec.NodeVolumeDetachTimeout 202 dst.Spec.RolloutAfter = restored.Spec.RolloutAfter 203 dst.Status.Conditions = restored.Status.Conditions 204 return nil 205 } 206 207 func (dst *MachineDeployment) ConvertFrom(srcRaw conversion.Hub) error { 208 src := srcRaw.(*clusterv1.MachineDeployment) 209 210 if err := Convert_v1beta1_MachineDeployment_To_v1alpha3_MachineDeployment(src, dst, nil); err != nil { 211 return err 212 } 213 214 // Preserve Hub data on down-conversion except for metadata 215 if err := utilconversion.MarshalData(src, dst); err != nil { 216 return err 217 } 218 219 return nil 220 } 221 222 func (src *MachineDeploymentList) ConvertTo(dstRaw conversion.Hub) error { 223 dst := dstRaw.(*clusterv1.MachineDeploymentList) 224 225 return Convert_v1alpha3_MachineDeploymentList_To_v1beta1_MachineDeploymentList(src, dst, nil) 226 } 227 228 func (dst *MachineDeploymentList) ConvertFrom(srcRaw conversion.Hub) error { 229 src := srcRaw.(*clusterv1.MachineDeploymentList) 230 231 return Convert_v1beta1_MachineDeploymentList_To_v1alpha3_MachineDeploymentList(src, dst, nil) 232 } 233 234 func (src *MachineHealthCheck) ConvertTo(dstRaw conversion.Hub) error { 235 dst := dstRaw.(*clusterv1.MachineHealthCheck) 236 237 if err := Convert_v1alpha3_MachineHealthCheck_To_v1beta1_MachineHealthCheck(src, dst, nil); err != nil { 238 return err 239 } 240 241 // Manually restore data. 242 restored := &clusterv1.MachineHealthCheck{} 243 if ok, err := utilconversion.UnmarshalData(src, restored); err != nil || !ok { 244 return err 245 } 246 247 if restored.Spec.UnhealthyRange != nil { 248 dst.Spec.UnhealthyRange = restored.Spec.UnhealthyRange 249 } 250 251 return nil 252 } 253 254 func (dst *MachineHealthCheck) ConvertFrom(srcRaw conversion.Hub) error { 255 src := srcRaw.(*clusterv1.MachineHealthCheck) 256 257 if err := Convert_v1beta1_MachineHealthCheck_To_v1alpha3_MachineHealthCheck(src, dst, nil); err != nil { 258 return err 259 } 260 261 // Preserve Hub data on down-conversion except for metadata 262 if err := utilconversion.MarshalData(src, dst); err != nil { 263 return err 264 } 265 266 return nil 267 } 268 269 func (src *MachineHealthCheckList) ConvertTo(dstRaw conversion.Hub) error { 270 dst := dstRaw.(*clusterv1.MachineHealthCheckList) 271 272 return Convert_v1alpha3_MachineHealthCheckList_To_v1beta1_MachineHealthCheckList(src, dst, nil) 273 } 274 275 func (dst *MachineHealthCheckList) ConvertFrom(srcRaw conversion.Hub) error { 276 src := srcRaw.(*clusterv1.MachineHealthCheckList) 277 278 return Convert_v1beta1_MachineHealthCheckList_To_v1alpha3_MachineHealthCheckList(src, dst, nil) 279 } 280 281 func Convert_v1beta1_MachineSetStatus_To_v1alpha3_MachineSetStatus(in *clusterv1.MachineSetStatus, out *MachineSetStatus, _ apiconversion.Scope) error { 282 // Status.Conditions was introduced in v1alpha4, thus requiring a custom conversion function; the values is going to be preserved in an annotation thus allowing roundtrip without loosing informations 283 return autoConvert_v1beta1_MachineSetStatus_To_v1alpha3_MachineSetStatus(in, out, nil) 284 } 285 286 func Convert_v1beta1_ClusterSpec_To_v1alpha3_ClusterSpec(in *clusterv1.ClusterSpec, out *ClusterSpec, s apiconversion.Scope) error { 287 // NOTE: custom conversion func is required because spec.Topology does not exist in v1alpha3 288 return autoConvert_v1beta1_ClusterSpec_To_v1alpha3_ClusterSpec(in, out, s) 289 } 290 291 func Convert_v1alpha3_Bootstrap_To_v1beta1_Bootstrap(in *Bootstrap, out *clusterv1.Bootstrap, s apiconversion.Scope) error { 292 return autoConvert_v1alpha3_Bootstrap_To_v1beta1_Bootstrap(in, out, s) 293 } 294 295 func Convert_v1beta1_MachineRollingUpdateDeployment_To_v1alpha3_MachineRollingUpdateDeployment(in *clusterv1.MachineRollingUpdateDeployment, out *MachineRollingUpdateDeployment, s apiconversion.Scope) error { 296 return autoConvert_v1beta1_MachineRollingUpdateDeployment_To_v1alpha3_MachineRollingUpdateDeployment(in, out, s) 297 } 298 299 func Convert_v1beta1_MachineHealthCheckSpec_To_v1alpha3_MachineHealthCheckSpec(in *clusterv1.MachineHealthCheckSpec, out *MachineHealthCheckSpec, s apiconversion.Scope) error { 300 return autoConvert_v1beta1_MachineHealthCheckSpec_To_v1alpha3_MachineHealthCheckSpec(in, out, s) 301 } 302 303 func Convert_v1alpha3_ClusterStatus_To_v1beta1_ClusterStatus(in *ClusterStatus, out *clusterv1.ClusterStatus, s apiconversion.Scope) error { 304 return autoConvert_v1alpha3_ClusterStatus_To_v1beta1_ClusterStatus(in, out, s) 305 } 306 307 func Convert_v1alpha3_ObjectMeta_To_v1beta1_ObjectMeta(in *ObjectMeta, out *clusterv1.ObjectMeta, s apiconversion.Scope) error { 308 return autoConvert_v1alpha3_ObjectMeta_To_v1beta1_ObjectMeta(in, out, s) 309 } 310 311 func Convert_v1beta1_MachineStatus_To_v1alpha3_MachineStatus(in *clusterv1.MachineStatus, out *MachineStatus, s apiconversion.Scope) error { 312 return autoConvert_v1beta1_MachineStatus_To_v1alpha3_MachineStatus(in, out, s) 313 } 314 315 func Convert_v1beta1_MachineSpec_To_v1alpha3_MachineSpec(in *clusterv1.MachineSpec, out *MachineSpec, s apiconversion.Scope) error { 316 // spec.nodeDeletionTimeout has been added with v1beta1. 317 return autoConvert_v1beta1_MachineSpec_To_v1alpha3_MachineSpec(in, out, s) 318 } 319 320 func Convert_v1beta1_MachineDeploymentSpec_To_v1alpha3_MachineDeploymentSpec(in *clusterv1.MachineDeploymentSpec, out *MachineDeploymentSpec, s apiconversion.Scope) error { 321 return autoConvert_v1beta1_MachineDeploymentSpec_To_v1alpha3_MachineDeploymentSpec(in, out, s) 322 } 323 324 func Convert_v1beta1_MachineDeploymentStatus_To_v1alpha3_MachineDeploymentStatus(in *clusterv1.MachineDeploymentStatus, out *MachineDeploymentStatus, s apiconversion.Scope) error { 325 // Status.Conditions was introduced in v1alpha4, thus requiring a custom conversion function; the values is going to be preserved in an annotation thus allowing roundtrip without loosing informations 326 return autoConvert_v1beta1_MachineDeploymentStatus_To_v1alpha3_MachineDeploymentStatus(in, out, s) 327 } 328 329 func Convert_v1alpha3_MachineStatus_To_v1beta1_MachineStatus(in *MachineStatus, out *clusterv1.MachineStatus, s apiconversion.Scope) error { 330 // Status.version has been removed in v1beta1, thus requiring custom conversion function. the information will be dropped. 331 return autoConvert_v1alpha3_MachineStatus_To_v1beta1_MachineStatus(in, out, s) 332 }