Merge pull request #94481 from wojtek-t/fix_custom_metrics

Cleanup custom metrics conversion functions
This commit is contained in:
Kubernetes Prow Robot 2020-09-08 07:33:57 -07:00 committed by GitHub
commit 3fc1bc76a9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 87 additions and 43 deletions

View File

@ -8,6 +8,7 @@ load(
go_library(
name = "go_default_library",
srcs = [
"conversion.go",
"doc.go",
"register.go",
"types.go",
@ -16,8 +17,10 @@ go_library(
importmap = "k8s.io/kubernetes/vendor/k8s.io/metrics/pkg/apis/custom_metrics",
importpath = "k8s.io/metrics/pkg/apis/custom_metrics",
deps = [
"//staging/src/k8s.io/api/core/v1:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/conversion:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/types:go_default_library",

View File

@ -0,0 +1,46 @@
/*
Copyright 2020 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 custom_metrics
import (
"k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/conversion"
)
func Convert_v1_ObjectReference_To_custom_metrics_ObjectReference(in *v1.ObjectReference, out *ObjectReference, s conversion.Scope) error {
out.APIVersion = in.APIVersion
out.Kind = in.Kind
out.Namespace = in.Namespace
out.Name = in.Name
out.UID = in.UID
out.ResourceVersion = in.ResourceVersion
out.FieldPath = in.FieldPath
return nil
}
func Convert_custom_metrics_ObjectReference_To_v1_ObjectReference(in *ObjectReference, out *v1.ObjectReference, s conversion.Scope) error {
out.APIVersion = in.APIVersion
out.Kind = in.Kind
out.Namespace = in.Namespace
out.Name = in.Name
out.UID = in.UID
out.ResourceVersion = in.ResourceVersion
out.FieldPath = in.FieldPath
return nil
}

View File

@ -47,24 +47,24 @@ type MetricValueList struct {
// a metric value for some object
type MetricValue struct {
metav1.TypeMeta `json:",inline"`
metav1.TypeMeta
// a reference to the described object
DescribedObject ObjectReference `json:"describedObject"`
DescribedObject ObjectReference
Metric MetricIdentifier
// indicates the time at which the metrics were produced
Timestamp metav1.Time `json:"timestamp"`
Timestamp metav1.Time
// indicates the window ([Timestamp-Window, Timestamp]) from
// which these metrics were calculated, when returning rate
// metrics calculated from cumulative metrics (or zero for
// non-calculated instantaneous metrics).
WindowSeconds *int64 `json:"window,omitempty"`
WindowSeconds *int64
// the value of the metric for this
Value resource.Quantity `json:"value"`
Value resource.Quantity
}
// allObjects is a wildcard used to select metrics
@ -75,16 +75,16 @@ const AllObjects = "*"
// MetricListOptions is used to select metrics by their label selectors
type MetricListOptions struct {
metav1.TypeMeta `json:",inline"`
metav1.TypeMeta
// A selector to restrict the list of returned objects by their labels.
// Defaults to everything.
// +optional
LabelSelector string `json:"labelSelector,omitempty" protobuf:"bytes,1,opt,name=labelSelector"`
LabelSelector string
// A selector to restrict the list of returned metrics by their labels
// +optional
MetricLabelSelector string `json:"metricLabelSelector,omitempty" protobuf:"bytes,2,opt,name=metricLabelSelector"`
MetricLabelSelector string
}
// NOTE: ObjectReference is copied from k8s.io/kubernetes/pkg/api/types.go. We

View File

@ -17,44 +17,23 @@ limitations under the License.
package v1beta1
import (
"k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/conversion"
"k8s.io/metrics/pkg/apis/custom_metrics"
)
func Convert_v1beta1_MetricValue_To_custom_metrics_MetricValue(in *MetricValue, out *custom_metrics.MetricValue, s conversion.Scope) error {
out.TypeMeta = in.TypeMeta
out.DescribedObject = custom_metrics.ObjectReference{
Kind: in.DescribedObject.Kind,
Namespace: in.DescribedObject.Namespace,
Name: in.DescribedObject.Name,
UID: in.DescribedObject.UID,
APIVersion: in.DescribedObject.APIVersion,
ResourceVersion: in.DescribedObject.ResourceVersion,
FieldPath: in.DescribedObject.FieldPath,
if err := autoConvert_v1beta1_MetricValue_To_custom_metrics_MetricValue(in, out, s); err != nil {
return err
}
out.Timestamp = in.Timestamp
out.WindowSeconds = in.WindowSeconds
out.Value = in.Value
out.Metric.Name = in.MetricName
out.Metric.Selector = in.Selector
return nil
}
func Convert_custom_metrics_MetricValue_To_v1beta1_MetricValue(in *custom_metrics.MetricValue, out *MetricValue, s conversion.Scope) error {
out.TypeMeta = in.TypeMeta
out.DescribedObject = v1.ObjectReference{
Kind: in.DescribedObject.Kind,
Namespace: in.DescribedObject.Namespace,
Name: in.DescribedObject.Name,
UID: in.DescribedObject.UID,
APIVersion: in.DescribedObject.APIVersion,
ResourceVersion: in.DescribedObject.ResourceVersion,
FieldPath: in.DescribedObject.FieldPath,
if err := autoConvert_custom_metrics_MetricValue_To_v1beta1_MetricValue(in, out, s); err != nil {
return err
}
out.Timestamp = in.Timestamp
out.WindowSeconds = in.WindowSeconds
out.Value = in.Value
out.MetricName = in.Metric.Name
out.Selector = in.Metric.Selector
return nil

View File

@ -91,8 +91,7 @@ func Convert_custom_metrics_MetricListOptions_To_v1beta1_MetricListOptions(in *c
}
func autoConvert_v1beta1_MetricValue_To_custom_metrics_MetricValue(in *MetricValue, out *custommetrics.MetricValue, s conversion.Scope) error {
// TODO: Inefficient conversion - can we improve it?
if err := s.Convert(&in.DescribedObject, &out.DescribedObject, 0); err != nil {
if err := custommetrics.Convert_v1_ObjectReference_To_custom_metrics_ObjectReference(&in.DescribedObject, &out.DescribedObject, s); err != nil {
return err
}
// WARNING: in.MetricName requires manual conversion: does not exist in peer-type
@ -104,8 +103,7 @@ func autoConvert_v1beta1_MetricValue_To_custom_metrics_MetricValue(in *MetricVal
}
func autoConvert_custom_metrics_MetricValue_To_v1beta1_MetricValue(in *custommetrics.MetricValue, out *MetricValue, s conversion.Scope) error {
// TODO: Inefficient conversion - can we improve it?
if err := s.Convert(&in.DescribedObject, &out.DescribedObject, 0); err != nil {
if err := custommetrics.Convert_custom_metrics_ObjectReference_To_v1_ObjectReference(&in.DescribedObject, &out.DescribedObject, s); err != nil {
return err
}
// WARNING: in.Metric requires manual conversion: does not exist in peer-type

View File

@ -124,8 +124,7 @@ func Convert_custom_metrics_MetricListOptions_To_v1beta2_MetricListOptions(in *c
}
func autoConvert_v1beta2_MetricValue_To_custom_metrics_MetricValue(in *MetricValue, out *custommetrics.MetricValue, s conversion.Scope) error {
// TODO: Inefficient conversion - can we improve it?
if err := s.Convert(&in.DescribedObject, &out.DescribedObject, 0); err != nil {
if err := custommetrics.Convert_v1_ObjectReference_To_custom_metrics_ObjectReference(&in.DescribedObject, &out.DescribedObject, s); err != nil {
return err
}
if err := Convert_v1beta2_MetricIdentifier_To_custom_metrics_MetricIdentifier(&in.Metric, &out.Metric, s); err != nil {
@ -143,8 +142,7 @@ func Convert_v1beta2_MetricValue_To_custom_metrics_MetricValue(in *MetricValue,
}
func autoConvert_custom_metrics_MetricValue_To_v1beta2_MetricValue(in *custommetrics.MetricValue, out *MetricValue, s conversion.Scope) error {
// TODO: Inefficient conversion - can we improve it?
if err := s.Convert(&in.DescribedObject, &out.DescribedObject, 0); err != nil {
if err := custommetrics.Convert_custom_metrics_ObjectReference_To_v1_ObjectReference(&in.DescribedObject, &out.DescribedObject, s); err != nil {
return err
}
if err := Convert_custom_metrics_MetricIdentifier_To_v1beta2_MetricIdentifier(&in.Metric, &out.Metric, s); err != nil {
@ -163,7 +161,17 @@ func Convert_custom_metrics_MetricValue_To_v1beta2_MetricValue(in *custommetrics
func autoConvert_v1beta2_MetricValueList_To_custom_metrics_MetricValueList(in *MetricValueList, out *custommetrics.MetricValueList, s conversion.Scope) error {
out.ListMeta = in.ListMeta
out.Items = *(*[]custommetrics.MetricValue)(unsafe.Pointer(&in.Items))
if in.Items != nil {
in, out := &in.Items, &out.Items
*out = make([]custommetrics.MetricValue, len(*in))
for i := range *in {
if err := Convert_v1beta2_MetricValue_To_custom_metrics_MetricValue(&(*in)[i], &(*out)[i], s); err != nil {
return err
}
}
} else {
out.Items = nil
}
return nil
}
@ -174,7 +182,17 @@ func Convert_v1beta2_MetricValueList_To_custom_metrics_MetricValueList(in *Metri
func autoConvert_custom_metrics_MetricValueList_To_v1beta2_MetricValueList(in *custommetrics.MetricValueList, out *MetricValueList, s conversion.Scope) error {
out.ListMeta = in.ListMeta
out.Items = *(*[]MetricValue)(unsafe.Pointer(&in.Items))
if in.Items != nil {
in, out := &in.Items, &out.Items
*out = make([]MetricValue, len(*in))
for i := range *in {
if err := Convert_custom_metrics_MetricValue_To_v1beta2_MetricValue(&(*in)[i], &(*out)[i], s); err != nil {
return err
}
}
} else {
out.Items = nil
}
return nil
}