conversion.go 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564
  1. /*
  2. Copyright 2016 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 v1beta2
  14. import (
  15. "fmt"
  16. "strconv"
  17. appsv1beta2 "k8s.io/api/apps/v1beta2"
  18. "k8s.io/api/core/v1"
  19. metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
  20. "k8s.io/apimachinery/pkg/conversion"
  21. "k8s.io/apimachinery/pkg/labels"
  22. "k8s.io/apimachinery/pkg/runtime"
  23. "k8s.io/apimachinery/pkg/util/intstr"
  24. "k8s.io/kubernetes/pkg/apis/apps"
  25. autoscaling "k8s.io/kubernetes/pkg/apis/autoscaling"
  26. api "k8s.io/kubernetes/pkg/apis/core"
  27. k8s_api_v1 "k8s.io/kubernetes/pkg/apis/core/v1"
  28. )
  29. func addConversionFuncs(scheme *runtime.Scheme) error {
  30. // Add non-generated conversion functions to handle the *int32 -> int32
  31. // conversion. A pointer is useful in the versioned type so we can default
  32. // it, but a plain int32 is more convenient in the internal type. These
  33. // functions are the same as the autogenerated ones in every other way.
  34. err := scheme.AddConversionFuncs(
  35. Convert_v1beta2_StatefulSetSpec_To_apps_StatefulSetSpec,
  36. Convert_apps_StatefulSetSpec_To_v1beta2_StatefulSetSpec,
  37. Convert_v1beta2_StatefulSetUpdateStrategy_To_apps_StatefulSetUpdateStrategy,
  38. Convert_apps_StatefulSetUpdateStrategy_To_v1beta2_StatefulSetUpdateStrategy,
  39. Convert_apps_RollingUpdateDaemonSet_To_v1beta2_RollingUpdateDaemonSet,
  40. Convert_v1beta2_RollingUpdateDaemonSet_To_apps_RollingUpdateDaemonSet,
  41. Convert_v1beta2_StatefulSetStatus_To_apps_StatefulSetStatus,
  42. Convert_apps_StatefulSetStatus_To_v1beta2_StatefulSetStatus,
  43. Convert_v1beta2_Deployment_To_apps_Deployment,
  44. Convert_apps_Deployment_To_v1beta2_Deployment,
  45. Convert_apps_DaemonSet_To_v1beta2_DaemonSet,
  46. Convert_v1beta2_DaemonSet_To_apps_DaemonSet,
  47. Convert_apps_DaemonSetSpec_To_v1beta2_DaemonSetSpec,
  48. Convert_v1beta2_DaemonSetSpec_To_apps_DaemonSetSpec,
  49. Convert_apps_DaemonSetUpdateStrategy_To_v1beta2_DaemonSetUpdateStrategy,
  50. Convert_v1beta2_DaemonSetUpdateStrategy_To_apps_DaemonSetUpdateStrategy,
  51. // extensions
  52. // TODO: below conversions should be dropped in favor of auto-generated
  53. // ones, see https://github.com/kubernetes/kubernetes/issues/39865
  54. Convert_v1beta2_ScaleStatus_To_autoscaling_ScaleStatus,
  55. Convert_autoscaling_ScaleStatus_To_v1beta2_ScaleStatus,
  56. Convert_v1beta2_DeploymentSpec_To_apps_DeploymentSpec,
  57. Convert_apps_DeploymentSpec_To_v1beta2_DeploymentSpec,
  58. Convert_v1beta2_DeploymentStrategy_To_apps_DeploymentStrategy,
  59. Convert_apps_DeploymentStrategy_To_v1beta2_DeploymentStrategy,
  60. Convert_v1beta2_RollingUpdateDeployment_To_apps_RollingUpdateDeployment,
  61. Convert_apps_RollingUpdateDeployment_To_v1beta2_RollingUpdateDeployment,
  62. Convert_apps_ReplicaSetSpec_To_v1beta2_ReplicaSetSpec,
  63. Convert_v1beta2_ReplicaSetSpec_To_apps_ReplicaSetSpec,
  64. )
  65. if err != nil {
  66. return err
  67. }
  68. // Add field label conversions for kinds having selectable nothing but ObjectMeta fields.
  69. err = scheme.AddFieldLabelConversionFunc(SchemeGroupVersion.WithKind("StatefulSet"),
  70. func(label, value string) (string, string, error) {
  71. switch label {
  72. case "metadata.name", "metadata.namespace", "status.successful":
  73. return label, value, nil
  74. default:
  75. return "", "", fmt.Errorf("field label not supported for appsv1beta2.StatefulSet: %s", label)
  76. }
  77. })
  78. if err != nil {
  79. return err
  80. }
  81. return nil
  82. }
  83. func Convert_apps_RollingUpdateDaemonSet_To_v1beta2_RollingUpdateDaemonSet(in *apps.RollingUpdateDaemonSet, out *appsv1beta2.RollingUpdateDaemonSet, s conversion.Scope) error {
  84. if out.MaxUnavailable == nil {
  85. out.MaxUnavailable = &intstr.IntOrString{}
  86. }
  87. if err := s.Convert(&in.MaxUnavailable, out.MaxUnavailable, 0); err != nil {
  88. return err
  89. }
  90. return nil
  91. }
  92. func Convert_v1beta2_RollingUpdateDaemonSet_To_apps_RollingUpdateDaemonSet(in *appsv1beta2.RollingUpdateDaemonSet, out *apps.RollingUpdateDaemonSet, s conversion.Scope) error {
  93. if err := s.Convert(in.MaxUnavailable, &out.MaxUnavailable, 0); err != nil {
  94. return err
  95. }
  96. return nil
  97. }
  98. func Convert_v1beta2_StatefulSetSpec_To_apps_StatefulSetSpec(in *appsv1beta2.StatefulSetSpec, out *apps.StatefulSetSpec, s conversion.Scope) error {
  99. if in.Replicas != nil {
  100. out.Replicas = *in.Replicas
  101. }
  102. if in.Selector != nil {
  103. in, out := &in.Selector, &out.Selector
  104. *out = new(metav1.LabelSelector)
  105. if err := s.Convert(*in, *out, 0); err != nil {
  106. return err
  107. }
  108. } else {
  109. out.Selector = nil
  110. }
  111. if err := k8s_api_v1.Convert_v1_PodTemplateSpec_To_core_PodTemplateSpec(&in.Template, &out.Template, s); err != nil {
  112. return err
  113. }
  114. if in.VolumeClaimTemplates != nil {
  115. in, out := &in.VolumeClaimTemplates, &out.VolumeClaimTemplates
  116. *out = make([]api.PersistentVolumeClaim, len(*in))
  117. for i := range *in {
  118. if err := s.Convert(&(*in)[i], &(*out)[i], 0); err != nil {
  119. return err
  120. }
  121. }
  122. } else {
  123. out.VolumeClaimTemplates = nil
  124. }
  125. if err := Convert_v1beta2_StatefulSetUpdateStrategy_To_apps_StatefulSetUpdateStrategy(&in.UpdateStrategy, &out.UpdateStrategy, s); err != nil {
  126. return err
  127. }
  128. if in.RevisionHistoryLimit != nil {
  129. out.RevisionHistoryLimit = new(int32)
  130. *out.RevisionHistoryLimit = *in.RevisionHistoryLimit
  131. } else {
  132. out.RevisionHistoryLimit = nil
  133. }
  134. out.ServiceName = in.ServiceName
  135. out.PodManagementPolicy = apps.PodManagementPolicyType(in.PodManagementPolicy)
  136. return nil
  137. }
  138. func Convert_apps_StatefulSetSpec_To_v1beta2_StatefulSetSpec(in *apps.StatefulSetSpec, out *appsv1beta2.StatefulSetSpec, s conversion.Scope) error {
  139. out.Replicas = new(int32)
  140. *out.Replicas = in.Replicas
  141. if in.Selector != nil {
  142. in, out := &in.Selector, &out.Selector
  143. *out = new(metav1.LabelSelector)
  144. if err := s.Convert(*in, *out, 0); err != nil {
  145. return err
  146. }
  147. } else {
  148. out.Selector = nil
  149. }
  150. if err := k8s_api_v1.Convert_core_PodTemplateSpec_To_v1_PodTemplateSpec(&in.Template, &out.Template, s); err != nil {
  151. return err
  152. }
  153. if in.VolumeClaimTemplates != nil {
  154. in, out := &in.VolumeClaimTemplates, &out.VolumeClaimTemplates
  155. *out = make([]v1.PersistentVolumeClaim, len(*in))
  156. for i := range *in {
  157. if err := s.Convert(&(*in)[i], &(*out)[i], 0); err != nil {
  158. return err
  159. }
  160. }
  161. } else {
  162. out.VolumeClaimTemplates = nil
  163. }
  164. if in.RevisionHistoryLimit != nil {
  165. out.RevisionHistoryLimit = new(int32)
  166. *out.RevisionHistoryLimit = *in.RevisionHistoryLimit
  167. } else {
  168. out.RevisionHistoryLimit = nil
  169. }
  170. out.ServiceName = in.ServiceName
  171. out.PodManagementPolicy = appsv1beta2.PodManagementPolicyType(in.PodManagementPolicy)
  172. if err := Convert_apps_StatefulSetUpdateStrategy_To_v1beta2_StatefulSetUpdateStrategy(&in.UpdateStrategy, &out.UpdateStrategy, s); err != nil {
  173. return err
  174. }
  175. return nil
  176. }
  177. func Convert_v1beta2_StatefulSetUpdateStrategy_To_apps_StatefulSetUpdateStrategy(in *appsv1beta2.StatefulSetUpdateStrategy, out *apps.StatefulSetUpdateStrategy, s conversion.Scope) error {
  178. out.Type = apps.StatefulSetUpdateStrategyType(in.Type)
  179. if in.RollingUpdate != nil {
  180. out.RollingUpdate = new(apps.RollingUpdateStatefulSetStrategy)
  181. out.RollingUpdate.Partition = *in.RollingUpdate.Partition
  182. } else {
  183. out.RollingUpdate = nil
  184. }
  185. return nil
  186. }
  187. func Convert_apps_StatefulSetUpdateStrategy_To_v1beta2_StatefulSetUpdateStrategy(in *apps.StatefulSetUpdateStrategy, out *appsv1beta2.StatefulSetUpdateStrategy, s conversion.Scope) error {
  188. out.Type = appsv1beta2.StatefulSetUpdateStrategyType(in.Type)
  189. if in.RollingUpdate != nil {
  190. out.RollingUpdate = new(appsv1beta2.RollingUpdateStatefulSetStrategy)
  191. out.RollingUpdate.Partition = new(int32)
  192. *out.RollingUpdate.Partition = in.RollingUpdate.Partition
  193. } else {
  194. out.RollingUpdate = nil
  195. }
  196. return nil
  197. }
  198. func Convert_v1beta2_StatefulSetStatus_To_apps_StatefulSetStatus(in *appsv1beta2.StatefulSetStatus, out *apps.StatefulSetStatus, s conversion.Scope) error {
  199. out.ObservedGeneration = new(int64)
  200. *out.ObservedGeneration = in.ObservedGeneration
  201. out.Replicas = in.Replicas
  202. out.ReadyReplicas = in.ReadyReplicas
  203. out.CurrentReplicas = in.CurrentReplicas
  204. out.UpdatedReplicas = in.UpdatedReplicas
  205. out.CurrentRevision = in.CurrentRevision
  206. out.UpdateRevision = in.UpdateRevision
  207. if in.CollisionCount != nil {
  208. out.CollisionCount = new(int32)
  209. *out.CollisionCount = *in.CollisionCount
  210. }
  211. out.Conditions = make([]apps.StatefulSetCondition, len(in.Conditions))
  212. for i := range in.Conditions {
  213. if err := Convert_v1beta2_StatefulSetCondition_To_apps_StatefulSetCondition(&in.Conditions[i], &out.Conditions[i], s); err != nil {
  214. return err
  215. }
  216. }
  217. return nil
  218. }
  219. func Convert_apps_StatefulSetStatus_To_v1beta2_StatefulSetStatus(in *apps.StatefulSetStatus, out *appsv1beta2.StatefulSetStatus, s conversion.Scope) error {
  220. if in.ObservedGeneration != nil {
  221. out.ObservedGeneration = *in.ObservedGeneration
  222. }
  223. out.Replicas = in.Replicas
  224. out.ReadyReplicas = in.ReadyReplicas
  225. out.CurrentReplicas = in.CurrentReplicas
  226. out.UpdatedReplicas = in.UpdatedReplicas
  227. out.CurrentRevision = in.CurrentRevision
  228. out.UpdateRevision = in.UpdateRevision
  229. if in.CollisionCount != nil {
  230. out.CollisionCount = new(int32)
  231. *out.CollisionCount = *in.CollisionCount
  232. }
  233. out.Conditions = make([]appsv1beta2.StatefulSetCondition, len(in.Conditions))
  234. for i := range in.Conditions {
  235. if err := Convert_apps_StatefulSetCondition_To_v1beta2_StatefulSetCondition(&in.Conditions[i], &out.Conditions[i], s); err != nil {
  236. return err
  237. }
  238. }
  239. return nil
  240. }
  241. func Convert_autoscaling_ScaleStatus_To_v1beta2_ScaleStatus(in *autoscaling.ScaleStatus, out *appsv1beta2.ScaleStatus, s conversion.Scope) error {
  242. out.Replicas = int32(in.Replicas)
  243. out.TargetSelector = in.Selector
  244. out.Selector = nil
  245. selector, err := metav1.ParseToLabelSelector(in.Selector)
  246. if err != nil {
  247. return fmt.Errorf("failed to parse selector: %v", err)
  248. }
  249. if len(selector.MatchExpressions) == 0 {
  250. out.Selector = selector.MatchLabels
  251. }
  252. return nil
  253. }
  254. func Convert_v1beta2_ScaleStatus_To_autoscaling_ScaleStatus(in *appsv1beta2.ScaleStatus, out *autoscaling.ScaleStatus, s conversion.Scope) error {
  255. out.Replicas = in.Replicas
  256. // Normally when 2 fields map to the same internal value we favor the old field, since
  257. // old clients can't be expected to know about new fields but clients that know about the
  258. // new field can be expected to know about the old field (though that's not quite true, due
  259. // to kubectl apply). However, these fields are readonly, so any non-nil value should work.
  260. if in.TargetSelector != "" {
  261. out.Selector = in.TargetSelector
  262. } else if in.Selector != nil {
  263. set := labels.Set{}
  264. for key, val := range in.Selector {
  265. set[key] = val
  266. }
  267. out.Selector = labels.SelectorFromSet(set).String()
  268. } else {
  269. out.Selector = ""
  270. }
  271. return nil
  272. }
  273. func Convert_v1beta2_DeploymentSpec_To_apps_DeploymentSpec(in *appsv1beta2.DeploymentSpec, out *apps.DeploymentSpec, s conversion.Scope) error {
  274. if in.Replicas != nil {
  275. out.Replicas = *in.Replicas
  276. }
  277. out.Selector = in.Selector
  278. if err := k8s_api_v1.Convert_v1_PodTemplateSpec_To_core_PodTemplateSpec(&in.Template, &out.Template, s); err != nil {
  279. return err
  280. }
  281. if err := Convert_v1beta2_DeploymentStrategy_To_apps_DeploymentStrategy(&in.Strategy, &out.Strategy, s); err != nil {
  282. return err
  283. }
  284. out.RevisionHistoryLimit = in.RevisionHistoryLimit
  285. out.MinReadySeconds = in.MinReadySeconds
  286. out.Paused = in.Paused
  287. if in.ProgressDeadlineSeconds != nil {
  288. out.ProgressDeadlineSeconds = new(int32)
  289. *out.ProgressDeadlineSeconds = *in.ProgressDeadlineSeconds
  290. }
  291. return nil
  292. }
  293. func Convert_apps_DeploymentSpec_To_v1beta2_DeploymentSpec(in *apps.DeploymentSpec, out *appsv1beta2.DeploymentSpec, s conversion.Scope) error {
  294. out.Replicas = &in.Replicas
  295. out.Selector = in.Selector
  296. if err := k8s_api_v1.Convert_core_PodTemplateSpec_To_v1_PodTemplateSpec(&in.Template, &out.Template, s); err != nil {
  297. return err
  298. }
  299. if err := Convert_apps_DeploymentStrategy_To_v1beta2_DeploymentStrategy(&in.Strategy, &out.Strategy, s); err != nil {
  300. return err
  301. }
  302. if in.RevisionHistoryLimit != nil {
  303. out.RevisionHistoryLimit = new(int32)
  304. *out.RevisionHistoryLimit = int32(*in.RevisionHistoryLimit)
  305. }
  306. out.MinReadySeconds = int32(in.MinReadySeconds)
  307. out.Paused = in.Paused
  308. if in.ProgressDeadlineSeconds != nil {
  309. out.ProgressDeadlineSeconds = new(int32)
  310. *out.ProgressDeadlineSeconds = *in.ProgressDeadlineSeconds
  311. }
  312. return nil
  313. }
  314. func Convert_apps_DeploymentStrategy_To_v1beta2_DeploymentStrategy(in *apps.DeploymentStrategy, out *appsv1beta2.DeploymentStrategy, s conversion.Scope) error {
  315. out.Type = appsv1beta2.DeploymentStrategyType(in.Type)
  316. if in.RollingUpdate != nil {
  317. out.RollingUpdate = new(appsv1beta2.RollingUpdateDeployment)
  318. if err := Convert_apps_RollingUpdateDeployment_To_v1beta2_RollingUpdateDeployment(in.RollingUpdate, out.RollingUpdate, s); err != nil {
  319. return err
  320. }
  321. } else {
  322. out.RollingUpdate = nil
  323. }
  324. return nil
  325. }
  326. func Convert_v1beta2_DeploymentStrategy_To_apps_DeploymentStrategy(in *appsv1beta2.DeploymentStrategy, out *apps.DeploymentStrategy, s conversion.Scope) error {
  327. out.Type = apps.DeploymentStrategyType(in.Type)
  328. if in.RollingUpdate != nil {
  329. out.RollingUpdate = new(apps.RollingUpdateDeployment)
  330. if err := Convert_v1beta2_RollingUpdateDeployment_To_apps_RollingUpdateDeployment(in.RollingUpdate, out.RollingUpdate, s); err != nil {
  331. return err
  332. }
  333. } else {
  334. out.RollingUpdate = nil
  335. }
  336. return nil
  337. }
  338. func Convert_v1beta2_RollingUpdateDeployment_To_apps_RollingUpdateDeployment(in *appsv1beta2.RollingUpdateDeployment, out *apps.RollingUpdateDeployment, s conversion.Scope) error {
  339. if err := s.Convert(in.MaxUnavailable, &out.MaxUnavailable, 0); err != nil {
  340. return err
  341. }
  342. if err := s.Convert(in.MaxSurge, &out.MaxSurge, 0); err != nil {
  343. return err
  344. }
  345. return nil
  346. }
  347. func Convert_apps_RollingUpdateDeployment_To_v1beta2_RollingUpdateDeployment(in *apps.RollingUpdateDeployment, out *appsv1beta2.RollingUpdateDeployment, s conversion.Scope) error {
  348. if out.MaxUnavailable == nil {
  349. out.MaxUnavailable = &intstr.IntOrString{}
  350. }
  351. if err := s.Convert(&in.MaxUnavailable, out.MaxUnavailable, 0); err != nil {
  352. return err
  353. }
  354. if out.MaxSurge == nil {
  355. out.MaxSurge = &intstr.IntOrString{}
  356. }
  357. if err := s.Convert(&in.MaxSurge, out.MaxSurge, 0); err != nil {
  358. return err
  359. }
  360. return nil
  361. }
  362. func Convert_apps_ReplicaSetSpec_To_v1beta2_ReplicaSetSpec(in *apps.ReplicaSetSpec, out *appsv1beta2.ReplicaSetSpec, s conversion.Scope) error {
  363. out.Replicas = new(int32)
  364. *out.Replicas = int32(in.Replicas)
  365. out.MinReadySeconds = in.MinReadySeconds
  366. out.Selector = in.Selector
  367. if err := k8s_api_v1.Convert_core_PodTemplateSpec_To_v1_PodTemplateSpec(&in.Template, &out.Template, s); err != nil {
  368. return err
  369. }
  370. return nil
  371. }
  372. func Convert_v1beta2_Deployment_To_apps_Deployment(in *appsv1beta2.Deployment, out *apps.Deployment, s conversion.Scope) error {
  373. out.ObjectMeta = in.ObjectMeta
  374. if err := Convert_v1beta2_DeploymentSpec_To_apps_DeploymentSpec(&in.Spec, &out.Spec, s); err != nil {
  375. return err
  376. }
  377. // Copy annotation to deprecated rollbackTo field for roundtrip
  378. // TODO: remove this conversion after we delete extensions/v1beta1 and apps/v1beta1 Deployment
  379. if revision := in.Annotations[appsv1beta2.DeprecatedRollbackTo]; revision != "" {
  380. if revision64, err := strconv.ParseInt(revision, 10, 64); err != nil {
  381. return fmt.Errorf("failed to parse annotation[%s]=%s as int64: %v", appsv1beta2.DeprecatedRollbackTo, revision, err)
  382. } else {
  383. out.Spec.RollbackTo = new(apps.RollbackConfig)
  384. out.Spec.RollbackTo.Revision = revision64
  385. }
  386. out.Annotations = deepCopyStringMap(out.Annotations)
  387. delete(out.Annotations, appsv1beta2.DeprecatedRollbackTo)
  388. } else {
  389. out.Spec.RollbackTo = nil
  390. }
  391. if err := Convert_v1beta2_DeploymentStatus_To_apps_DeploymentStatus(&in.Status, &out.Status, s); err != nil {
  392. return err
  393. }
  394. return nil
  395. }
  396. func Convert_v1beta2_ReplicaSetSpec_To_apps_ReplicaSetSpec(in *appsv1beta2.ReplicaSetSpec, out *apps.ReplicaSetSpec, s conversion.Scope) error {
  397. if in.Replicas != nil {
  398. out.Replicas = *in.Replicas
  399. }
  400. out.MinReadySeconds = in.MinReadySeconds
  401. out.Selector = in.Selector
  402. if err := k8s_api_v1.Convert_v1_PodTemplateSpec_To_core_PodTemplateSpec(&in.Template, &out.Template, s); err != nil {
  403. return err
  404. }
  405. return nil
  406. }
  407. func Convert_apps_Deployment_To_v1beta2_Deployment(in *apps.Deployment, out *appsv1beta2.Deployment, s conversion.Scope) error {
  408. out.ObjectMeta = in.ObjectMeta
  409. out.Annotations = deepCopyStringMap(out.Annotations) // deep copy because we modify annotations below
  410. if err := Convert_apps_DeploymentSpec_To_v1beta2_DeploymentSpec(&in.Spec, &out.Spec, s); err != nil {
  411. return err
  412. }
  413. // Copy deprecated rollbackTo field to annotation for roundtrip
  414. // TODO: remove this conversion after we delete extensions/v1beta1 and apps/v1beta1 Deployment
  415. if in.Spec.RollbackTo != nil {
  416. if out.Annotations == nil {
  417. out.Annotations = make(map[string]string)
  418. }
  419. out.Annotations[appsv1beta2.DeprecatedRollbackTo] = strconv.FormatInt(in.Spec.RollbackTo.Revision, 10)
  420. } else {
  421. delete(out.Annotations, appsv1beta2.DeprecatedRollbackTo)
  422. }
  423. if err := Convert_apps_DeploymentStatus_To_v1beta2_DeploymentStatus(&in.Status, &out.Status, s); err != nil {
  424. return err
  425. }
  426. return nil
  427. }
  428. func Convert_apps_DaemonSet_To_v1beta2_DaemonSet(in *apps.DaemonSet, out *appsv1beta2.DaemonSet, s conversion.Scope) error {
  429. out.ObjectMeta = in.ObjectMeta
  430. out.Annotations = deepCopyStringMap(out.Annotations)
  431. out.Annotations[appsv1beta2.DeprecatedTemplateGeneration] = strconv.FormatInt(in.Spec.TemplateGeneration, 10)
  432. if err := Convert_apps_DaemonSetSpec_To_v1beta2_DaemonSetSpec(&in.Spec, &out.Spec, s); err != nil {
  433. return err
  434. }
  435. if err := s.Convert(&in.Status, &out.Status, 0); err != nil {
  436. return err
  437. }
  438. return nil
  439. }
  440. func Convert_apps_DaemonSetSpec_To_v1beta2_DaemonSetSpec(in *apps.DaemonSetSpec, out *appsv1beta2.DaemonSetSpec, s conversion.Scope) error {
  441. out.Selector = in.Selector
  442. if err := k8s_api_v1.Convert_core_PodTemplateSpec_To_v1_PodTemplateSpec(&in.Template, &out.Template, s); err != nil {
  443. return err
  444. }
  445. if err := Convert_apps_DaemonSetUpdateStrategy_To_v1beta2_DaemonSetUpdateStrategy(&in.UpdateStrategy, &out.UpdateStrategy, s); err != nil {
  446. return err
  447. }
  448. out.MinReadySeconds = int32(in.MinReadySeconds)
  449. if in.RevisionHistoryLimit != nil {
  450. out.RevisionHistoryLimit = new(int32)
  451. *out.RevisionHistoryLimit = *in.RevisionHistoryLimit
  452. } else {
  453. out.RevisionHistoryLimit = nil
  454. }
  455. return nil
  456. }
  457. func Convert_apps_DaemonSetUpdateStrategy_To_v1beta2_DaemonSetUpdateStrategy(in *apps.DaemonSetUpdateStrategy, out *appsv1beta2.DaemonSetUpdateStrategy, s conversion.Scope) error {
  458. out.Type = appsv1beta2.DaemonSetUpdateStrategyType(in.Type)
  459. if in.RollingUpdate != nil {
  460. out.RollingUpdate = &appsv1beta2.RollingUpdateDaemonSet{}
  461. if err := Convert_apps_RollingUpdateDaemonSet_To_v1beta2_RollingUpdateDaemonSet(in.RollingUpdate, out.RollingUpdate, s); err != nil {
  462. return err
  463. }
  464. }
  465. return nil
  466. }
  467. func Convert_v1beta2_DaemonSet_To_apps_DaemonSet(in *appsv1beta2.DaemonSet, out *apps.DaemonSet, s conversion.Scope) error {
  468. out.ObjectMeta = in.ObjectMeta
  469. if err := Convert_v1beta2_DaemonSetSpec_To_apps_DaemonSetSpec(&in.Spec, &out.Spec, s); err != nil {
  470. return err
  471. }
  472. if value, ok := in.Annotations[appsv1beta2.DeprecatedTemplateGeneration]; ok {
  473. if value64, err := strconv.ParseInt(value, 10, 64); err != nil {
  474. return err
  475. } else {
  476. out.Spec.TemplateGeneration = value64
  477. out.Annotations = deepCopyStringMap(out.Annotations)
  478. delete(out.Annotations, appsv1beta2.DeprecatedTemplateGeneration)
  479. }
  480. }
  481. if err := s.Convert(&in.Status, &out.Status, 0); err != nil {
  482. return err
  483. }
  484. return nil
  485. }
  486. func Convert_v1beta2_DaemonSetSpec_To_apps_DaemonSetSpec(in *appsv1beta2.DaemonSetSpec, out *apps.DaemonSetSpec, s conversion.Scope) error {
  487. out.Selector = in.Selector
  488. if err := k8s_api_v1.Convert_v1_PodTemplateSpec_To_core_PodTemplateSpec(&in.Template, &out.Template, s); err != nil {
  489. return err
  490. }
  491. if err := Convert_v1beta2_DaemonSetUpdateStrategy_To_apps_DaemonSetUpdateStrategy(&in.UpdateStrategy, &out.UpdateStrategy, s); err != nil {
  492. return err
  493. }
  494. if in.RevisionHistoryLimit != nil {
  495. out.RevisionHistoryLimit = new(int32)
  496. *out.RevisionHistoryLimit = *in.RevisionHistoryLimit
  497. } else {
  498. out.RevisionHistoryLimit = nil
  499. }
  500. out.MinReadySeconds = in.MinReadySeconds
  501. return nil
  502. }
  503. func Convert_v1beta2_DaemonSetUpdateStrategy_To_apps_DaemonSetUpdateStrategy(in *appsv1beta2.DaemonSetUpdateStrategy, out *apps.DaemonSetUpdateStrategy, s conversion.Scope) error {
  504. out.Type = apps.DaemonSetUpdateStrategyType(in.Type)
  505. if in.RollingUpdate != nil {
  506. out.RollingUpdate = &apps.RollingUpdateDaemonSet{}
  507. if err := Convert_v1beta2_RollingUpdateDaemonSet_To_apps_RollingUpdateDaemonSet(in.RollingUpdate, out.RollingUpdate, s); err != nil {
  508. return err
  509. }
  510. }
  511. return nil
  512. }
  513. func deepCopyStringMap(m map[string]string) map[string]string {
  514. ret := make(map[string]string, len(m))
  515. for k, v := range m {
  516. ret[k] = v
  517. }
  518. return ret
  519. }