From 615f9037f38e8c546e5853f839e2823aba8f75f1 Mon Sep 17 00:00:00 2001 From: wojtekt Date: Thu, 3 Sep 2020 20:11:21 +0200 Subject: [PATCH] Cleanup custom metrics conversion functions --- .../metrics/pkg/apis/custom_metrics/BUILD | 3 ++ .../pkg/apis/custom_metrics/conversion.go | 46 +++++++++++++++++++ .../metrics/pkg/apis/custom_metrics/types.go | 16 +++---- .../apis/custom_metrics/v1beta1/conversion.go | 29 ++---------- .../v1beta1/zz_generated.conversion.go | 6 +-- .../v1beta2/zz_generated.conversion.go | 30 +++++++++--- 6 files changed, 87 insertions(+), 43 deletions(-) create mode 100644 staging/src/k8s.io/metrics/pkg/apis/custom_metrics/conversion.go diff --git a/staging/src/k8s.io/metrics/pkg/apis/custom_metrics/BUILD b/staging/src/k8s.io/metrics/pkg/apis/custom_metrics/BUILD index bc3be8a03fe..539cb480640 100644 --- a/staging/src/k8s.io/metrics/pkg/apis/custom_metrics/BUILD +++ b/staging/src/k8s.io/metrics/pkg/apis/custom_metrics/BUILD @@ -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", diff --git a/staging/src/k8s.io/metrics/pkg/apis/custom_metrics/conversion.go b/staging/src/k8s.io/metrics/pkg/apis/custom_metrics/conversion.go new file mode 100644 index 00000000000..85abdb6a448 --- /dev/null +++ b/staging/src/k8s.io/metrics/pkg/apis/custom_metrics/conversion.go @@ -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 +} diff --git a/staging/src/k8s.io/metrics/pkg/apis/custom_metrics/types.go b/staging/src/k8s.io/metrics/pkg/apis/custom_metrics/types.go index a39d5c460d0..8a155ec4b5f 100644 --- a/staging/src/k8s.io/metrics/pkg/apis/custom_metrics/types.go +++ b/staging/src/k8s.io/metrics/pkg/apis/custom_metrics/types.go @@ -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 diff --git a/staging/src/k8s.io/metrics/pkg/apis/custom_metrics/v1beta1/conversion.go b/staging/src/k8s.io/metrics/pkg/apis/custom_metrics/v1beta1/conversion.go index 523e4c01e25..5519dd61691 100644 --- a/staging/src/k8s.io/metrics/pkg/apis/custom_metrics/v1beta1/conversion.go +++ b/staging/src/k8s.io/metrics/pkg/apis/custom_metrics/v1beta1/conversion.go @@ -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 diff --git a/staging/src/k8s.io/metrics/pkg/apis/custom_metrics/v1beta1/zz_generated.conversion.go b/staging/src/k8s.io/metrics/pkg/apis/custom_metrics/v1beta1/zz_generated.conversion.go index 4da46347ec3..a350f1b16a2 100644 --- a/staging/src/k8s.io/metrics/pkg/apis/custom_metrics/v1beta1/zz_generated.conversion.go +++ b/staging/src/k8s.io/metrics/pkg/apis/custom_metrics/v1beta1/zz_generated.conversion.go @@ -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 diff --git a/staging/src/k8s.io/metrics/pkg/apis/custom_metrics/v1beta2/zz_generated.conversion.go b/staging/src/k8s.io/metrics/pkg/apis/custom_metrics/v1beta2/zz_generated.conversion.go index 6a12d034447..fd6047a3c26 100644 --- a/staging/src/k8s.io/metrics/pkg/apis/custom_metrics/v1beta2/zz_generated.conversion.go +++ b/staging/src/k8s.io/metrics/pkg/apis/custom_metrics/v1beta2/zz_generated.conversion.go @@ -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 }