move function RemoveTaintOffNode in test/e2e/framework/util.go to subpackage node

This commit is contained in:
tanjunchen 2020-04-08 09:56:31 +08:00
parent 172553bf94
commit 6532b40f21
9 changed files with 54 additions and 33 deletions

View File

@ -10,6 +10,7 @@ go_library(
importpath = "k8s.io/kubernetes/test/e2e/framework/node", importpath = "k8s.io/kubernetes/test/e2e/framework/node",
visibility = ["//visibility:public"], visibility = ["//visibility:public"],
deps = [ deps = [
"//pkg/controller:go_default_library",
"//pkg/scheduler/framework/v1alpha1:go_default_library", "//pkg/scheduler/framework/v1alpha1:go_default_library",
"//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
@ -22,6 +23,7 @@ go_library(
"//test/e2e/system:go_default_library", "//test/e2e/system:go_default_library",
"//test/utils:go_default_library", "//test/utils:go_default_library",
"//test/utils/image:go_default_library", "//test/utils/image:go_default_library",
"//vendor/github.com/onsi/ginkgo:go_default_library",
"//vendor/github.com/onsi/gomega:go_default_library", "//vendor/github.com/onsi/gomega:go_default_library",
"//vendor/k8s.io/utils/pointer:go_default_library", "//vendor/k8s.io/utils/pointer:go_default_library",
], ],

View File

@ -23,6 +23,7 @@ import (
"strings" "strings"
"time" "time"
"github.com/onsi/ginkgo"
"github.com/onsi/gomega" "github.com/onsi/gomega"
v1 "k8s.io/api/core/v1" v1 "k8s.io/api/core/v1"
@ -30,6 +31,7 @@ import (
"k8s.io/apimachinery/pkg/util/rand" "k8s.io/apimachinery/pkg/util/rand"
"k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/sets"
clientset "k8s.io/client-go/kubernetes" clientset "k8s.io/client-go/kubernetes"
"k8s.io/kubernetes/pkg/controller"
schedfwk "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" schedfwk "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1"
e2elog "k8s.io/kubernetes/test/e2e/framework/log" e2elog "k8s.io/kubernetes/test/e2e/framework/log"
"k8s.io/kubernetes/test/e2e/system" "k8s.io/kubernetes/test/e2e/system"
@ -556,3 +558,33 @@ func CreatePodsPerNodeForSimpleApp(c clientset.Interface, namespace, appName str
} }
return podLabels return podLabels
} }
// RemoveTaintOffNode removes the given taint from the given node.
func RemoveTaintOffNode(c clientset.Interface, nodeName string, taint v1.Taint) {
err := controller.RemoveTaintOffNode(c, nodeName, nil, &taint)
// TODO use wrapper methods in expect.go after removing core e2e dependency on node
gomega.ExpectWithOffset(2, err).NotTo(gomega.HaveOccurred())
verifyThatTaintIsGone(c, nodeName, &taint)
}
func verifyThatTaintIsGone(c clientset.Interface, nodeName string, taint *v1.Taint) {
ginkgo.By("verifying the node doesn't have the taint " + taint.ToString())
nodeUpdated, err := c.CoreV1().Nodes().Get(context.TODO(), nodeName, metav1.GetOptions{})
// TODO use wrapper methods in expect.go after removing core e2e dependency on node
gomega.ExpectWithOffset(2, err).NotTo(gomega.HaveOccurred())
if taintExists(nodeUpdated.Spec.Taints, taint) {
e2elog.Failf("Failed removing taint " + taint.ToString() + " of the node " + nodeName)
}
}
// taintExists checks if the given taint exists in list of taints. Returns true if exists false otherwise.
func taintExists(taints []v1.Taint, taintToFind *v1.Taint) bool {
for _, taint := range taints {
if taint.MatchTaint(taintToFind) {
return true
}
}
return false
}

View File

@ -978,12 +978,6 @@ func ExpectNodeHasLabel(c clientset.Interface, nodeName string, labelKey string,
ExpectEqual(node.Labels[labelKey], labelValue) ExpectEqual(node.Labels[labelKey], labelValue)
} }
// RemoveTaintOffNode removes the given taint from the given node.
func RemoveTaintOffNode(c clientset.Interface, nodeName string, taint v1.Taint) {
ExpectNoError(controller.RemoveTaintOffNode(c, nodeName, nil, &taint))
verifyThatTaintIsGone(c, nodeName, &taint)
}
// AddOrUpdateTaintOnNode adds the given taint to the given node or updates taint. // AddOrUpdateTaintOnNode adds the given taint to the given node or updates taint.
func AddOrUpdateTaintOnNode(c clientset.Interface, nodeName string, taint v1.Taint) { func AddOrUpdateTaintOnNode(c clientset.Interface, nodeName string, taint v1.Taint) {
ExpectNoError(controller.AddOrUpdateTaintOnNode(c, nodeName, &taint)) ExpectNoError(controller.AddOrUpdateTaintOnNode(c, nodeName, &taint))
@ -999,15 +993,6 @@ func RemoveLabelOffNode(c clientset.Interface, nodeName string, labelKey string)
ExpectNoError(testutils.VerifyLabelsRemoved(c, nodeName, []string{labelKey})) ExpectNoError(testutils.VerifyLabelsRemoved(c, nodeName, []string{labelKey}))
} }
func verifyThatTaintIsGone(c clientset.Interface, nodeName string, taint *v1.Taint) {
ginkgo.By("verifying the node doesn't have the taint " + taint.ToString())
nodeUpdated, err := c.CoreV1().Nodes().Get(context.TODO(), nodeName, metav1.GetOptions{})
ExpectNoError(err)
if taintExists(nodeUpdated.Spec.Taints, taint) {
Failf("Failed removing taint " + taint.ToString() + " of the node " + nodeName)
}
}
// ExpectNodeHasTaint expects that the node has the given taint. // ExpectNodeHasTaint expects that the node has the given taint.
func ExpectNodeHasTaint(c clientset.Interface, nodeName string, taint *v1.Taint) { func ExpectNodeHasTaint(c clientset.Interface, nodeName string, taint *v1.Taint) {
ginkgo.By("verifying the node has the taint " + taint.ToString()) ginkgo.By("verifying the node has the taint " + taint.ToString())

View File

@ -35,6 +35,7 @@ go_library(
"//test/e2e/framework/auth:go_default_library", "//test/e2e/framework/auth:go_default_library",
"//test/e2e/framework/endpoints:go_default_library", "//test/e2e/framework/endpoints:go_default_library",
"//test/e2e/framework/kubectl:go_default_library", "//test/e2e/framework/kubectl:go_default_library",
"//test/e2e/framework/node:go_default_library",
"//test/e2e/framework/pod:go_default_library", "//test/e2e/framework/pod:go_default_library",
"//test/e2e/framework/service:go_default_library", "//test/e2e/framework/service:go_default_library",
"//test/e2e/framework/testfiles:go_default_library", "//test/e2e/framework/testfiles:go_default_library",

View File

@ -65,6 +65,7 @@ import (
e2eauth "k8s.io/kubernetes/test/e2e/framework/auth" e2eauth "k8s.io/kubernetes/test/e2e/framework/auth"
e2eendpoints "k8s.io/kubernetes/test/e2e/framework/endpoints" e2eendpoints "k8s.io/kubernetes/test/e2e/framework/endpoints"
e2ekubectl "k8s.io/kubernetes/test/e2e/framework/kubectl" e2ekubectl "k8s.io/kubernetes/test/e2e/framework/kubectl"
e2enode "k8s.io/kubernetes/test/e2e/framework/node"
e2epod "k8s.io/kubernetes/test/e2e/framework/pod" e2epod "k8s.io/kubernetes/test/e2e/framework/pod"
e2eservice "k8s.io/kubernetes/test/e2e/framework/service" e2eservice "k8s.io/kubernetes/test/e2e/framework/service"
e2etestfiles "k8s.io/kubernetes/test/e2e/framework/testfiles" e2etestfiles "k8s.io/kubernetes/test/e2e/framework/testfiles"
@ -1604,7 +1605,7 @@ metadata:
ginkgo.By("adding the taint " + testTaint.ToString() + " to a node") ginkgo.By("adding the taint " + testTaint.ToString() + " to a node")
runKubectlRetryOrDie(ns, "taint", "nodes", nodeName, testTaint.ToString()) runKubectlRetryOrDie(ns, "taint", "nodes", nodeName, testTaint.ToString())
defer framework.RemoveTaintOffNode(f.ClientSet, nodeName, testTaint) defer e2enode.RemoveTaintOffNode(f.ClientSet, nodeName, testTaint)
ginkgo.By("verifying the node has the taint " + testTaint.ToString()) ginkgo.By("verifying the node has the taint " + testTaint.ToString())
output := runKubectlRetryOrDie(ns, "describe", "node", nodeName) output := runKubectlRetryOrDie(ns, "describe", "node", nodeName)
@ -1635,7 +1636,7 @@ metadata:
ginkgo.By("adding the taint " + testTaint.ToString() + " to a node") ginkgo.By("adding the taint " + testTaint.ToString() + " to a node")
runKubectlRetryOrDie(ns, "taint", "nodes", nodeName, testTaint.ToString()) runKubectlRetryOrDie(ns, "taint", "nodes", nodeName, testTaint.ToString())
defer framework.RemoveTaintOffNode(f.ClientSet, nodeName, testTaint) defer e2enode.RemoveTaintOffNode(f.ClientSet, nodeName, testTaint)
ginkgo.By("verifying the node has the taint " + testTaint.ToString()) ginkgo.By("verifying the node has the taint " + testTaint.ToString())
output := runKubectlRetryOrDie(ns, "describe", "node", nodeName) output := runKubectlRetryOrDie(ns, "describe", "node", nodeName)
@ -1653,7 +1654,7 @@ metadata:
} }
ginkgo.By("adding another taint " + newTestTaint.ToString() + " to the node") ginkgo.By("adding another taint " + newTestTaint.ToString() + " to the node")
runKubectlRetryOrDie(ns, "taint", "nodes", nodeName, newTestTaint.ToString()) runKubectlRetryOrDie(ns, "taint", "nodes", nodeName, newTestTaint.ToString())
defer framework.RemoveTaintOffNode(f.ClientSet, nodeName, newTestTaint) defer e2enode.RemoveTaintOffNode(f.ClientSet, nodeName, newTestTaint)
ginkgo.By("verifying the node has the taint " + newTestTaint.ToString()) ginkgo.By("verifying the node has the taint " + newTestTaint.ToString())
output = runKubectlRetryOrDie(ns, "describe", "node", nodeName) output = runKubectlRetryOrDie(ns, "describe", "node", nodeName)
@ -1671,7 +1672,7 @@ metadata:
} }
ginkgo.By("adding NoExecute taint " + noExecuteTaint.ToString() + " to the node") ginkgo.By("adding NoExecute taint " + noExecuteTaint.ToString() + " to the node")
runKubectlRetryOrDie(ns, "taint", "nodes", nodeName, noExecuteTaint.ToString()) runKubectlRetryOrDie(ns, "taint", "nodes", nodeName, noExecuteTaint.ToString())
defer framework.RemoveTaintOffNode(f.ClientSet, nodeName, noExecuteTaint) defer e2enode.RemoveTaintOffNode(f.ClientSet, nodeName, noExecuteTaint)
ginkgo.By("verifying the node has the taint " + noExecuteTaint.ToString()) ginkgo.By("verifying the node has the taint " + noExecuteTaint.ToString())
output = runKubectlRetryOrDie(ns, "describe", "node", nodeName) output = runKubectlRetryOrDie(ns, "describe", "node", nodeName)

