sigs.k8s.io/cluster-api@v1.7.1/internal/apis/controlplane/kubeadm/v1alpha4/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 v1alpha4
    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  	bootstrapv1alpha4 "sigs.k8s.io/cluster-api/internal/apis/bootstrap/kubeadm/v1alpha4"
    26  	utilconversion "sigs.k8s.io/cluster-api/util/conversion"
    27  )
    28  
    29  func (src *KubeadmControlPlane) ConvertTo(dstRaw conversion.Hub) error {
    30  	dst := dstRaw.(*controlplanev1.KubeadmControlPlane)
    31  
    32  	if err := Convert_v1alpha4_KubeadmControlPlane_To_v1beta1_KubeadmControlPlane(src, dst, nil); err != nil {
    33  		return err
    34  	}
    35  
    36  	// Manually restore data.
    37  	restored := &controlplanev1.KubeadmControlPlane{}
    38  	if ok, err := utilconversion.UnmarshalData(src, restored); err != nil || !ok {
    39  		return err
    40  	}
    41  
    42  	dst.Spec.KubeadmConfigSpec.Files = restored.Spec.KubeadmConfigSpec.Files
    43  
    44  	dst.Spec.KubeadmConfigSpec.Users = restored.Spec.KubeadmConfigSpec.Users
    45  	if restored.Spec.KubeadmConfigSpec.Users != nil {
    46  		for i := range restored.Spec.KubeadmConfigSpec.Users {
    47  			if restored.Spec.KubeadmConfigSpec.Users[i].PasswdFrom != nil {
    48  				dst.Spec.KubeadmConfigSpec.Users[i].PasswdFrom = restored.Spec.KubeadmConfigSpec.Users[i].PasswdFrom
    49  			}
    50  		}
    51  	}
    52  
    53  	dst.Spec.KubeadmConfigSpec.Ignition = restored.Spec.KubeadmConfigSpec.Ignition
    54  	if restored.Spec.KubeadmConfigSpec.InitConfiguration != nil {
    55  		if dst.Spec.KubeadmConfigSpec.InitConfiguration == nil {
    56  			dst.Spec.KubeadmConfigSpec.InitConfiguration = &bootstrapv1.InitConfiguration{}
    57  		}
    58  		dst.Spec.KubeadmConfigSpec.InitConfiguration.Patches = restored.Spec.KubeadmConfigSpec.InitConfiguration.Patches
    59  		dst.Spec.KubeadmConfigSpec.InitConfiguration.SkipPhases = restored.Spec.KubeadmConfigSpec.InitConfiguration.SkipPhases
    60  	}
    61  	if restored.Spec.KubeadmConfigSpec.JoinConfiguration != nil {
    62  		if dst.Spec.KubeadmConfigSpec.JoinConfiguration == nil {
    63  			dst.Spec.KubeadmConfigSpec.JoinConfiguration = &bootstrapv1.JoinConfiguration{}
    64  		}
    65  		dst.Spec.KubeadmConfigSpec.JoinConfiguration.Patches = restored.Spec.KubeadmConfigSpec.JoinConfiguration.Patches
    66  		dst.Spec.KubeadmConfigSpec.JoinConfiguration.SkipPhases = restored.Spec.KubeadmConfigSpec.JoinConfiguration.SkipPhases
    67  	}
    68  
    69  	dst.Spec.MachineTemplate.NodeDeletionTimeout = restored.Spec.MachineTemplate.NodeDeletionTimeout
    70  	dst.Spec.RolloutBefore = restored.Spec.RolloutBefore
    71  	dst.Spec.MachineTemplate.NodeVolumeDetachTimeout = restored.Spec.MachineTemplate.NodeVolumeDetachTimeout
    72  
    73  	if restored.Spec.KubeadmConfigSpec.JoinConfiguration != nil && restored.Spec.KubeadmConfigSpec.JoinConfiguration.NodeRegistration.ImagePullPolicy != "" {
    74  		if dst.Spec.KubeadmConfigSpec.JoinConfiguration == nil {
    75  			dst.Spec.KubeadmConfigSpec.JoinConfiguration = &bootstrapv1.JoinConfiguration{}
    76  		}
    77  		dst.Spec.KubeadmConfigSpec.JoinConfiguration.NodeRegistration.ImagePullPolicy = restored.Spec.KubeadmConfigSpec.JoinConfiguration.NodeRegistration.ImagePullPolicy
    78  	}
    79  
    80  	if restored.Spec.KubeadmConfigSpec.InitConfiguration != nil && restored.Spec.KubeadmConfigSpec.InitConfiguration.NodeRegistration.ImagePullPolicy != "" {
    81  		if dst.Spec.KubeadmConfigSpec.InitConfiguration == nil {
    82  			dst.Spec.KubeadmConfigSpec.InitConfiguration = &bootstrapv1.InitConfiguration{}
    83  		}
    84  		dst.Spec.KubeadmConfigSpec.InitConfiguration.NodeRegistration.ImagePullPolicy = restored.Spec.KubeadmConfigSpec.InitConfiguration.NodeRegistration.ImagePullPolicy
    85  	}
    86  
    87  	if restored.Spec.RemediationStrategy != nil {
    88  		dst.Spec.RemediationStrategy = restored.Spec.RemediationStrategy
    89  	}
    90  	if restored.Status.LastRemediation != nil {
    91  		dst.Status.LastRemediation = restored.Status.LastRemediation
    92  	}
    93  
    94  	return nil
    95  }
    96  
    97  func (dst *KubeadmControlPlane) ConvertFrom(srcRaw conversion.Hub) error {
    98  	src := srcRaw.(*controlplanev1.KubeadmControlPlane)
    99  
   100  	if err := Convert_v1beta1_KubeadmControlPlane_To_v1alpha4_KubeadmControlPlane(src, dst, nil); err != nil {
   101  		return err
   102  	}
   103  
   104  	// Preserve Hub data on down-conversion except for metadata
   105  	return utilconversion.MarshalData(src, dst)
   106  }
   107  
   108  func (src *KubeadmControlPlaneList) ConvertTo(dstRaw conversion.Hub) error {
   109  	dst := dstRaw.(*controlplanev1.KubeadmControlPlaneList)
   110  
   111  	return Convert_v1alpha4_KubeadmControlPlaneList_To_v1beta1_KubeadmControlPlaneList(src, dst, nil)
   112  }
   113  
   114  func (dst *KubeadmControlPlaneList) ConvertFrom(srcRaw conversion.Hub) error {
   115  	src := srcRaw.(*controlplanev1.KubeadmControlPlaneList)
   116  
   117  	return Convert_v1beta1_KubeadmControlPlaneList_To_v1alpha4_KubeadmControlPlaneList(src, dst, nil)
   118  }
   119  
   120  func (src *KubeadmControlPlaneTemplate) ConvertTo(dstRaw conversion.Hub) error {
   121  	dst := dstRaw.(*controlplanev1.KubeadmControlPlaneTemplate)
   122  
   123  	if err := Convert_v1alpha4_KubeadmControlPlaneTemplate_To_v1beta1_KubeadmControlPlaneTemplate(src, dst, nil); err != nil {
   124  		return err
   125  	}
   126  
   127  	// Manually restore data.
   128  	restored := &controlplanev1.KubeadmControlPlaneTemplate{}
   129  	if ok, err := utilconversion.UnmarshalData(src, restored); err != nil || !ok {
   130  		return err
   131  	}
   132  
   133  	dst.Spec.Template.Spec.KubeadmConfigSpec.Files = restored.Spec.Template.Spec.KubeadmConfigSpec.Files
   134  	dst.Spec.Template.Spec.KubeadmConfigSpec.Users = restored.Spec.Template.Spec.KubeadmConfigSpec.Users
   135  	dst.Spec.Template.Spec.KubeadmConfigSpec.Ignition = restored.Spec.Template.Spec.KubeadmConfigSpec.Ignition
   136  	dst.Spec.Template.Spec.MachineTemplate = restored.Spec.Template.Spec.MachineTemplate
   137  
   138  	if restored.Spec.Template.Spec.KubeadmConfigSpec.Users != nil {
   139  		for i := range restored.Spec.Template.Spec.KubeadmConfigSpec.Users {
   140  			if restored.Spec.Template.Spec.KubeadmConfigSpec.Users[i].PasswdFrom != nil {
   141  				dst.Spec.Template.Spec.KubeadmConfigSpec.Users[i].PasswdFrom = restored.Spec.Template.Spec.KubeadmConfigSpec.Users[i].PasswdFrom
   142  			}
   143  		}
   144  	}
   145  
   146  	dst.Spec.Template.ObjectMeta = restored.Spec.Template.ObjectMeta
   147  	if restored.Spec.Template.Spec.MachineTemplate != nil {
   148  		dst.Spec.Template.Spec.MachineTemplate.ObjectMeta = restored.Spec.Template.Spec.MachineTemplate.ObjectMeta
   149  	}
   150  
   151  	if restored.Spec.Template.Spec.KubeadmConfigSpec.InitConfiguration != nil {
   152  		if dst.Spec.Template.Spec.KubeadmConfigSpec.InitConfiguration == nil {
   153  			dst.Spec.Template.Spec.KubeadmConfigSpec.InitConfiguration = &bootstrapv1.InitConfiguration{}
   154  		}
   155  		dst.Spec.Template.Spec.KubeadmConfigSpec.InitConfiguration.Patches = restored.Spec.Template.Spec.KubeadmConfigSpec.InitConfiguration.Patches
   156  		dst.Spec.Template.Spec.KubeadmConfigSpec.InitConfiguration.SkipPhases = restored.Spec.Template.Spec.KubeadmConfigSpec.InitConfiguration.SkipPhases
   157  	}
   158  	if restored.Spec.Template.Spec.KubeadmConfigSpec.JoinConfiguration != nil {
   159  		if dst.Spec.Template.Spec.KubeadmConfigSpec.JoinConfiguration == nil {
   160  			dst.Spec.Template.Spec.KubeadmConfigSpec.JoinConfiguration = &bootstrapv1.JoinConfiguration{}
   161  		}
   162  		dst.Spec.Template.Spec.KubeadmConfigSpec.JoinConfiguration.Patches = restored.Spec.Template.Spec.KubeadmConfigSpec.JoinConfiguration.Patches
   163  		dst.Spec.Template.Spec.KubeadmConfigSpec.JoinConfiguration.SkipPhases = restored.Spec.Template.Spec.KubeadmConfigSpec.JoinConfiguration.SkipPhases
   164  	}
   165  	if dst.Spec.Template.Spec.MachineTemplate == nil {
   166  		dst.Spec.Template.Spec.MachineTemplate = restored.Spec.Template.Spec.MachineTemplate
   167  	} else if restored.Spec.Template.Spec.MachineTemplate != nil {
   168  		dst.Spec.Template.Spec.MachineTemplate.NodeDeletionTimeout = restored.Spec.Template.Spec.MachineTemplate.NodeDeletionTimeout
   169  		dst.Spec.Template.Spec.MachineTemplate.NodeVolumeDetachTimeout = restored.Spec.Template.Spec.MachineTemplate.NodeVolumeDetachTimeout
   170  	}
   171  
   172  	dst.Spec.Template.Spec.RolloutBefore = restored.Spec.Template.Spec.RolloutBefore
   173  
   174  	if restored.Spec.Template.Spec.KubeadmConfigSpec.JoinConfiguration != nil && restored.Spec.Template.Spec.KubeadmConfigSpec.JoinConfiguration.NodeRegistration.ImagePullPolicy != "" {
   175  		if dst.Spec.Template.Spec.KubeadmConfigSpec.JoinConfiguration == nil {
   176  			dst.Spec.Template.Spec.KubeadmConfigSpec.JoinConfiguration = &bootstrapv1.JoinConfiguration{}
   177  		}
   178  		dst.Spec.Template.Spec.KubeadmConfigSpec.JoinConfiguration.NodeRegistration.ImagePullPolicy = restored.Spec.Template.Spec.KubeadmConfigSpec.JoinConfiguration.NodeRegistration.ImagePullPolicy
   179  	}
   180  
   181  	if restored.Spec.Template.Spec.KubeadmConfigSpec.InitConfiguration != nil && restored.Spec.Template.Spec.KubeadmConfigSpec.InitConfiguration.NodeRegistration.ImagePullPolicy != "" {
   182  		if dst.Spec.Template.Spec.KubeadmConfigSpec.InitConfiguration == nil {
   183  			dst.Spec.Template.Spec.KubeadmConfigSpec.InitConfiguration = &bootstrapv1.InitConfiguration{}
   184  		}
   185  		dst.Spec.Template.Spec.KubeadmConfigSpec.InitConfiguration.NodeRegistration.ImagePullPolicy = restored.Spec.Template.Spec.KubeadmConfigSpec.InitConfiguration.NodeRegistration.ImagePullPolicy
   186  	}
   187  
   188  	if restored.Spec.Template.Spec.RemediationStrategy != nil {
   189  		dst.Spec.Template.Spec.RemediationStrategy = restored.Spec.Template.Spec.RemediationStrategy
   190  	}
   191  
   192  	return nil
   193  }
   194  
   195  func (dst *KubeadmControlPlaneTemplate) ConvertFrom(srcRaw conversion.Hub) error {
   196  	src := srcRaw.(*controlplanev1.KubeadmControlPlaneTemplate)
   197  
   198  	if err := Convert_v1beta1_KubeadmControlPlaneTemplate_To_v1alpha4_KubeadmControlPlaneTemplate(src, dst, nil); err != nil {
   199  		return err
   200  	}
   201  
   202  	// Preserve Hub data on down-conversion except for metadata
   203  	return utilconversion.MarshalData(src, dst)
   204  }
   205  
   206  func (src *KubeadmControlPlaneTemplateList) ConvertTo(dstRaw conversion.Hub) error {
   207  	dst := dstRaw.(*controlplanev1.KubeadmControlPlaneTemplateList)
   208  
   209  	return Convert_v1alpha4_KubeadmControlPlaneTemplateList_To_v1beta1_KubeadmControlPlaneTemplateList(src, dst, nil)
   210  }
   211  
   212  func (dst *KubeadmControlPlaneTemplateList) ConvertFrom(srcRaw conversion.Hub) error {
   213  	src := srcRaw.(*controlplanev1.KubeadmControlPlaneTemplateList)
   214  
   215  	return Convert_v1beta1_KubeadmControlPlaneTemplateList_To_v1alpha4_KubeadmControlPlaneTemplateList(src, dst, nil)
   216  }
   217  
   218  func Convert_v1alpha4_KubeadmControlPlaneSpec_To_v1beta1_KubeadmControlPlaneTemplateResourceSpec(in *KubeadmControlPlaneSpec, out *controlplanev1.KubeadmControlPlaneTemplateResourceSpec, s apiconversion.Scope) error {
   219  	out.MachineTemplate = &controlplanev1.KubeadmControlPlaneTemplateMachineTemplate{
   220  		NodeDrainTimeout: in.MachineTemplate.NodeDrainTimeout,
   221  	}
   222  
   223  	if err := bootstrapv1alpha4.Convert_v1alpha4_KubeadmConfigSpec_To_v1beta1_KubeadmConfigSpec(&in.KubeadmConfigSpec, &out.KubeadmConfigSpec, s); err != nil {
   224  		return err
   225  	}
   226  
   227  	out.RolloutAfter = in.RolloutAfter
   228  
   229  	if in.RolloutStrategy != nil {
   230  		out.RolloutStrategy = &controlplanev1.RolloutStrategy{}
   231  		if len(in.RolloutStrategy.Type) > 0 {
   232  			out.RolloutStrategy.Type = controlplanev1.RolloutStrategyType(in.RolloutStrategy.Type)
   233  		}
   234  		if in.RolloutStrategy.RollingUpdate != nil {
   235  			out.RolloutStrategy.RollingUpdate = &controlplanev1.RollingUpdate{}
   236  
   237  			if in.RolloutStrategy.RollingUpdate.MaxSurge != nil {
   238  				out.RolloutStrategy.RollingUpdate.MaxSurge = in.RolloutStrategy.RollingUpdate.MaxSurge
   239  			}
   240  		}
   241  	}
   242  
   243  	return nil
   244  }
   245  
   246  func Convert_v1beta1_KubeadmControlPlaneTemplateResourceSpec_To_v1alpha4_KubeadmControlPlaneSpec(in *controlplanev1.KubeadmControlPlaneTemplateResourceSpec, out *KubeadmControlPlaneSpec, s apiconversion.Scope) error {
   247  	if in.MachineTemplate != nil {
   248  		out.MachineTemplate.NodeDrainTimeout = in.MachineTemplate.NodeDrainTimeout
   249  	}
   250  
   251  	if err := bootstrapv1alpha4.Convert_v1beta1_KubeadmConfigSpec_To_v1alpha4_KubeadmConfigSpec(&in.KubeadmConfigSpec, &out.KubeadmConfigSpec, s); err != nil {
   252  		return err
   253  	}
   254  
   255  	out.RolloutAfter = in.RolloutAfter
   256  
   257  	if in.RolloutStrategy != nil {
   258  		out.RolloutStrategy = &RolloutStrategy{}
   259  		if len(in.RolloutStrategy.Type) > 0 {
   260  			out.RolloutStrategy.Type = RolloutStrategyType(in.RolloutStrategy.Type)
   261  		}
   262  		if in.RolloutStrategy.RollingUpdate != nil {
   263  			out.RolloutStrategy.RollingUpdate = &RollingUpdate{}
   264  
   265  			if in.RolloutStrategy.RollingUpdate.MaxSurge != nil {
   266  				out.RolloutStrategy.RollingUpdate.MaxSurge = in.RolloutStrategy.RollingUpdate.MaxSurge
   267  			}
   268  		}
   269  	}
   270  
   271  	return nil
   272  }
   273  
   274  func Convert_v1beta1_KubeadmControlPlaneMachineTemplate_To_v1alpha4_KubeadmControlPlaneMachineTemplate(in *controlplanev1.KubeadmControlPlaneMachineTemplate, out *KubeadmControlPlaneMachineTemplate, s apiconversion.Scope) error {
   275  	// .NodeDrainTimeout was added in v1beta1.
   276  	return autoConvert_v1beta1_KubeadmControlPlaneMachineTemplate_To_v1alpha4_KubeadmControlPlaneMachineTemplate(in, out, s)
   277  }
   278  
   279  func Convert_v1beta1_KubeadmControlPlaneSpec_To_v1alpha4_KubeadmControlPlaneSpec(in *controlplanev1.KubeadmControlPlaneSpec, out *KubeadmControlPlaneSpec, scope apiconversion.Scope) error {
   280  	// .RolloutBefore was added in v1beta1.
   281  	// .RemediationStrategy was added in v1beta1.
   282  	return autoConvert_v1beta1_KubeadmControlPlaneSpec_To_v1alpha4_KubeadmControlPlaneSpec(in, out, scope)
   283  }
   284  
   285  func Convert_v1beta1_KubeadmControlPlaneStatus_To_v1alpha4_KubeadmControlPlaneStatus(in *controlplanev1.KubeadmControlPlaneStatus, out *KubeadmControlPlaneStatus, scope apiconversion.Scope) error {
   286  	// .LastRemediation was added in v1beta1.
   287  	return autoConvert_v1beta1_KubeadmControlPlaneStatus_To_v1alpha4_KubeadmControlPlaneStatus(in, out, scope)
   288  }
   289  
   290  func Convert_v1beta1_KubeadmControlPlaneTemplateResource_To_v1alpha4_KubeadmControlPlaneTemplateResource(in *controlplanev1.KubeadmControlPlaneTemplateResource, out *KubeadmControlPlaneTemplateResource, scope apiconversion.Scope) error {
   291  	// .metadata and .spec.machineTemplate.metadata was added in v1beta1.
   292  	return autoConvert_v1beta1_KubeadmControlPlaneTemplateResource_To_v1alpha4_KubeadmControlPlaneTemplateResource(in, out, scope)
   293  }