From 6bcb7d51308d9a96b1487acfd11ffc1e9e1c7b05 Mon Sep 17 00:00:00 2001 From: yuchengwu Date: Thu, 7 Mar 2019 21:26:21 +0800 Subject: [PATCH] Fix initContainer failed to get its own field value as env values --- pkg/api/v1/resource/helpers.go | 5 ++ pkg/api/v1/resource/helpers_test.go | 72 +++++++++++++++++++++++++++++ 2 files changed, 77 insertions(+) diff --git a/pkg/api/v1/resource/helpers.go b/pkg/api/v1/resource/helpers.go index d30ab7ed86e..e42a1b343bf 100644 --- a/pkg/api/v1/resource/helpers.go +++ b/pkg/api/v1/resource/helpers.go @@ -177,6 +177,11 @@ func findContainerInPod(pod *v1.Pod, containerName string) (*v1.Container, error return &container, nil } } + for _, container := range pod.Spec.InitContainers { + if container.Name == containerName { + return &container, nil + } + } return nil, fmt.Errorf("container %s not found", containerName) } diff --git a/pkg/api/v1/resource/helpers_test.go b/pkg/api/v1/resource/helpers_test.go index a0f41253f79..d5462a415dc 100644 --- a/pkg/api/v1/resource/helpers_test.go +++ b/pkg/api/v1/resource/helpers_test.go @@ -137,6 +137,72 @@ func TestExtractResourceValue(t *testing.T) { pod: getPod("foo", "", "", "10Mi", "100Mi"), expectedValue: "104857600", }, + { + fs: &v1.ResourceFieldSelector{ + Resource: "limits.cpu", + }, + cName: "init-foo", + pod: getPod("foo", "", "9", "", ""), + expectedValue: "9", + }, + { + fs: &v1.ResourceFieldSelector{ + Resource: "requests.cpu", + }, + cName: "init-foo", + pod: getPod("foo", "", "", "", ""), + expectedValue: "0", + }, + { + fs: &v1.ResourceFieldSelector{ + Resource: "requests.cpu", + }, + cName: "init-foo", + pod: getPod("foo", "8", "", "", ""), + expectedValue: "8", + }, + { + fs: &v1.ResourceFieldSelector{ + Resource: "requests.cpu", + }, + cName: "init-foo", + pod: getPod("foo", "100m", "", "", ""), + expectedValue: "1", + }, + { + fs: &v1.ResourceFieldSelector{ + Resource: "requests.cpu", + Divisor: resource.MustParse("100m"), + }, + cName: "init-foo", + pod: getPod("foo", "1200m", "", "", ""), + expectedValue: "12", + }, + { + fs: &v1.ResourceFieldSelector{ + Resource: "requests.memory", + }, + cName: "init-foo", + pod: getPod("foo", "", "", "100Mi", ""), + expectedValue: "104857600", + }, + { + fs: &v1.ResourceFieldSelector{ + Resource: "requests.memory", + Divisor: resource.MustParse("1Mi"), + }, + cName: "init-foo", + pod: getPod("foo", "", "", "100Mi", "1Gi"), + expectedValue: "100", + }, + { + fs: &v1.ResourceFieldSelector{ + Resource: "limits.memory", + }, + cName: "init-foo", + pod: getPod("foo", "", "", "10Mi", "100Mi"), + expectedValue: "104857600", + }, } as := assert.New(t) for idx, tc := range cases { @@ -175,6 +241,12 @@ func getPod(cname, cpuRequest, cpuLimit, memoryRequest, memoryLimit string) *v1. Resources: resources, }, }, + InitContainers: []v1.Container{ + { + Name: "init-" + cname, + Resources: resources, + }, + }, }, } }