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 }