sigs.k8s.io/cluster-api-provider-aws@v1.5.5/api/v1alpha3/awscluster_conversion.go (about) 1 /* 2 Copyright 2021 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 "unsafe" 21 22 apiconversion "k8s.io/apimachinery/pkg/conversion" 23 infrav1 "sigs.k8s.io/cluster-api-provider-aws/api/v1beta1" 24 clusterv1alpha3 "sigs.k8s.io/cluster-api/api/v1alpha3" 25 clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1" 26 utilconversion "sigs.k8s.io/cluster-api/util/conversion" 27 "sigs.k8s.io/controller-runtime/pkg/conversion" 28 ) 29 30 // ConvertTo converts the v1alpha3 AWSCluster receiver to a v1beta1 AWSCluster. 31 func (r *AWSCluster) ConvertTo(dstRaw conversion.Hub) error { 32 dst := dstRaw.(*infrav1.AWSCluster) 33 34 if err := Convert_v1alpha3_AWSCluster_To_v1beta1_AWSCluster(r, dst, nil); err != nil { 35 return err 36 } 37 // Manually restore data. 38 restored := &infrav1.AWSCluster{} 39 if ok, err := utilconversion.UnmarshalData(r, restored); err != nil || !ok { 40 return err 41 } 42 43 if restored.Status.Bastion != nil { 44 if dst.Status.Bastion == nil { 45 dst.Status.Bastion = &infrav1.Instance{} 46 } 47 restoreInstance(restored.Status.Bastion, dst.Status.Bastion) 48 } 49 50 if restored.Spec.ControlPlaneLoadBalancer != nil { 51 if dst.Spec.ControlPlaneLoadBalancer == nil { 52 dst.Spec.ControlPlaneLoadBalancer = &infrav1.AWSLoadBalancerSpec{} 53 } 54 restoreControlPlaneLoadBalancer(restored.Spec.ControlPlaneLoadBalancer, dst.Spec.ControlPlaneLoadBalancer) 55 } 56 57 dst.Spec.S3Bucket = restored.Spec.S3Bucket 58 59 return nil 60 } 61 62 // restoreControlPlaneLoadBalancer manually restores the control plane loadbalancer data. 63 // Assumes restored and dst are non-nil. 64 func restoreControlPlaneLoadBalancer(restored, dst *infrav1.AWSLoadBalancerSpec) { 65 dst.Name = restored.Name 66 dst.HealthCheckProtocol = restored.HealthCheckProtocol 67 } 68 69 // ConvertFrom converts the v1beta1 AWSCluster receiver to a v1alpha3 AWSCluster. 70 func (r *AWSCluster) ConvertFrom(srcRaw conversion.Hub) error { 71 src := srcRaw.(*infrav1.AWSCluster) 72 73 if err := Convert_v1beta1_AWSCluster_To_v1alpha3_AWSCluster(src, r, nil); err != nil { 74 return err 75 } 76 77 // Preserve Hub data on down-conversion. 78 if err := utilconversion.MarshalData(src, r); err != nil { 79 return err 80 } 81 82 return nil 83 } 84 85 // ConvertTo converts the v1alpha3 AWSClusterList receiver to a v1beta1 AWSClusterList. 86 func (r *AWSClusterList) ConvertTo(dstRaw conversion.Hub) error { 87 dst := dstRaw.(*infrav1.AWSClusterList) 88 89 return Convert_v1alpha3_AWSClusterList_To_v1beta1_AWSClusterList(r, dst, nil) 90 } 91 92 // ConvertFrom converts the v1beta1 AWSClusterList receiver to a v1alpha3 AWSClusterList. 93 func (r *AWSClusterList) ConvertFrom(srcRaw conversion.Hub) error { 94 src := srcRaw.(*infrav1.AWSClusterList) 95 96 return Convert_v1beta1_AWSClusterList_To_v1alpha3_AWSClusterList(src, r, nil) 97 } 98 99 // Convert_v1alpha3_APIEndpoint_To_v1beta1_APIEndpoint . 100 func Convert_v1alpha3_APIEndpoint_To_v1beta1_APIEndpoint(in *clusterv1alpha3.APIEndpoint, out *clusterv1.APIEndpoint, s apiconversion.Scope) error { 101 return clusterv1alpha3.Convert_v1alpha3_APIEndpoint_To_v1beta1_APIEndpoint(in, out, s) 102 } 103 104 // Convert_v1beta1_APIEndpoint_To_v1alpha3_APIEndpoint . 105 func Convert_v1beta1_APIEndpoint_To_v1alpha3_APIEndpoint(in *clusterv1.APIEndpoint, out *clusterv1alpha3.APIEndpoint, s apiconversion.Scope) error { 106 return clusterv1alpha3.Convert_v1beta1_APIEndpoint_To_v1alpha3_APIEndpoint(in, out, s) 107 } 108 109 // Convert_v1alpha3_Network_To_v1alpha4_NetworkStatus is based on the autogenerated function and handles the renaming of the Network struct to NetworkStatus 110 func Convert_v1alpha3_Network_To_v1beta1_NetworkStatus(in *Network, out *infrav1.NetworkStatus, s apiconversion.Scope) error { 111 out.SecurityGroups = *(*map[infrav1.SecurityGroupRole]infrav1.SecurityGroup)(unsafe.Pointer(&in.SecurityGroups)) 112 if err := Convert_v1alpha3_ClassicELB_To_v1beta1_ClassicELB(&in.APIServerELB, &out.APIServerELB, s); err != nil { 113 return err 114 } 115 return nil 116 } 117 118 // Convert_v1alpha4_NetworkStatus_To_v1alpha3_Network is based on the autogenerated function and handles the renaming of the NetworkStatus struct to Network 119 func Convert_v1beta1_NetworkStatus_To_v1alpha3_Network(in *infrav1.NetworkStatus, out *Network, s apiconversion.Scope) error { 120 out.SecurityGroups = *(*map[SecurityGroupRole]SecurityGroup)(unsafe.Pointer(&in.SecurityGroups)) 121 if err := Convert_v1beta1_ClassicELB_To_v1alpha3_ClassicELB(&in.APIServerELB, &out.APIServerELB, s); err != nil { 122 return err 123 } 124 return nil 125 } 126 127 func Convert_v1beta1_AWSLoadBalancerSpec_To_v1alpha3_AWSLoadBalancerSpec(in *infrav1.AWSLoadBalancerSpec, out *AWSLoadBalancerSpec, s apiconversion.Scope) error { 128 return autoConvert_v1beta1_AWSLoadBalancerSpec_To_v1alpha3_AWSLoadBalancerSpec(in, out, s) 129 } 130 131 func Convert_v1beta1_AWSClusterSpec_To_v1alpha3_AWSClusterSpec(in *infrav1.AWSClusterSpec, out *AWSClusterSpec, s apiconversion.Scope) error { 132 return autoConvert_v1beta1_AWSClusterSpec_To_v1alpha3_AWSClusterSpec(in, out, s) 133 }