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  }