| /* |
| Copyright 2016 The Kubernetes Authors. |
| |
| Licensed under the Apache License, Version 2.0 (the "License"); |
| you may not use this file except in compliance with the License. |
| You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| */ |
| |
| package v1beta1 |
| |
| import ( |
| "fmt" |
| |
| appsv1beta1 "k8s.io/api/apps/v1beta1" |
| "k8s.io/api/core/v1" |
| metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" |
| "k8s.io/apimachinery/pkg/conversion" |
| "k8s.io/apimachinery/pkg/labels" |
| "k8s.io/apimachinery/pkg/runtime" |
| "k8s.io/apimachinery/pkg/util/intstr" |
| "k8s.io/kubernetes/pkg/apis/apps" |
| "k8s.io/kubernetes/pkg/apis/autoscaling" |
| api "k8s.io/kubernetes/pkg/apis/core" |
| k8s_api_v1 "k8s.io/kubernetes/pkg/apis/core/v1" |
| ) |
| |
| func addConversionFuncs(scheme *runtime.Scheme) error { |
| // Add non-generated conversion functions to handle the *int32 -> int32 |
| // conversion. A pointer is useful in the versioned type so we can default |
| // it, but a plain int32 is more convenient in the internal type. These |
| // functions are the same as the autogenerated ones in every other way. |
| err := scheme.AddConversionFuncs( |
| Convert_v1beta1_StatefulSetSpec_To_apps_StatefulSetSpec, |
| Convert_apps_StatefulSetSpec_To_v1beta1_StatefulSetSpec, |
| Convert_v1beta1_StatefulSetUpdateStrategy_To_apps_StatefulSetUpdateStrategy, |
| Convert_apps_StatefulSetUpdateStrategy_To_v1beta1_StatefulSetUpdateStrategy, |
| // extensions |
| // TODO: below conversions should be dropped in favor of auto-generated |
| // ones, see https://github.com/kubernetes/kubernetes/issues/39865 |
| Convert_v1beta1_ScaleStatus_To_autoscaling_ScaleStatus, |
| Convert_autoscaling_ScaleStatus_To_v1beta1_ScaleStatus, |
| Convert_v1beta1_DeploymentSpec_To_apps_DeploymentSpec, |
| Convert_apps_DeploymentSpec_To_v1beta1_DeploymentSpec, |
| Convert_v1beta1_DeploymentStrategy_To_apps_DeploymentStrategy, |
| Convert_apps_DeploymentStrategy_To_v1beta1_DeploymentStrategy, |
| Convert_v1beta1_RollingUpdateDeployment_To_apps_RollingUpdateDeployment, |
| Convert_apps_RollingUpdateDeployment_To_v1beta1_RollingUpdateDeployment, |
| ) |
| if err != nil { |
| return err |
| } |
| |
| // Add field label conversions for kinds having selectable nothing but ObjectMeta fields. |
| err = scheme.AddFieldLabelConversionFunc(SchemeGroupVersion.WithKind("StatefulSet"), |
| func(label, value string) (string, string, error) { |
| switch label { |
| case "metadata.name", "metadata.namespace", "status.successful": |
| return label, value, nil |
| default: |
| return "", "", fmt.Errorf("field label not supported for appsv1beta1.StatefulSet: %s", label) |
| } |
| }) |
| if err != nil { |
| return err |
| } |
| |
| return nil |
| } |
| |
| func Convert_v1beta1_StatefulSetSpec_To_apps_StatefulSetSpec(in *appsv1beta1.StatefulSetSpec, out *apps.StatefulSetSpec, s conversion.Scope) error { |
| if in.Replicas != nil { |
| out.Replicas = *in.Replicas |
| } |
| if in.Selector != nil { |
| in, out := &in.Selector, &out.Selector |
| *out = new(metav1.LabelSelector) |
| if err := s.Convert(*in, *out, 0); err != nil { |
| return err |
| } |
| } else { |
| out.Selector = nil |
| } |
| if err := k8s_api_v1.Convert_v1_PodTemplateSpec_To_core_PodTemplateSpec(&in.Template, &out.Template, s); err != nil { |
| return err |
| } |
| if in.VolumeClaimTemplates != nil { |
| in, out := &in.VolumeClaimTemplates, &out.VolumeClaimTemplates |
| *out = make([]api.PersistentVolumeClaim, len(*in)) |
| for i := range *in { |
| if err := s.Convert(&(*in)[i], &(*out)[i], 0); err != nil { |
| return err |
| } |
| } |
| } else { |
| out.VolumeClaimTemplates = nil |
| } |
| if err := Convert_v1beta1_StatefulSetUpdateStrategy_To_apps_StatefulSetUpdateStrategy(&in.UpdateStrategy, &out.UpdateStrategy, s); err != nil { |
| return err |
| } |
| if in.RevisionHistoryLimit != nil { |
| out.RevisionHistoryLimit = new(int32) |
| *out.RevisionHistoryLimit = *in.RevisionHistoryLimit |
| } else { |
| out.RevisionHistoryLimit = nil |
| } |
| out.ServiceName = in.ServiceName |
| out.PodManagementPolicy = apps.PodManagementPolicyType(in.PodManagementPolicy) |
| return nil |
| } |
| |
| func Convert_apps_StatefulSetSpec_To_v1beta1_StatefulSetSpec(in *apps.StatefulSetSpec, out *appsv1beta1.StatefulSetSpec, s conversion.Scope) error { |
| out.Replicas = new(int32) |
| *out.Replicas = in.Replicas |
| if in.Selector != nil { |
| in, out := &in.Selector, &out.Selector |
| *out = new(metav1.LabelSelector) |
| if err := s.Convert(*in, *out, 0); err != nil { |
| return err |
| } |
| } else { |
| out.Selector = nil |
| } |
| if err := k8s_api_v1.Convert_core_PodTemplateSpec_To_v1_PodTemplateSpec(&in.Template, &out.Template, s); err != nil { |
| return err |
| } |
| if in.VolumeClaimTemplates != nil { |
| in, out := &in.VolumeClaimTemplates, &out.VolumeClaimTemplates |
| *out = make([]v1.PersistentVolumeClaim, len(*in)) |
| for i := range *in { |
| if err := s.Convert(&(*in)[i], &(*out)[i], 0); err != nil { |
| return err |
| } |
| } |
| } else { |
| out.VolumeClaimTemplates = nil |
| } |
| if in.RevisionHistoryLimit != nil { |
| out.RevisionHistoryLimit = new(int32) |
| *out.RevisionHistoryLimit = *in.RevisionHistoryLimit |
| } else { |
| out.RevisionHistoryLimit = nil |
| } |
| out.ServiceName = in.ServiceName |
| out.PodManagementPolicy = appsv1beta1.PodManagementPolicyType(in.PodManagementPolicy) |
| if err := Convert_apps_StatefulSetUpdateStrategy_To_v1beta1_StatefulSetUpdateStrategy(&in.UpdateStrategy, &out.UpdateStrategy, s); err != nil { |
| return err |
| } |
| return nil |
| } |
| |
| func Convert_v1beta1_StatefulSetUpdateStrategy_To_apps_StatefulSetUpdateStrategy(in *appsv1beta1.StatefulSetUpdateStrategy, out *apps.StatefulSetUpdateStrategy, s conversion.Scope) error { |
| out.Type = apps.StatefulSetUpdateStrategyType(in.Type) |
| if in.RollingUpdate != nil { |
| out.RollingUpdate = new(apps.RollingUpdateStatefulSetStrategy) |
| out.RollingUpdate.Partition = *in.RollingUpdate.Partition |
| } else { |
| out.RollingUpdate = nil |
| } |
| return nil |
| } |
| |
| func Convert_apps_StatefulSetUpdateStrategy_To_v1beta1_StatefulSetUpdateStrategy(in *apps.StatefulSetUpdateStrategy, out *appsv1beta1.StatefulSetUpdateStrategy, s conversion.Scope) error { |
| out.Type = appsv1beta1.StatefulSetUpdateStrategyType(in.Type) |
| if in.RollingUpdate != nil { |
| out.RollingUpdate = new(appsv1beta1.RollingUpdateStatefulSetStrategy) |
| out.RollingUpdate.Partition = new(int32) |
| *out.RollingUpdate.Partition = in.RollingUpdate.Partition |
| } else { |
| out.RollingUpdate = nil |
| } |
| return nil |
| } |
| |
| func Convert_autoscaling_ScaleStatus_To_v1beta1_ScaleStatus(in *autoscaling.ScaleStatus, out *appsv1beta1.ScaleStatus, s conversion.Scope) error { |
| out.Replicas = int32(in.Replicas) |
| out.TargetSelector = in.Selector |
| |
| out.Selector = nil |
| selector, err := metav1.ParseToLabelSelector(in.Selector) |
| if err != nil { |
| return fmt.Errorf("failed to parse selector: %v", err) |
| } |
| if len(selector.MatchExpressions) == 0 { |
| out.Selector = selector.MatchLabels |
| } |
| |
| return nil |
| } |
| |
| func Convert_v1beta1_ScaleStatus_To_autoscaling_ScaleStatus(in *appsv1beta1.ScaleStatus, out *autoscaling.ScaleStatus, s conversion.Scope) error { |
| out.Replicas = in.Replicas |
| |
| if in.TargetSelector != "" { |
| out.Selector = in.TargetSelector |
| } else if in.Selector != nil { |
| set := labels.Set{} |
| for key, val := range in.Selector { |
| set[key] = val |
| } |
| out.Selector = labels.SelectorFromSet(set).String() |
| } else { |
| out.Selector = "" |
| } |
| return nil |
| } |
| |
| func Convert_v1beta1_DeploymentSpec_To_apps_DeploymentSpec(in *appsv1beta1.DeploymentSpec, out *apps.DeploymentSpec, s conversion.Scope) error { |
| if in.Replicas != nil { |
| out.Replicas = *in.Replicas |
| } |
| out.Selector = in.Selector |
| if err := k8s_api_v1.Convert_v1_PodTemplateSpec_To_core_PodTemplateSpec(&in.Template, &out.Template, s); err != nil { |
| return err |
| } |
| if err := Convert_v1beta1_DeploymentStrategy_To_apps_DeploymentStrategy(&in.Strategy, &out.Strategy, s); err != nil { |
| return err |
| } |
| out.RevisionHistoryLimit = in.RevisionHistoryLimit |
| out.MinReadySeconds = in.MinReadySeconds |
| out.Paused = in.Paused |
| if in.RollbackTo != nil { |
| out.RollbackTo = new(apps.RollbackConfig) |
| out.RollbackTo.Revision = in.RollbackTo.Revision |
| } else { |
| out.RollbackTo = nil |
| } |
| if in.ProgressDeadlineSeconds != nil { |
| out.ProgressDeadlineSeconds = new(int32) |
| *out.ProgressDeadlineSeconds = *in.ProgressDeadlineSeconds |
| } |
| return nil |
| } |
| |
| func Convert_apps_DeploymentSpec_To_v1beta1_DeploymentSpec(in *apps.DeploymentSpec, out *appsv1beta1.DeploymentSpec, s conversion.Scope) error { |
| out.Replicas = &in.Replicas |
| out.Selector = in.Selector |
| if err := k8s_api_v1.Convert_core_PodTemplateSpec_To_v1_PodTemplateSpec(&in.Template, &out.Template, s); err != nil { |
| return err |
| } |
| if err := Convert_apps_DeploymentStrategy_To_v1beta1_DeploymentStrategy(&in.Strategy, &out.Strategy, s); err != nil { |
| return err |
| } |
| if in.RevisionHistoryLimit != nil { |
| out.RevisionHistoryLimit = new(int32) |
| *out.RevisionHistoryLimit = int32(*in.RevisionHistoryLimit) |
| } |
| out.MinReadySeconds = int32(in.MinReadySeconds) |
| out.Paused = in.Paused |
| if in.RollbackTo != nil { |
| out.RollbackTo = new(appsv1beta1.RollbackConfig) |
| out.RollbackTo.Revision = int64(in.RollbackTo.Revision) |
| } else { |
| out.RollbackTo = nil |
| } |
| if in.ProgressDeadlineSeconds != nil { |
| out.ProgressDeadlineSeconds = new(int32) |
| *out.ProgressDeadlineSeconds = *in.ProgressDeadlineSeconds |
| } |
| return nil |
| } |
| |
| func Convert_apps_DeploymentStrategy_To_v1beta1_DeploymentStrategy(in *apps.DeploymentStrategy, out *appsv1beta1.DeploymentStrategy, s conversion.Scope) error { |
| out.Type = appsv1beta1.DeploymentStrategyType(in.Type) |
| if in.RollingUpdate != nil { |
| out.RollingUpdate = new(appsv1beta1.RollingUpdateDeployment) |
| if err := Convert_apps_RollingUpdateDeployment_To_v1beta1_RollingUpdateDeployment(in.RollingUpdate, out.RollingUpdate, s); err != nil { |
| return err |
| } |
| } else { |
| out.RollingUpdate = nil |
| } |
| return nil |
| } |
| |
| func Convert_v1beta1_DeploymentStrategy_To_apps_DeploymentStrategy(in *appsv1beta1.DeploymentStrategy, out *apps.DeploymentStrategy, s conversion.Scope) error { |
| out.Type = apps.DeploymentStrategyType(in.Type) |
| if in.RollingUpdate != nil { |
| out.RollingUpdate = new(apps.RollingUpdateDeployment) |
| if err := Convert_v1beta1_RollingUpdateDeployment_To_apps_RollingUpdateDeployment(in.RollingUpdate, out.RollingUpdate, s); err != nil { |
| return err |
| } |
| } else { |
| out.RollingUpdate = nil |
| } |
| return nil |
| } |
| |
| func Convert_v1beta1_RollingUpdateDeployment_To_apps_RollingUpdateDeployment(in *appsv1beta1.RollingUpdateDeployment, out *apps.RollingUpdateDeployment, s conversion.Scope) error { |
| if err := s.Convert(in.MaxUnavailable, &out.MaxUnavailable, 0); err != nil { |
| return err |
| } |
| if err := s.Convert(in.MaxSurge, &out.MaxSurge, 0); err != nil { |
| return err |
| } |
| return nil |
| } |
| |
| func Convert_apps_RollingUpdateDeployment_To_v1beta1_RollingUpdateDeployment(in *apps.RollingUpdateDeployment, out *appsv1beta1.RollingUpdateDeployment, s conversion.Scope) error { |
| if out.MaxUnavailable == nil { |
| out.MaxUnavailable = &intstr.IntOrString{} |
| } |
| if err := s.Convert(&in.MaxUnavailable, out.MaxUnavailable, 0); err != nil { |
| return err |
| } |
| if out.MaxSurge == nil { |
| out.MaxSurge = &intstr.IntOrString{} |
| } |
| if err := s.Convert(&in.MaxSurge, out.MaxSurge, 0); err != nil { |
| return err |
| } |
| return nil |
| } |