...

Source file src/k8s.io/kubernetes/pkg/apis/apps/v1/conversion.go

Documentation: k8s.io/kubernetes/pkg/apis/apps/v1

     1  /*
     2  Copyright 2017 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 v1
    18  
    19  import (
    20  	"fmt"
    21  	"strconv"
    22  
    23  	appsv1 "k8s.io/api/apps/v1"
    24  	corev1 "k8s.io/api/core/v1"
    25  	"k8s.io/apimachinery/pkg/conversion"
    26  	"k8s.io/kubernetes/pkg/apis/apps"
    27  	"k8s.io/kubernetes/pkg/apis/core"
    28  )
    29  
    30  // Convert_apps_DeploymentSpec_To_v1_DeploymentSpec is defined here, because public
    31  // conversion is not auto-generated due to existing warnings.
    32  func Convert_apps_DeploymentSpec_To_v1_DeploymentSpec(in *apps.DeploymentSpec, out *appsv1.DeploymentSpec, s conversion.Scope) error {
    33  	if err := autoConvert_apps_DeploymentSpec_To_v1_DeploymentSpec(in, out, s); err != nil {
    34  		return err
    35  	}
    36  	return nil
    37  }
    38  
    39  func Convert_v1_Deployment_To_apps_Deployment(in *appsv1.Deployment, out *apps.Deployment, s conversion.Scope) error {
    40  	if err := autoConvert_v1_Deployment_To_apps_Deployment(in, out, s); err != nil {
    41  		return err
    42  	}
    43  
    44  	// Copy annotation to deprecated rollbackTo field for roundtrip
    45  	// TODO: remove this conversion after we delete extensions/v1beta1 and apps/v1beta1 Deployment
    46  	if revision := in.Annotations[appsv1.DeprecatedRollbackTo]; revision != "" {
    47  		if revision64, err := strconv.ParseInt(revision, 10, 64); err != nil {
    48  			return fmt.Errorf("failed to parse annotation[%s]=%s as int64: %v", appsv1.DeprecatedRollbackTo, revision, err)
    49  		} else {
    50  			out.Spec.RollbackTo = new(apps.RollbackConfig)
    51  			out.Spec.RollbackTo.Revision = revision64
    52  		}
    53  		out.Annotations = deepCopyStringMap(out.Annotations)
    54  		delete(out.Annotations, appsv1.DeprecatedRollbackTo)
    55  	} else {
    56  		out.Spec.RollbackTo = nil
    57  	}
    58  
    59  	return nil
    60  }
    61  
    62  func Convert_apps_Deployment_To_v1_Deployment(in *apps.Deployment, out *appsv1.Deployment, s conversion.Scope) error {
    63  	if err := autoConvert_apps_Deployment_To_v1_Deployment(in, out, s); err != nil {
    64  		return err
    65  	}
    66  
    67  	out.Annotations = deepCopyStringMap(out.Annotations) // deep copy because we modify it below
    68  
    69  	// Copy deprecated rollbackTo field to annotation for roundtrip
    70  	// TODO: remove this conversion after we delete extensions/v1beta1 and apps/v1beta1 Deployment
    71  	if in.Spec.RollbackTo != nil {
    72  		if out.Annotations == nil {
    73  			out.Annotations = make(map[string]string)
    74  		}
    75  		out.Annotations[appsv1.DeprecatedRollbackTo] = strconv.FormatInt(in.Spec.RollbackTo.Revision, 10)
    76  	} else {
    77  		delete(out.Annotations, appsv1.DeprecatedRollbackTo)
    78  	}
    79  
    80  	return nil
    81  }
    82  
    83  func Convert_apps_DaemonSet_To_v1_DaemonSet(in *apps.DaemonSet, out *appsv1.DaemonSet, s conversion.Scope) error {
    84  	if err := autoConvert_apps_DaemonSet_To_v1_DaemonSet(in, out, s); err != nil {
    85  		return err
    86  	}
    87  
    88  	out.Annotations = deepCopyStringMap(out.Annotations) // deep copy annotations because we change them below
    89  	out.Annotations[appsv1.DeprecatedTemplateGeneration] = strconv.FormatInt(in.Spec.TemplateGeneration, 10)
    90  	return nil
    91  }
    92  
    93  // Convert_apps_DaemonSetSpec_To_v1_DaemonSetSpec is defined here, because public
    94  // conversion is not auto-generated due to existing warnings.
    95  func Convert_apps_DaemonSetSpec_To_v1_DaemonSetSpec(in *apps.DaemonSetSpec, out *appsv1.DaemonSetSpec, s conversion.Scope) error {
    96  	if err := autoConvert_apps_DaemonSetSpec_To_v1_DaemonSetSpec(in, out, s); err != nil {
    97  		return err
    98  	}
    99  	return nil
   100  }
   101  
   102  func Convert_v1_DaemonSet_To_apps_DaemonSet(in *appsv1.DaemonSet, out *apps.DaemonSet, s conversion.Scope) error {
   103  	if err := autoConvert_v1_DaemonSet_To_apps_DaemonSet(in, out, s); err != nil {
   104  		return err
   105  	}
   106  	if value, ok := in.Annotations[appsv1.DeprecatedTemplateGeneration]; ok {
   107  		if value64, err := strconv.ParseInt(value, 10, 64); err != nil {
   108  			return err
   109  		} else {
   110  			out.Spec.TemplateGeneration = value64
   111  			out.Annotations = deepCopyStringMap(out.Annotations)
   112  			delete(out.Annotations, appsv1.DeprecatedTemplateGeneration)
   113  		}
   114  	}
   115  	return nil
   116  }
   117  
   118  func deepCopyStringMap(m map[string]string) map[string]string {
   119  	ret := make(map[string]string, len(m))
   120  	for k, v := range m {
   121  		ret[k] = v
   122  	}
   123  	return ret
   124  }
   125  
   126  // Convert_apps_StatefulSetSpec_To_v1_StatefulSetSpec augments auto-conversion to preserve < 1.17 behavior
   127  // setting apiVersion/kind in nested persistent volume claim objects.
   128  func Convert_v1_StatefulSetSpec_To_apps_StatefulSetSpec(in *appsv1.StatefulSetSpec, out *apps.StatefulSetSpec, s conversion.Scope) error {
   129  	if err := autoConvert_v1_StatefulSetSpec_To_apps_StatefulSetSpec(in, out, s); err != nil {
   130  		return err
   131  	}
   132  	// set APIVersion/Kind to behave the same as reflective conversion < 1.17.
   133  	// see https://issue.k8s.io/87583
   134  	if out.VolumeClaimTemplates != nil {
   135  		// copy so we don't modify the input
   136  		templatesCopy := make([]core.PersistentVolumeClaim, len(out.VolumeClaimTemplates))
   137  		copy(templatesCopy, out.VolumeClaimTemplates)
   138  		out.VolumeClaimTemplates = templatesCopy
   139  		for i := range out.VolumeClaimTemplates {
   140  			out.VolumeClaimTemplates[i].APIVersion = ""
   141  			out.VolumeClaimTemplates[i].Kind = ""
   142  		}
   143  	}
   144  	return nil
   145  }
   146  
   147  // Convert_apps_StatefulSetSpec_To_v1_StatefulSetSpec augments auto-conversion to preserve < 1.17 behavior
   148  // setting apiVersion/kind in nested persistent volume claim objects.
   149  func Convert_apps_StatefulSetSpec_To_v1_StatefulSetSpec(in *apps.StatefulSetSpec, out *appsv1.StatefulSetSpec, s conversion.Scope) error {
   150  	if err := autoConvert_apps_StatefulSetSpec_To_v1_StatefulSetSpec(in, out, s); err != nil {
   151  		return err
   152  	}
   153  	// set APIVersion/Kind to behave the same as reflective conversion < 1.17.
   154  	// see https://issue.k8s.io/87583
   155  	if out.VolumeClaimTemplates != nil {
   156  		// copy so we don't modify the input
   157  		templatesCopy := make([]corev1.PersistentVolumeClaim, len(out.VolumeClaimTemplates))
   158  		copy(templatesCopy, out.VolumeClaimTemplates)
   159  		out.VolumeClaimTemplates = templatesCopy
   160  		for i := range out.VolumeClaimTemplates {
   161  			out.VolumeClaimTemplates[i].APIVersion = "v1"
   162  			out.VolumeClaimTemplates[i].Kind = "PersistentVolumeClaim"
   163  		}
   164  	}
   165  	return nil
   166  }
   167  

View as plain text