github.com/enmand/kubernetes@v1.2.0-alpha.0/pkg/apis/experimental/v1alpha1/conversion.go (about)

     1  /*
     2  Copyright 2015 The Kubernetes Authors All rights reserved.
     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 v1alpha1
    18  
    19  import (
    20  	"reflect"
    21  
    22  	"k8s.io/kubernetes/pkg/api"
    23  	v1 "k8s.io/kubernetes/pkg/api/v1"
    24  	"k8s.io/kubernetes/pkg/apis/experimental"
    25  	"k8s.io/kubernetes/pkg/conversion"
    26  	"k8s.io/kubernetes/pkg/util"
    27  )
    28  
    29  func addConversionFuncs() {
    30  	// Add non-generated conversion functions
    31  	err := api.Scheme.AddConversionFuncs(
    32  		convert_api_PodSpec_To_v1_PodSpec,
    33  		convert_v1_PodSpec_To_api_PodSpec,
    34  		convert_experimental_DeploymentSpec_To_v1alpha1_DeploymentSpec,
    35  		convert_v1alpha1_DeploymentSpec_To_experimental_DeploymentSpec,
    36  		convert_experimental_DeploymentStrategy_To_v1alpha1_DeploymentStrategy,
    37  		convert_v1alpha1_DeploymentStrategy_To_experimental_DeploymentStrategy,
    38  		convert_experimental_RollingUpdateDeployment_To_v1alpha1_RollingUpdateDeployment,
    39  		convert_v1alpha1_RollingUpdateDeployment_To_experimental_RollingUpdateDeployment,
    40  	)
    41  	if err != nil {
    42  		// If one of the conversion functions is malformed, detect it immediately.
    43  		panic(err)
    44  	}
    45  }
    46  
    47  // The following two PodSpec conversions functions where copied from pkg/api/conversion.go
    48  // for the generated functions to work properly.
    49  // This should be fixed: https://github.com/kubernetes/kubernetes/issues/12977
    50  func convert_api_PodSpec_To_v1_PodSpec(in *api.PodSpec, out *v1.PodSpec, s conversion.Scope) error {
    51  	if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found {
    52  		defaulting.(func(*api.PodSpec))(in)
    53  	}
    54  	if in.Volumes != nil {
    55  		out.Volumes = make([]v1.Volume, len(in.Volumes))
    56  		for i := range in.Volumes {
    57  			if err := convert_api_Volume_To_v1_Volume(&in.Volumes[i], &out.Volumes[i], s); err != nil {
    58  				return err
    59  			}
    60  		}
    61  	} else {
    62  		out.Volumes = nil
    63  	}
    64  	if in.Containers != nil {
    65  		out.Containers = make([]v1.Container, len(in.Containers))
    66  		for i := range in.Containers {
    67  			if err := convert_api_Container_To_v1_Container(&in.Containers[i], &out.Containers[i], s); err != nil {
    68  				return err
    69  			}
    70  		}
    71  	} else {
    72  		out.Containers = nil
    73  	}
    74  	out.RestartPolicy = v1.RestartPolicy(in.RestartPolicy)
    75  	if in.TerminationGracePeriodSeconds != nil {
    76  		out.TerminationGracePeriodSeconds = new(int64)
    77  		*out.TerminationGracePeriodSeconds = *in.TerminationGracePeriodSeconds
    78  	} else {
    79  		out.TerminationGracePeriodSeconds = nil
    80  	}
    81  	if in.ActiveDeadlineSeconds != nil {
    82  		out.ActiveDeadlineSeconds = new(int64)
    83  		*out.ActiveDeadlineSeconds = *in.ActiveDeadlineSeconds
    84  	} else {
    85  		out.ActiveDeadlineSeconds = nil
    86  	}
    87  	out.DNSPolicy = v1.DNSPolicy(in.DNSPolicy)
    88  	if in.NodeSelector != nil {
    89  		out.NodeSelector = make(map[string]string)
    90  		for key, val := range in.NodeSelector {
    91  			out.NodeSelector[key] = val
    92  		}
    93  	} else {
    94  		out.NodeSelector = nil
    95  	}
    96  	out.ServiceAccountName = in.ServiceAccountName
    97  	// DeprecatedServiceAccount is an alias for ServiceAccountName.
    98  	out.DeprecatedServiceAccount = in.ServiceAccountName
    99  	out.NodeName = in.NodeName
   100  	out.HostNetwork = in.HostNetwork
   101  	out.HostPID = in.HostPID
   102  	out.HostIPC = in.HostIPC
   103  	if in.ImagePullSecrets != nil {
   104  		out.ImagePullSecrets = make([]v1.LocalObjectReference, len(in.ImagePullSecrets))
   105  		for i := range in.ImagePullSecrets {
   106  			if err := convert_api_LocalObjectReference_To_v1_LocalObjectReference(&in.ImagePullSecrets[i], &out.ImagePullSecrets[i], s); err != nil {
   107  				return err
   108  			}
   109  		}
   110  	} else {
   111  		out.ImagePullSecrets = nil
   112  	}
   113  	return nil
   114  }
   115  
   116  func convert_v1_PodSpec_To_api_PodSpec(in *v1.PodSpec, out *api.PodSpec, s conversion.Scope) error {
   117  	if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found {
   118  		defaulting.(func(*v1.PodSpec))(in)
   119  	}
   120  	if in.Volumes != nil {
   121  		out.Volumes = make([]api.Volume, len(in.Volumes))
   122  		for i := range in.Volumes {
   123  			if err := convert_v1_Volume_To_api_Volume(&in.Volumes[i], &out.Volumes[i], s); err != nil {
   124  				return err
   125  			}
   126  		}
   127  	} else {
   128  		out.Volumes = nil
   129  	}
   130  	if in.Containers != nil {
   131  		out.Containers = make([]api.Container, len(in.Containers))
   132  		for i := range in.Containers {
   133  			if err := convert_v1_Container_To_api_Container(&in.Containers[i], &out.Containers[i], s); err != nil {
   134  				return err
   135  			}
   136  		}
   137  	} else {
   138  		out.Containers = nil
   139  	}
   140  	out.RestartPolicy = api.RestartPolicy(in.RestartPolicy)
   141  	if in.TerminationGracePeriodSeconds != nil {
   142  		out.TerminationGracePeriodSeconds = new(int64)
   143  		*out.TerminationGracePeriodSeconds = *in.TerminationGracePeriodSeconds
   144  	} else {
   145  		out.TerminationGracePeriodSeconds = nil
   146  	}
   147  	if in.ActiveDeadlineSeconds != nil {
   148  		out.ActiveDeadlineSeconds = new(int64)
   149  		*out.ActiveDeadlineSeconds = *in.ActiveDeadlineSeconds
   150  	} else {
   151  		out.ActiveDeadlineSeconds = nil
   152  	}
   153  	out.DNSPolicy = api.DNSPolicy(in.DNSPolicy)
   154  	if in.NodeSelector != nil {
   155  		out.NodeSelector = make(map[string]string)
   156  		for key, val := range in.NodeSelector {
   157  			out.NodeSelector[key] = val
   158  		}
   159  	} else {
   160  		out.NodeSelector = nil
   161  	}
   162  	// We support DeprecatedServiceAccount as an alias for ServiceAccountName.
   163  	// If both are specified, ServiceAccountName (the new field) wins.
   164  	out.ServiceAccountName = in.ServiceAccountName
   165  	if in.ServiceAccountName == "" {
   166  		out.ServiceAccountName = in.DeprecatedServiceAccount
   167  	}
   168  	out.NodeName = in.NodeName
   169  	out.HostNetwork = in.HostNetwork
   170  	out.HostPID = in.HostPID
   171  	out.HostIPC = in.HostIPC
   172  	if in.ImagePullSecrets != nil {
   173  		out.ImagePullSecrets = make([]api.LocalObjectReference, len(in.ImagePullSecrets))
   174  		for i := range in.ImagePullSecrets {
   175  			if err := convert_v1_LocalObjectReference_To_api_LocalObjectReference(&in.ImagePullSecrets[i], &out.ImagePullSecrets[i], s); err != nil {
   176  				return err
   177  			}
   178  		}
   179  	} else {
   180  		out.ImagePullSecrets = nil
   181  	}
   182  	return nil
   183  }
   184  
   185  func convert_experimental_DeploymentSpec_To_v1alpha1_DeploymentSpec(in *experimental.DeploymentSpec, out *DeploymentSpec, s conversion.Scope) error {
   186  	if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found {
   187  		defaulting.(func(*experimental.DeploymentSpec))(in)
   188  	}
   189  	out.Replicas = new(int)
   190  	*out.Replicas = in.Replicas
   191  	if in.Selector != nil {
   192  		out.Selector = make(map[string]string)
   193  		for key, val := range in.Selector {
   194  			out.Selector[key] = val
   195  		}
   196  	} else {
   197  		out.Selector = nil
   198  	}
   199  	if in.Template != nil {
   200  		out.Template = new(v1.PodTemplateSpec)
   201  		if err := convert_api_PodTemplateSpec_To_v1_PodTemplateSpec(in.Template, out.Template, s); err != nil {
   202  			return err
   203  		}
   204  	} else {
   205  		out.Template = nil
   206  	}
   207  	if err := convert_experimental_DeploymentStrategy_To_v1alpha1_DeploymentStrategy(&in.Strategy, &out.Strategy, s); err != nil {
   208  		return err
   209  	}
   210  	out.UniqueLabelKey = new(string)
   211  	*out.UniqueLabelKey = in.UniqueLabelKey
   212  	return nil
   213  }
   214  
   215  func convert_v1alpha1_DeploymentSpec_To_experimental_DeploymentSpec(in *DeploymentSpec, out *experimental.DeploymentSpec, s conversion.Scope) error {
   216  	if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found {
   217  		defaulting.(func(*DeploymentSpec))(in)
   218  	}
   219  	if in.Replicas != nil {
   220  		out.Replicas = *in.Replicas
   221  	}
   222  	if in.Selector != nil {
   223  		out.Selector = make(map[string]string)
   224  		for key, val := range in.Selector {
   225  			out.Selector[key] = val
   226  		}
   227  	} else {
   228  		out.Selector = nil
   229  	}
   230  	if in.Template != nil {
   231  		out.Template = new(api.PodTemplateSpec)
   232  		if err := convert_v1_PodTemplateSpec_To_api_PodTemplateSpec(in.Template, out.Template, s); err != nil {
   233  			return err
   234  		}
   235  	} else {
   236  		out.Template = nil
   237  	}
   238  	if err := convert_v1alpha1_DeploymentStrategy_To_experimental_DeploymentStrategy(&in.Strategy, &out.Strategy, s); err != nil {
   239  		return err
   240  	}
   241  	if in.UniqueLabelKey != nil {
   242  		out.UniqueLabelKey = *in.UniqueLabelKey
   243  	}
   244  	return nil
   245  }
   246  
   247  func convert_experimental_DeploymentStrategy_To_v1alpha1_DeploymentStrategy(in *experimental.DeploymentStrategy, out *DeploymentStrategy, s conversion.Scope) error {
   248  	if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found {
   249  		defaulting.(func(*experimental.DeploymentStrategy))(in)
   250  	}
   251  	out.Type = DeploymentStrategyType(in.Type)
   252  	if in.RollingUpdate != nil {
   253  		out.RollingUpdate = new(RollingUpdateDeployment)
   254  		if err := convert_experimental_RollingUpdateDeployment_To_v1alpha1_RollingUpdateDeployment(in.RollingUpdate, out.RollingUpdate, s); err != nil {
   255  			return err
   256  		}
   257  	} else {
   258  		out.RollingUpdate = nil
   259  	}
   260  	return nil
   261  }
   262  
   263  func convert_v1alpha1_DeploymentStrategy_To_experimental_DeploymentStrategy(in *DeploymentStrategy, out *experimental.DeploymentStrategy, s conversion.Scope) error {
   264  	if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found {
   265  		defaulting.(func(*DeploymentStrategy))(in)
   266  	}
   267  	out.Type = experimental.DeploymentStrategyType(in.Type)
   268  	if in.RollingUpdate != nil {
   269  		out.RollingUpdate = new(experimental.RollingUpdateDeployment)
   270  		if err := convert_v1alpha1_RollingUpdateDeployment_To_experimental_RollingUpdateDeployment(in.RollingUpdate, out.RollingUpdate, s); err != nil {
   271  			return err
   272  		}
   273  	} else {
   274  		out.RollingUpdate = nil
   275  	}
   276  	return nil
   277  }
   278  
   279  func convert_experimental_RollingUpdateDeployment_To_v1alpha1_RollingUpdateDeployment(in *experimental.RollingUpdateDeployment, out *RollingUpdateDeployment, s conversion.Scope) error {
   280  	if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found {
   281  		defaulting.(func(*experimental.RollingUpdateDeployment))(in)
   282  	}
   283  	if out.MaxUnavailable == nil {
   284  		out.MaxUnavailable = &util.IntOrString{}
   285  	}
   286  	if err := s.Convert(&in.MaxUnavailable, out.MaxUnavailable, 0); err != nil {
   287  		return err
   288  	}
   289  	if out.MaxSurge == nil {
   290  		out.MaxSurge = &util.IntOrString{}
   291  	}
   292  	if err := s.Convert(&in.MaxSurge, out.MaxSurge, 0); err != nil {
   293  		return err
   294  	}
   295  	out.MinReadySeconds = in.MinReadySeconds
   296  	return nil
   297  }
   298  
   299  func convert_v1alpha1_RollingUpdateDeployment_To_experimental_RollingUpdateDeployment(in *RollingUpdateDeployment, out *experimental.RollingUpdateDeployment, s conversion.Scope) error {
   300  	if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found {
   301  		defaulting.(func(*RollingUpdateDeployment))(in)
   302  	}
   303  	if err := s.Convert(in.MaxUnavailable, &out.MaxUnavailable, 0); err != nil {
   304  		return err
   305  	}
   306  	if err := s.Convert(in.MaxSurge, &out.MaxSurge, 0); err != nil {
   307  		return err
   308  	}
   309  	out.MinReadySeconds = in.MinReadySeconds
   310  	return nil
   311  }