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  }