API changes in HPA required for going to GA
This commit is contained in:
101
pkg/apis/autoscaling/v1/conversion.go
Normal file
101
pkg/apis/autoscaling/v1/conversion.go
Normal file
@@ -0,0 +1,101 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2016 The Kubernetes Authors All rights reserved.
|
||||||
|
|
||||||
|
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 v1
|
||||||
|
|
||||||
|
import (
|
||||||
|
"reflect"
|
||||||
|
|
||||||
|
"k8s.io/kubernetes/pkg/apis/extensions"
|
||||||
|
"k8s.io/kubernetes/pkg/conversion"
|
||||||
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
|
)
|
||||||
|
|
||||||
|
func addConversionFuncs(scheme *runtime.Scheme) {
|
||||||
|
// Add non-generated conversion functions
|
||||||
|
err := scheme.AddConversionFuncs(
|
||||||
|
Convert_extensions_SubresourceReference_To_v1_CrossVersionObjectReference,
|
||||||
|
Convert_v1_CrossVersionObjectReference_To_extensions_SubresourceReference,
|
||||||
|
Convert_extensions_HorizontalPodAutoscalerSpec_To_v1_HorizontalPodAutoscalerSpec,
|
||||||
|
Convert_v1_HorizontalPodAutoscalerSpec_To_extensions_HorizontalPodAutoscalerSpec,
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
// If one of the conversion functions is malformed, detect it immediately.
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func Convert_extensions_SubresourceReference_To_v1_CrossVersionObjectReference(in *extensions.SubresourceReference, out *CrossVersionObjectReference, s conversion.Scope) error {
|
||||||
|
if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found {
|
||||||
|
defaulting.(func(*extensions.SubresourceReference))(in)
|
||||||
|
}
|
||||||
|
out.Kind = in.Kind
|
||||||
|
out.Name = in.Name
|
||||||
|
out.APIVersion = in.APIVersion
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func Convert_v1_CrossVersionObjectReference_To_extensions_SubresourceReference(in *CrossVersionObjectReference, out *extensions.SubresourceReference, s conversion.Scope) error {
|
||||||
|
if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found {
|
||||||
|
defaulting.(func(*CrossVersionObjectReference))(in)
|
||||||
|
}
|
||||||
|
out.Kind = in.Kind
|
||||||
|
out.Name = in.Name
|
||||||
|
out.APIVersion = in.APIVersion
|
||||||
|
out.Subresource = "scale"
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func Convert_extensions_HorizontalPodAutoscalerSpec_To_v1_HorizontalPodAutoscalerSpec(in *extensions.HorizontalPodAutoscalerSpec, out *HorizontalPodAutoscalerSpec, s conversion.Scope) error {
|
||||||
|
if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found {
|
||||||
|
defaulting.(func(*extensions.HorizontalPodAutoscalerSpec))(in)
|
||||||
|
}
|
||||||
|
if err := Convert_extensions_SubresourceReference_To_v1_CrossVersionObjectReference(&in.ScaleRef, &out.ScaleTargetRef, s); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if in.MinReplicas != nil {
|
||||||
|
out.MinReplicas = new(int32)
|
||||||
|
*out.MinReplicas = int32(*in.MinReplicas)
|
||||||
|
} else {
|
||||||
|
out.MinReplicas = nil
|
||||||
|
}
|
||||||
|
out.MaxReplicas = int32(in.MaxReplicas)
|
||||||
|
if in.CPUUtilization != nil {
|
||||||
|
out.TargetCPUUtilizationPercentage = new(int32)
|
||||||
|
*out.TargetCPUUtilizationPercentage = int32(in.CPUUtilization.TargetPercentage)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func Convert_v1_HorizontalPodAutoscalerSpec_To_extensions_HorizontalPodAutoscalerSpec(in *HorizontalPodAutoscalerSpec, out *extensions.HorizontalPodAutoscalerSpec, s conversion.Scope) error {
|
||||||
|
if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found {
|
||||||
|
defaulting.(func(*HorizontalPodAutoscalerSpec))(in)
|
||||||
|
}
|
||||||
|
if err := Convert_v1_CrossVersionObjectReference_To_extensions_SubresourceReference(&in.ScaleTargetRef, &out.ScaleRef, s); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if in.MinReplicas != nil {
|
||||||
|
out.MinReplicas = new(int)
|
||||||
|
*out.MinReplicas = int(*in.MinReplicas)
|
||||||
|
} else {
|
||||||
|
out.MinReplicas = nil
|
||||||
|
}
|
||||||
|
out.MaxReplicas = int(in.MaxReplicas)
|
||||||
|
if in.TargetCPUUtilizationPercentage != nil {
|
||||||
|
out.CPUUtilization = &extensions.CPUTargetUtilization{TargetPercentage: int(*in.TargetCPUUtilizationPercentage)}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
@@ -27,9 +27,6 @@ func addDefaultingFuncs(scheme *runtime.Scheme) {
|
|||||||
minReplicas := int32(1)
|
minReplicas := int32(1)
|
||||||
obj.Spec.MinReplicas = &minReplicas
|
obj.Spec.MinReplicas = &minReplicas
|
||||||
}
|
}
|
||||||
if obj.Spec.CPUUtilization == nil {
|
|
||||||
obj.Spec.CPUUtilization = &CPUTargetUtilization{TargetPercentage: 80}
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@@ -31,6 +31,7 @@ var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: "v1
|
|||||||
func AddToScheme(scheme *runtime.Scheme) {
|
func AddToScheme(scheme *runtime.Scheme) {
|
||||||
addKnownTypes(scheme)
|
addKnownTypes(scheme)
|
||||||
addDefaultingFuncs(scheme)
|
addDefaultingFuncs(scheme)
|
||||||
|
addConversionFuncs(scheme)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Adds the list of known types to api.Scheme.
|
// Adds the list of known types to api.Scheme.
|
||||||
|
@@ -21,36 +21,27 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/api/v1"
|
"k8s.io/kubernetes/pkg/api/v1"
|
||||||
)
|
)
|
||||||
|
|
||||||
// SubresourceReference contains enough information to let you inspect or modify the referred subresource.
|
// CrossVersionObjectReference contains enough information to let you identify the referred resource.
|
||||||
type SubresourceReference struct {
|
type CrossVersionObjectReference struct {
|
||||||
// Kind of the referent; More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds"
|
// Kind of the referent; More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds"
|
||||||
Kind string `json:"kind,omitempty"`
|
Kind string `json:"kind"`
|
||||||
// Name of the referent; More info: http://releases.k8s.io/HEAD/docs/user-guide/identifiers.md#names
|
// Name of the referent; More info: http://releases.k8s.io/HEAD/docs/user-guide/identifiers.md#names
|
||||||
Name string `json:"name,omitempty"`
|
Name string `json:"name"`
|
||||||
// API version of the referent
|
// API version of the referent
|
||||||
APIVersion string `json:"apiVersion,omitempty"`
|
APIVersion string `json:"apiVersion,omitempty"`
|
||||||
// Subresource name of the referent
|
|
||||||
Subresource string `json:"subresource,omitempty"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type CPUTargetUtilization struct {
|
|
||||||
// fraction of the requested CPU that should be utilized/used,
|
|
||||||
// e.g. 70 means that 70% of the requested CPU should be in use.
|
|
||||||
TargetPercentage int32 `json:"targetPercentage"`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// specification of a horizontal pod autoscaler.
|
// specification of a horizontal pod autoscaler.
|
||||||
type HorizontalPodAutoscalerSpec struct {
|
type HorizontalPodAutoscalerSpec struct {
|
||||||
// reference to Scale subresource; horizontal pod autoscaler will learn the current resource consumption from its status,
|
// reference to scaled resource; horizontal pod autoscaler will learn the current resource consumption
|
||||||
// and will set the desired number of pods by modifying its spec.
|
// and will set the desired number of pods by using its Scale subresource.
|
||||||
ScaleRef SubresourceReference `json:"scaleRef"`
|
ScaleTargetRef CrossVersionObjectReference `json:"scaleTargetRef"`
|
||||||
// lower limit for the number of pods that can be set by the autoscaler, default 1.
|
// lower limit for the number of pods that can be set by the autoscaler, default 1.
|
||||||
MinReplicas *int32 `json:"minReplicas,omitempty"`
|
MinReplicas *int32 `json:"minReplicas,omitempty"`
|
||||||
// upper limit for the number of pods that can be set by the autoscaler; cannot be smaller than MinReplicas.
|
// upper limit for the number of pods that can be set by the autoscaler; cannot be smaller than MinReplicas.
|
||||||
MaxReplicas int32 `json:"maxReplicas"`
|
MaxReplicas int32 `json:"maxReplicas"`
|
||||||
// target average CPU utilization (represented as a percentage of requested CPU) over all the pods;
|
// target average CPU utilization (represented as a percentage of requested CPU) over all the pods;
|
||||||
// if not specified it defaults to the target CPU utilization at 80% of the requested resources.
|
TargetCPUUtilizationPercentage *int32 `json:"targetCPUUtilizationPercentage,omitempty"`
|
||||||
CPUUtilization *CPUTargetUtilization `json:"cpuUtilization,omitempty"`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// current status of a horizontal pod autoscaler
|
// current status of a horizontal pod autoscaler
|
||||||
|
Reference in New Issue
Block a user