From dc709b4351a7b04562d623a7b5e3fbb927bb3bb5 Mon Sep 17 00:00:00 2001 From: Tim Allclair Date: Wed, 7 Aug 2019 16:49:17 -0700 Subject: [PATCH] remove dead code: pkg/api/resources --- pkg/BUILD | 1 - pkg/api/resource/BUILD | 42 ------ pkg/api/resource/helpers.go | 118 --------------- pkg/api/resource/helpers_test.go | 246 ------------------------------- 4 files changed, 407 deletions(-) delete mode 100644 pkg/api/resource/BUILD delete mode 100644 pkg/api/resource/helpers.go delete mode 100644 pkg/api/resource/helpers_test.go diff --git a/pkg/BUILD b/pkg/BUILD index 6e1a3760fb8..a9061325590 100644 --- a/pkg/BUILD +++ b/pkg/BUILD @@ -17,7 +17,6 @@ filegroup( "//pkg/api/persistentvolumeclaim:all-srcs", "//pkg/api/pod:all-srcs", "//pkg/api/podsecuritypolicy:all-srcs", - "//pkg/api/resource:all-srcs", "//pkg/api/resourcequota:all-srcs", "//pkg/api/service:all-srcs", "//pkg/api/testapi:all-srcs", diff --git a/pkg/api/resource/BUILD b/pkg/api/resource/BUILD deleted file mode 100644 index e6fc25e565b..00000000000 --- a/pkg/api/resource/BUILD +++ /dev/null @@ -1,42 +0,0 @@ -package(default_visibility = ["//visibility:public"]) - -load( - "@io_bazel_rules_go//go:def.bzl", - "go_library", - "go_test", -) - -go_library( - name = "go_default_library", - srcs = ["helpers.go"], - importpath = "k8s.io/kubernetes/pkg/api/resource", - deps = [ - "//pkg/apis/core:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], -) - -go_test( - name = "go_default_test", - srcs = ["helpers_test.go"], - embed = [":go_default_library"], - deps = [ - "//pkg/apis/core: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/util/uuid:go_default_library", - ], -) diff --git a/pkg/api/resource/helpers.go b/pkg/api/resource/helpers.go deleted file mode 100644 index 4daf3e92543..00000000000 --- a/pkg/api/resource/helpers.go +++ /dev/null @@ -1,118 +0,0 @@ -/* -Copyright 2014 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 resource - -import ( - "fmt" - "math" - "strconv" - - "k8s.io/apimachinery/pkg/api/resource" - api "k8s.io/kubernetes/pkg/apis/core" -) - -// addResourceList adds the resources in newList to list -func addResourceList(list, new api.ResourceList) { - for name, quantity := range new { - if value, ok := list[name]; !ok { - list[name] = *quantity.Copy() - } else { - value.Add(quantity) - list[name] = value - } - } -} - -// maxResourceList sets list to the greater of list/newList for every resource -// either list -func maxResourceList(list, new api.ResourceList) { - for name, quantity := range new { - if value, ok := list[name]; !ok { - list[name] = *quantity.Copy() - continue - } else { - if quantity.Cmp(value) > 0 { - list[name] = *quantity.Copy() - } - } - } -} - -// PodRequestsAndLimits returns a dictionary of all defined resources summed up for all -// containers of the pod. -func PodRequestsAndLimits(pod *api.Pod) (reqs api.ResourceList, limits api.ResourceList) { - reqs, limits = api.ResourceList{}, api.ResourceList{} - for _, container := range pod.Spec.Containers { - addResourceList(reqs, container.Resources.Requests) - addResourceList(limits, container.Resources.Limits) - } - // init containers define the minimum of any resource - for _, container := range pod.Spec.InitContainers { - maxResourceList(reqs, container.Resources.Requests) - maxResourceList(limits, container.Resources.Limits) - } - return -} - -// ExtractContainerResourceValue extracts the value of a resource -// in an already known container -func ExtractContainerResourceValue(fs *api.ResourceFieldSelector, container *api.Container) (string, error) { - divisor := resource.Quantity{} - if divisor.Cmp(fs.Divisor) == 0 { - divisor = resource.MustParse("1") - } else { - divisor = fs.Divisor - } - - switch fs.Resource { - case "limits.cpu": - return convertResourceCPUToString(container.Resources.Limits.Cpu(), divisor) - case "limits.memory": - return convertResourceMemoryToString(container.Resources.Limits.Memory(), divisor) - case "limits.ephemeral-storage": - return convertResourceEphemeralStorageToString(container.Resources.Limits.StorageEphemeral(), divisor) - case "requests.cpu": - return convertResourceCPUToString(container.Resources.Requests.Cpu(), divisor) - case "requests.memory": - return convertResourceMemoryToString(container.Resources.Requests.Memory(), divisor) - case "requests.ephemeral-storage": - return convertResourceEphemeralStorageToString(container.Resources.Requests.StorageEphemeral(), divisor) - } - - return "", fmt.Errorf("unsupported container resource : %v", fs.Resource) -} - -// convertResourceCPUToString converts cpu value to the format of divisor and returns -// ceiling of the value. -func convertResourceCPUToString(cpu *resource.Quantity, divisor resource.Quantity) (string, error) { - c := int64(math.Ceil(float64(cpu.MilliValue()) / float64(divisor.MilliValue()))) - return strconv.FormatInt(c, 10), nil -} - -// convertResourceMemoryToString converts memory value to the format of divisor and returns -// ceiling of the value. -func convertResourceMemoryToString(memory *resource.Quantity, divisor resource.Quantity) (string, error) { - m := int64(math.Ceil(float64(memory.Value()) / float64(divisor.Value()))) - return strconv.FormatInt(m, 10), nil -} - -// convertResourceEphemeralStorageToString converts ephemeral storage value to the format of divisor and returns -// ceiling of the value. -func convertResourceEphemeralStorageToString(ephemeralStorage *resource.Quantity, divisor resource.Quantity) (string, error) { - m := int64(math.Ceil(float64(ephemeralStorage.Value()) / float64(divisor.Value()))) - return strconv.FormatInt(m, 10), nil -} diff --git a/pkg/api/resource/helpers_test.go b/pkg/api/resource/helpers_test.go deleted file mode 100644 index cf831fd28d0..00000000000 --- a/pkg/api/resource/helpers_test.go +++ /dev/null @@ -1,246 +0,0 @@ -/* -Copyright 2015 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 resource - -import ( - "strings" - "testing" - - "k8s.io/apimachinery/pkg/api/resource" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/util/uuid" - api "k8s.io/kubernetes/pkg/apis/core" -) - -func TestResourceHelpers(t *testing.T) { - cpuLimit := resource.MustParse("10") - memoryLimit := resource.MustParse("10G") - resourceSpec := api.ResourceRequirements{ - Limits: api.ResourceList{ - api.ResourceCPU: cpuLimit, - api.ResourceMemory: memoryLimit, - }, - } - if res := resourceSpec.Limits.Cpu(); res.Cmp(cpuLimit) != 0 { - t.Errorf("expected cpulimit %v, got %v", cpuLimit, res) - } - if res := resourceSpec.Limits.Memory(); res.Cmp(memoryLimit) != 0 { - t.Errorf("expected memorylimit %v, got %v", memoryLimit, res) - } - resourceSpec = api.ResourceRequirements{ - Limits: api.ResourceList{ - api.ResourceMemory: memoryLimit, - }, - } - if res := resourceSpec.Limits.Cpu(); res.Value() != 0 { - t.Errorf("expected cpulimit %v, got %v", 0, res) - } - if res := resourceSpec.Limits.Memory(); res.Cmp(memoryLimit) != 0 { - t.Errorf("expected memorylimit %v, got %v", memoryLimit, res) - } -} - -func TestDefaultResourceHelpers(t *testing.T) { - resourceList := api.ResourceList{} - if resourceList.Cpu().Format != resource.DecimalSI { - t.Errorf("expected %v, actual %v", resource.DecimalSI, resourceList.Cpu().Format) - } - if resourceList.Memory().Format != resource.BinarySI { - t.Errorf("expected %v, actual %v", resource.BinarySI, resourceList.Memory().Format) - } -} - -func TestPodRequestsAndLimits(t *testing.T) { - tests := []struct { - name string - pod *api.Pod - expectreqs map[api.ResourceName]resource.Quantity - expectlimits map[api.ResourceName]resource.Quantity - }{ - { - name: "InitContainers resource < Containers resource", - pod: &api.Pod{ - ObjectMeta: metav1.ObjectMeta{ - UID: uuid.NewUUID(), - }, - Spec: api.PodSpec{ - InitContainers: []api.Container{ - makeContainer("100m", "200m", "100Mi", "200Mi"), - }, - Containers: []api.Container{ - makeContainer("100m", "400m", "100Mi", "400Mi"), - makeContainer("100m", "200m", "100Mi", "200Mi"), - }, - }, - }, - expectreqs: map[api.ResourceName]resource.Quantity{ - api.ResourceCPU: resource.MustParse("200m"), - api.ResourceMemory: resource.MustParse("200Mi"), - }, - expectlimits: map[api.ResourceName]resource.Quantity{ - api.ResourceCPU: resource.MustParse("600m"), - api.ResourceMemory: resource.MustParse("600Mi"), - }, - }, - { - name: "InitContainers resource > Containers resource", - pod: &api.Pod{ - ObjectMeta: metav1.ObjectMeta{ - UID: uuid.NewUUID(), - }, - Spec: api.PodSpec{ - InitContainers: []api.Container{ - makeContainer("500m", "500m", "500Mi", "500Mi"), - makeContainer("100m", "200m", "100Mi", "200Mi"), - }, - Containers: []api.Container{ - makeContainer("100m", "200m", "100Mi", "200Mi"), - makeContainer("100m", "200m", "100Mi", "200Mi"), - }, - }, - }, - expectreqs: map[api.ResourceName]resource.Quantity{ - api.ResourceCPU: resource.MustParse("500m"), - api.ResourceMemory: resource.MustParse("500Mi"), - }, - expectlimits: map[api.ResourceName]resource.Quantity{ - api.ResourceCPU: resource.MustParse("500m"), - api.ResourceMemory: resource.MustParse("500Mi"), - }, - }, - } - for i, test := range tests { - t.Run(test.name, func(t *testing.T) { - requests, limits := PodRequestsAndLimits(test.pod) - for name, quantity := range test.expectreqs { - if value, ok := requests[name]; !ok { - t.Errorf("case[%d]: Error to get value of key=%s from requests result", i, name) - } else if quantity.Cmp(value) != 0 { - t.Errorf("case[%d]: Expected value of key=%s from requests result:%v, Got:%v", i, name, quantity, value) - } - } - for name, quantity := range test.expectlimits { - if value, ok := limits[name]; !ok { - t.Errorf("case[%d]: Error to get value of key=%s from limits result", i, name) - } else if quantity.Cmp(value) != 0 { - t.Errorf("case[%d]: Expected value of key=%s from limits result:%v, Got:%v", i, name, quantity, value) - } - } - }) - } -} - -func TestExtractContainerResourceValue(t *testing.T) { - testcontainer := &api.Container{ - Name: string(uuid.NewUUID()), - Resources: api.ResourceRequirements{ - Limits: api.ResourceList{ - api.ResourceCPU: resource.MustParse("200m"), - api.ResourceMemory: resource.MustParse("200Mi"), - api.ResourceStorage: resource.MustParse("2G"), - api.ResourceEphemeralStorage: resource.MustParse("2G"), - }, - Requests: api.ResourceList{ - api.ResourceCPU: resource.MustParse("100m"), - api.ResourceMemory: resource.MustParse("100Mi"), - api.ResourceStorage: resource.MustParse("1G"), - api.ResourceEphemeralStorage: resource.MustParse("300Mi"), - }, - }, - } - tests := []struct { - name string - filed *api.ResourceFieldSelector - expectresult string - expecterr string - }{ - { - name: "get limits cpu", - filed: &api.ResourceFieldSelector{Resource: "limits.cpu", Divisor: resource.MustParse("1m")}, - expectresult: "200", - expecterr: "", - }, - { - name: "get limits memory", - filed: &api.ResourceFieldSelector{Resource: "limits.memory"}, - expectresult: "209715200", - expecterr: "", - }, - { - name: "get limits ephemeral-storage", - filed: &api.ResourceFieldSelector{Resource: "limits.ephemeral-storage", Divisor: resource.MustParse("1G")}, - expectresult: "2", - expecterr: "", - }, - { - name: "get requests cpu", - filed: &api.ResourceFieldSelector{Resource: "requests.cpu", Divisor: resource.MustParse("1m")}, - expectresult: "100", - expecterr: "", - }, - { - name: "get requests memory", - filed: &api.ResourceFieldSelector{Resource: "requests.memory", Divisor: resource.MustParse("1G")}, - expectresult: "1", - expecterr: "", - }, - { - name: "get requests ephemeral-storage", - filed: &api.ResourceFieldSelector{Resource: "requests.ephemeral-storage"}, - expectresult: "314572800", - expecterr: "", - }, - { - name: "get limits storage", - filed: &api.ResourceFieldSelector{Resource: "limits.storage", Divisor: resource.MustParse("1G")}, - expectresult: "", - expecterr: "unsupported container resource", - }, - } - - for i, test := range tests { - t.Run(test.name, func(t *testing.T) { - result, err := ExtractContainerResourceValue(test.filed, testcontainer) - if test.expecterr != "" { - if !strings.Contains(err.Error(), test.expecterr) { - t.Errorf("case[%d]:%s Expected err:%s, Got err:%s", i, test.name, test.expecterr, err.Error()) - } - } else if err != nil { - t.Errorf("case[%d]:%s Expected no err, Got err:%s", i, test.name, err.Error()) - } - if result != test.expectresult { - t.Errorf("case[%d]:%s Expected result:%s, Got result:%s", i, test.name, test.expectresult, result) - } - }) - } -} - -func makeContainer(cpuReq, cpuLim, memReq, memLim string) api.Container { - return api.Container{ - Name: string(uuid.NewUUID()), - Resources: api.ResourceRequirements{ - Limits: api.ResourceList{ - api.ResourceCPU: resource.MustParse(cpuLim), - api.ResourceMemory: resource.MustParse(memLim), - }, - Requests: api.ResourceList{ - api.ResourceCPU: resource.MustParse(cpuReq), - api.ResourceMemory: resource.MustParse(memReq), - }, - }, - } -}