conversion.go 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262
  1. /*
  2. Copyright 2015 The Kubernetes Authors.
  3. Licensed under the Apache License, Version 2.0 (the "License");
  4. you may not use this file except in compliance with the License.
  5. You may obtain a copy of the License at
  6. http://www.apache.org/licenses/LICENSE-2.0
  7. Unless required by applicable law or agreed to in writing, software
  8. distributed under the License is distributed on an "AS IS" BASIS,
  9. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  10. See the License for the specific language governing permissions and
  11. limitations under the License.
  12. */
  13. package v1beta1
  14. import (
  15. "fmt"
  16. metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
  17. "k8s.io/apimachinery/pkg/conversion"
  18. "k8s.io/apimachinery/pkg/runtime"
  19. "k8s.io/apimachinery/pkg/util/intstr"
  20. v1 "k8s.io/client-go/pkg/api/v1"
  21. "k8s.io/client-go/pkg/apis/extensions"
  22. )
  23. func addConversionFuncs(scheme *runtime.Scheme) error {
  24. // Add non-generated conversion functions
  25. err := scheme.AddConversionFuncs(
  26. Convert_extensions_ScaleStatus_To_v1beta1_ScaleStatus,
  27. Convert_v1beta1_ScaleStatus_To_extensions_ScaleStatus,
  28. Convert_extensions_DeploymentSpec_To_v1beta1_DeploymentSpec,
  29. Convert_v1beta1_DeploymentSpec_To_extensions_DeploymentSpec,
  30. Convert_extensions_DeploymentStrategy_To_v1beta1_DeploymentStrategy,
  31. Convert_v1beta1_DeploymentStrategy_To_extensions_DeploymentStrategy,
  32. Convert_extensions_RollingUpdateDeployment_To_v1beta1_RollingUpdateDeployment,
  33. Convert_v1beta1_RollingUpdateDeployment_To_extensions_RollingUpdateDeployment,
  34. Convert_extensions_RollingUpdateDaemonSet_To_v1beta1_RollingUpdateDaemonSet,
  35. Convert_v1beta1_RollingUpdateDaemonSet_To_extensions_RollingUpdateDaemonSet,
  36. Convert_extensions_ReplicaSetSpec_To_v1beta1_ReplicaSetSpec,
  37. Convert_v1beta1_ReplicaSetSpec_To_extensions_ReplicaSetSpec,
  38. )
  39. if err != nil {
  40. return err
  41. }
  42. // Add field label conversions for kinds having selectable nothing but ObjectMeta fields.
  43. for _, k := range []string{"DaemonSet", "Deployment", "Ingress"} {
  44. kind := k // don't close over range variables
  45. err = scheme.AddFieldLabelConversionFunc("extensions/v1beta1", kind,
  46. func(label, value string) (string, string, error) {
  47. switch label {
  48. case "metadata.name", "metadata.namespace":
  49. return label, value, nil
  50. default:
  51. return "", "", fmt.Errorf("field label %q not supported for %q", label, kind)
  52. }
  53. },
  54. )
  55. if err != nil {
  56. return err
  57. }
  58. }
  59. return nil
  60. }
  61. func Convert_extensions_ScaleStatus_To_v1beta1_ScaleStatus(in *extensions.ScaleStatus, out *ScaleStatus, s conversion.Scope) error {
  62. out.Replicas = int32(in.Replicas)
  63. out.Selector = nil
  64. out.TargetSelector = ""
  65. if in.Selector != nil {
  66. if in.Selector.MatchExpressions == nil || len(in.Selector.MatchExpressions) == 0 {
  67. out.Selector = in.Selector.MatchLabels
  68. }
  69. selector, err := metav1.LabelSelectorAsSelector(in.Selector)
  70. if err != nil {
  71. return fmt.Errorf("invalid label selector: %v", err)
  72. }
  73. out.TargetSelector = selector.String()
  74. }
  75. return nil
  76. }
  77. func Convert_v1beta1_ScaleStatus_To_extensions_ScaleStatus(in *ScaleStatus, out *extensions.ScaleStatus, s conversion.Scope) error {
  78. out.Replicas = in.Replicas
  79. // Normally when 2 fields map to the same internal value we favor the old field, since
  80. // old clients can't be expected to know about new fields but clients that know about the
  81. // new field can be expected to know about the old field (though that's not quite true, due
  82. // to kubectl apply). However, these fields are readonly, so any non-nil value should work.
  83. if in.TargetSelector != "" {
  84. labelSelector, err := metav1.ParseToLabelSelector(in.TargetSelector)
  85. if err != nil {
  86. out.Selector = nil
  87. return fmt.Errorf("failed to parse target selector: %v", err)
  88. }
  89. out.Selector = labelSelector
  90. } else if in.Selector != nil {
  91. out.Selector = new(metav1.LabelSelector)
  92. selector := make(map[string]string)
  93. for key, val := range in.Selector {
  94. selector[key] = val
  95. }
  96. out.Selector.MatchLabels = selector
  97. } else {
  98. out.Selector = nil
  99. }
  100. return nil
  101. }
  102. func Convert_extensions_DeploymentSpec_To_v1beta1_DeploymentSpec(in *extensions.DeploymentSpec, out *DeploymentSpec, s conversion.Scope) error {
  103. out.Replicas = &in.Replicas
  104. out.Selector = in.Selector
  105. if err := v1.Convert_api_PodTemplateSpec_To_v1_PodTemplateSpec(&in.Template, &out.Template, s); err != nil {
  106. return err
  107. }
  108. if err := Convert_extensions_DeploymentStrategy_To_v1beta1_DeploymentStrategy(&in.Strategy, &out.Strategy, s); err != nil {
  109. return err
  110. }
  111. if in.RevisionHistoryLimit != nil {
  112. out.RevisionHistoryLimit = new(int32)
  113. *out.RevisionHistoryLimit = int32(*in.RevisionHistoryLimit)
  114. }
  115. out.MinReadySeconds = int32(in.MinReadySeconds)
  116. out.Paused = in.Paused
  117. if in.RollbackTo != nil {
  118. out.RollbackTo = new(RollbackConfig)
  119. out.RollbackTo.Revision = int64(in.RollbackTo.Revision)
  120. } else {
  121. out.RollbackTo = nil
  122. }
  123. if in.ProgressDeadlineSeconds != nil {
  124. out.ProgressDeadlineSeconds = new(int32)
  125. *out.ProgressDeadlineSeconds = *in.ProgressDeadlineSeconds
  126. }
  127. return nil
  128. }
  129. func Convert_v1beta1_DeploymentSpec_To_extensions_DeploymentSpec(in *DeploymentSpec, out *extensions.DeploymentSpec, s conversion.Scope) error {
  130. if in.Replicas != nil {
  131. out.Replicas = *in.Replicas
  132. }
  133. out.Selector = in.Selector
  134. if err := v1.Convert_v1_PodTemplateSpec_To_api_PodTemplateSpec(&in.Template, &out.Template, s); err != nil {
  135. return err
  136. }
  137. if err := Convert_v1beta1_DeploymentStrategy_To_extensions_DeploymentStrategy(&in.Strategy, &out.Strategy, s); err != nil {
  138. return err
  139. }
  140. out.RevisionHistoryLimit = in.RevisionHistoryLimit
  141. out.MinReadySeconds = in.MinReadySeconds
  142. out.Paused = in.Paused
  143. if in.RollbackTo != nil {
  144. out.RollbackTo = new(extensions.RollbackConfig)
  145. out.RollbackTo.Revision = in.RollbackTo.Revision
  146. } else {
  147. out.RollbackTo = nil
  148. }
  149. if in.ProgressDeadlineSeconds != nil {
  150. out.ProgressDeadlineSeconds = new(int32)
  151. *out.ProgressDeadlineSeconds = *in.ProgressDeadlineSeconds
  152. }
  153. return nil
  154. }
  155. func Convert_extensions_DeploymentStrategy_To_v1beta1_DeploymentStrategy(in *extensions.DeploymentStrategy, out *DeploymentStrategy, s conversion.Scope) error {
  156. out.Type = DeploymentStrategyType(in.Type)
  157. if in.RollingUpdate != nil {
  158. out.RollingUpdate = new(RollingUpdateDeployment)
  159. if err := Convert_extensions_RollingUpdateDeployment_To_v1beta1_RollingUpdateDeployment(in.RollingUpdate, out.RollingUpdate, s); err != nil {
  160. return err
  161. }
  162. } else {
  163. out.RollingUpdate = nil
  164. }
  165. return nil
  166. }
  167. func Convert_v1beta1_DeploymentStrategy_To_extensions_DeploymentStrategy(in *DeploymentStrategy, out *extensions.DeploymentStrategy, s conversion.Scope) error {
  168. out.Type = extensions.DeploymentStrategyType(in.Type)
  169. if in.RollingUpdate != nil {
  170. out.RollingUpdate = new(extensions.RollingUpdateDeployment)
  171. if err := Convert_v1beta1_RollingUpdateDeployment_To_extensions_RollingUpdateDeployment(in.RollingUpdate, out.RollingUpdate, s); err != nil {
  172. return err
  173. }
  174. } else {
  175. out.RollingUpdate = nil
  176. }
  177. return nil
  178. }
  179. func Convert_extensions_RollingUpdateDeployment_To_v1beta1_RollingUpdateDeployment(in *extensions.RollingUpdateDeployment, out *RollingUpdateDeployment, s conversion.Scope) error {
  180. if out.MaxUnavailable == nil {
  181. out.MaxUnavailable = &intstr.IntOrString{}
  182. }
  183. if err := s.Convert(&in.MaxUnavailable, out.MaxUnavailable, 0); err != nil {
  184. return err
  185. }
  186. if out.MaxSurge == nil {
  187. out.MaxSurge = &intstr.IntOrString{}
  188. }
  189. if err := s.Convert(&in.MaxSurge, out.MaxSurge, 0); err != nil {
  190. return err
  191. }
  192. return nil
  193. }
  194. func Convert_v1beta1_RollingUpdateDeployment_To_extensions_RollingUpdateDeployment(in *RollingUpdateDeployment, out *extensions.RollingUpdateDeployment, s conversion.Scope) error {
  195. if err := s.Convert(in.MaxUnavailable, &out.MaxUnavailable, 0); err != nil {
  196. return err
  197. }
  198. if err := s.Convert(in.MaxSurge, &out.MaxSurge, 0); err != nil {
  199. return err
  200. }
  201. return nil
  202. }
  203. func Convert_extensions_RollingUpdateDaemonSet_To_v1beta1_RollingUpdateDaemonSet(in *extensions.RollingUpdateDaemonSet, out *RollingUpdateDaemonSet, s conversion.Scope) error {
  204. if out.MaxUnavailable == nil {
  205. out.MaxUnavailable = &intstr.IntOrString{}
  206. }
  207. if err := s.Convert(&in.MaxUnavailable, out.MaxUnavailable, 0); err != nil {
  208. return err
  209. }
  210. return nil
  211. }
  212. func Convert_v1beta1_RollingUpdateDaemonSet_To_extensions_RollingUpdateDaemonSet(in *RollingUpdateDaemonSet, out *extensions.RollingUpdateDaemonSet, s conversion.Scope) error {
  213. if err := s.Convert(in.MaxUnavailable, &out.MaxUnavailable, 0); err != nil {
  214. return err
  215. }
  216. return nil
  217. }
  218. func Convert_extensions_ReplicaSetSpec_To_v1beta1_ReplicaSetSpec(in *extensions.ReplicaSetSpec, out *ReplicaSetSpec, s conversion.Scope) error {
  219. out.Replicas = new(int32)
  220. *out.Replicas = int32(in.Replicas)
  221. out.MinReadySeconds = in.MinReadySeconds
  222. out.Selector = in.Selector
  223. if err := v1.Convert_api_PodTemplateSpec_To_v1_PodTemplateSpec(&in.Template, &out.Template, s); err != nil {
  224. return err
  225. }
  226. return nil
  227. }
  228. func Convert_v1beta1_ReplicaSetSpec_To_extensions_ReplicaSetSpec(in *ReplicaSetSpec, out *extensions.ReplicaSetSpec, s conversion.Scope) error {
  229. if in.Replicas != nil {
  230. out.Replicas = *in.Replicas
  231. }
  232. out.MinReadySeconds = in.MinReadySeconds
  233. out.Selector = in.Selector
  234. if err := v1.Convert_v1_PodTemplateSpec_To_api_PodTemplateSpec(&in.Template, &out.Template, s); err != nil {
  235. return err
  236. }
  237. return nil
  238. }