View File

@ -92,7 +92,7 @@ var _ = ginkgo.Describe("[sig-node] RuntimeClass", func() {
} }
framework.AddOrUpdateTaintOnNode(f.ClientSet, nodeName, taint) framework.AddOrUpdateTaintOnNode(f.ClientSet, nodeName, taint)
framework.ExpectNodeHasTaint(f.ClientSet, nodeName, &taint) framework.ExpectNodeHasTaint(f.ClientSet, nodeName, &taint)
defer framework.RemoveTaintOffNode(f.ClientSet, nodeName, taint) defer e2enode.RemoveTaintOffNode(f.ClientSet, nodeName, taint)
ginkgo.By("Trying to create runtimeclass and pod") ginkgo.By("Trying to create runtimeclass and pod")
runtimeClass := newRuntimeClass(f.Namespace.Name, "non-conflict-runtimeclass", framework.TestContext.ContainerRuntime) runtimeClass := newRuntimeClass(f.Namespace.Name, "non-conflict-runtimeclass", framework.TestContext.ContainerRuntime)

View File

@ -190,7 +190,7 @@ var _ = SIGDescribe("NoExecuteTaintManager Single Pod [Serial]", func() {
testTaint := getTestTaint() testTaint := getTestTaint()
framework.AddOrUpdateTaintOnNode(cs, nodeName, testTaint) framework.AddOrUpdateTaintOnNode(cs, nodeName, testTaint)
framework.ExpectNodeHasTaint(cs, nodeName, &testTaint) framework.ExpectNodeHasTaint(cs, nodeName, &testTaint)
defer framework.RemoveTaintOffNode(cs, nodeName, testTaint) defer e2enode.RemoveTaintOffNode(cs, nodeName, testTaint)
// Wait a bit // Wait a bit
ginkgo.By("Waiting for Pod to be deleted") ginkgo.By("Waiting for Pod to be deleted")
@ -222,7 +222,7 @@ var _ = SIGDescribe("NoExecuteTaintManager Single Pod [Serial]", func() {
testTaint := getTestTaint() testTaint := getTestTaint()
framework.AddOrUpdateTaintOnNode(cs, nodeName, testTaint) framework.AddOrUpdateTaintOnNode(cs, nodeName, testTaint)
framework.ExpectNodeHasTaint(cs, nodeName, &testTaint) framework.ExpectNodeHasTaint(cs, nodeName, &testTaint)
defer framework.RemoveTaintOffNode(cs, nodeName, testTaint) defer e2enode.RemoveTaintOffNode(cs, nodeName, testTaint)
// Wait a bit // Wait a bit
ginkgo.By("Waiting for Pod to be deleted") ginkgo.By("Waiting for Pod to be deleted")
@ -255,7 +255,7 @@ var _ = SIGDescribe("NoExecuteTaintManager Single Pod [Serial]", func() {
testTaint := getTestTaint() testTaint := getTestTaint()
framework.AddOrUpdateTaintOnNode(cs, nodeName, testTaint) framework.AddOrUpdateTaintOnNode(cs, nodeName, testTaint)
framework.ExpectNodeHasTaint(cs, nodeName, &testTaint) framework.ExpectNodeHasTaint(cs, nodeName, &testTaint)
defer framework.RemoveTaintOffNode(cs, nodeName, testTaint) defer e2enode.RemoveTaintOffNode(cs, nodeName, testTaint)
// Wait a bit // Wait a bit
ginkgo.By("Waiting to see if a Pod won't be deleted") ginkgo.By("Waiting to see if a Pod won't be deleted")
@ -305,7 +305,7 @@ var _ = SIGDescribe("NoExecuteTaintManager Single Pod [Serial]", func() {
taintRemoved := false taintRemoved := false
defer func() { defer func() {
if !taintRemoved { if !taintRemoved {
framework.RemoveTaintOffNode(cs, nodeName, testTaint) e2enode.RemoveTaintOffNode(cs, nodeName, testTaint)
} }
}() }()
@ -322,7 +322,7 @@ var _ = SIGDescribe("NoExecuteTaintManager Single Pod [Serial]", func() {
// 4. Remove the taint // 4. Remove the taint
framework.Logf("Removing taint from Node") framework.Logf("Removing taint from Node")
framework.RemoveTaintOffNode(cs, nodeName, testTaint) e2enode.RemoveTaintOffNode(cs, nodeName, testTaint)
taintRemoved = true taintRemoved = true
// 5. See if Pod won't be evicted. // 5. See if Pod won't be evicted.
@ -376,11 +376,11 @@ var _ = SIGDescribe("NoExecuteTaintManager Multiple Pods [Serial]", func() {
testTaint := getTestTaint() testTaint := getTestTaint()
framework.AddOrUpdateTaintOnNode(cs, nodeName1, testTaint) framework.AddOrUpdateTaintOnNode(cs, nodeName1, testTaint)
framework.ExpectNodeHasTaint(cs, nodeName1, &testTaint) framework.ExpectNodeHasTaint(cs, nodeName1, &testTaint)
defer framework.RemoveTaintOffNode(cs, nodeName1, testTaint) defer e2enode.RemoveTaintOffNode(cs, nodeName1, testTaint)
if nodeName2 != nodeName1 { if nodeName2 != nodeName1 {
framework.AddOrUpdateTaintOnNode(cs, nodeName2, testTaint) framework.AddOrUpdateTaintOnNode(cs, nodeName2, testTaint)
framework.ExpectNodeHasTaint(cs, nodeName2, &testTaint) framework.ExpectNodeHasTaint(cs, nodeName2, &testTaint)
defer framework.RemoveTaintOffNode(cs, nodeName2, testTaint) defer e2enode.RemoveTaintOffNode(cs, nodeName2, testTaint)
} }
// Wait a bit // Wait a bit
@ -449,7 +449,7 @@ var _ = SIGDescribe("NoExecuteTaintManager Multiple Pods [Serial]", func() {
testTaint := getTestTaint() testTaint := getTestTaint()
framework.AddOrUpdateTaintOnNode(cs, nodeName, testTaint) framework.AddOrUpdateTaintOnNode(cs, nodeName, testTaint)
framework.ExpectNodeHasTaint(cs, nodeName, &testTaint) framework.ExpectNodeHasTaint(cs, nodeName, &testTaint)
defer framework.RemoveTaintOffNode(cs, nodeName, testTaint) defer e2enode.RemoveTaintOffNode(cs, nodeName, testTaint)
// 3. Wait to see if both pods get evicted in between [5, 25] seconds // 3. Wait to see if both pods get evicted in between [5, 25] seconds
ginkgo.By("Waiting for Pod1 and Pod2 to be deleted") ginkgo.By("Waiting for Pod1 and Pod2 to be deleted")

View File

@ -587,7 +587,7 @@ var _ = SIGDescribe("SchedulerPredicates [Serial]", func() {
} }
framework.AddOrUpdateTaintOnNode(cs, nodeName, testTaint) framework.AddOrUpdateTaintOnNode(cs, nodeName, testTaint)
framework.ExpectNodeHasTaint(cs, nodeName, &testTaint) framework.ExpectNodeHasTaint(cs, nodeName, &testTaint)
defer framework.RemoveTaintOffNode(cs, nodeName, testTaint) defer e2enode.RemoveTaintOffNode(cs, nodeName, testTaint)
ginkgo.By("Trying to apply a random label on the found node.") ginkgo.By("Trying to apply a random label on the found node.")
labelKey := fmt.Sprintf("kubernetes.io/e2e-label-key-%s", string(uuid.NewUUID())) labelKey := fmt.Sprintf("kubernetes.io/e2e-label-key-%s", string(uuid.NewUUID()))
@ -630,7 +630,7 @@ var _ = SIGDescribe("SchedulerPredicates [Serial]", func() {
} }
framework.AddOrUpdateTaintOnNode(cs, nodeName, testTaint) framework.AddOrUpdateTaintOnNode(cs, nodeName, testTaint)
framework.ExpectNodeHasTaint(cs, nodeName, &testTaint) framework.ExpectNodeHasTaint(cs, nodeName, &testTaint)
defer framework.RemoveTaintOffNode(cs, nodeName, testTaint) defer e2enode.RemoveTaintOffNode(cs, nodeName, testTaint)
ginkgo.By("Trying to apply a random label on the found node.") ginkgo.By("Trying to apply a random label on the found node.")
labelKey := fmt.Sprintf("kubernetes.io/e2e-label-key-%s", string(uuid.NewUUID())) labelKey := fmt.Sprintf("kubernetes.io/e2e-label-key-%s", string(uuid.NewUUID()))
@ -904,7 +904,7 @@ func getRequestedStorageEphemeralStorage(pod v1.Pod) int64 {
// from the given node upon invocation. // from the given node upon invocation.
func removeTaintFromNodeAction(cs clientset.Interface, nodeName string, testTaint v1.Taint) Action { func removeTaintFromNodeAction(cs clientset.Interface, nodeName string, testTaint v1.Taint) Action {
return func() error { return func() error {
framework.RemoveTaintOffNode(cs, nodeName, testTaint) e2enode.RemoveTaintOffNode(cs, nodeName, testTaint)
return nil return nil
} }
} }

View File

@ -314,14 +314,14 @@ var _ = SIGDescribe("SchedulerPriorities [Serial]", func() {
for i := 0; i < 10; i++ { for i := 0; i < 10; i++ {
testTaint := addRandomTaintToNode(cs, nodeName) testTaint := addRandomTaintToNode(cs, nodeName)
tolerations = append(tolerations, v1.Toleration{Key: testTaint.Key, Value: testTaint.Value, Effect: testTaint.Effect}) tolerations = append(tolerations, v1.Toleration{Key: testTaint.Key, Value: testTaint.Value, Effect: testTaint.Effect})
defer framework.RemoveTaintOffNode(cs, nodeName, *testTaint) defer e2enode.RemoveTaintOffNode(cs, nodeName, *testTaint)
} }
ginkgo.By("Adding 10 intolerable taints to all other nodes") ginkgo.By("Adding 10 intolerable taints to all other nodes")
for i := 1; i < len(nodeList.Items); i++ { for i := 1; i < len(nodeList.Items); i++ {
node := nodeList.Items[i] node := nodeList.Items[i]
for i := 0; i < 10; i++ { for i := 0; i < 10; i++ {
testTaint := addRandomTaintToNode(cs, node.Name) testTaint := addRandomTaintToNode(cs, node.Name)
defer framework.RemoveTaintOffNode(cs, node.Name, *testTaint) defer e2enode.RemoveTaintOffNode(cs, node.Name, *testTaint)
} }
} }