mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-23 03:41:45 +00:00
move function RemoveTaintOffNode in test/e2e/framework/util.go to subpackage node
This commit is contained in:
parent
172553bf94
commit
6532b40f21
@ -10,6 +10,7 @@ go_library(
|
||||
importpath = "k8s.io/kubernetes/test/e2e/framework/node",
|
||||
visibility = ["//visibility:public"],
|
||||
deps = [
|
||||
"//pkg/controller:go_default_library",
|
||||
"//pkg/scheduler/framework/v1alpha1: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",
|
||||
@ -22,6 +23,7 @@ go_library(
|
||||
"//test/e2e/system:go_default_library",
|
||||
"//test/utils: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/k8s.io/utils/pointer:go_default_library",
|
||||
],
|
||||
|
@ -23,6 +23,7 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/onsi/ginkgo"
|
||||
"github.com/onsi/gomega"
|
||||
|
||||
v1 "k8s.io/api/core/v1"
|
||||
@ -30,6 +31,7 @@ import (
|
||||
"k8s.io/apimachinery/pkg/util/rand"
|
||||
"k8s.io/apimachinery/pkg/util/sets"
|
||||
clientset "k8s.io/client-go/kubernetes"
|
||||
"k8s.io/kubernetes/pkg/controller"
|
||||
schedfwk "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1"
|
||||
e2elog "k8s.io/kubernetes/test/e2e/framework/log"
|
||||
"k8s.io/kubernetes/test/e2e/system"
|
||||
@ -556,3 +558,33 @@ func CreatePodsPerNodeForSimpleApp(c clientset.Interface, namespace, appName str
|
||||
}
|
||||
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
|
||||
}
|
||||
|
@ -978,12 +978,6 @@ func ExpectNodeHasLabel(c clientset.Interface, nodeName string, labelKey string,
|
||||
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.
|
||||
func AddOrUpdateTaintOnNode(c clientset.Interface, nodeName string, taint v1.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}))
|
||||
}
|
||||
|
||||
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.
|
||||
func ExpectNodeHasTaint(c clientset.Interface, nodeName string, taint *v1.Taint) {
|
||||
ginkgo.By("verifying the node has the taint " + taint.ToString())
|
||||
|
@ -35,6 +35,7 @@ go_library(
|
||||
"//test/e2e/framework/auth:go_default_library",
|
||||
"//test/e2e/framework/endpoints: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/service:go_default_library",
|
||||
"//test/e2e/framework/testfiles:go_default_library",
|
||||
|
@ -65,6 +65,7 @@ import (
|
||||
e2eauth "k8s.io/kubernetes/test/e2e/framework/auth"
|
||||
e2eendpoints "k8s.io/kubernetes/test/e2e/framework/endpoints"
|
||||
e2ekubectl "k8s.io/kubernetes/test/e2e/framework/kubectl"
|
||||
e2enode "k8s.io/kubernetes/test/e2e/framework/node"
|
||||
e2epod "k8s.io/kubernetes/test/e2e/framework/pod"
|
||||
e2eservice "k8s.io/kubernetes/test/e2e/framework/service"
|
||||
e2etestfiles "k8s.io/kubernetes/test/e2e/framework/testfiles"
|
||||
@ -1604,7 +1605,7 @@ metadata:
|
||||
|
||||
ginkgo.By("adding the taint " + testTaint.ToString() + " to a node")
|
||||
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())
|
||||
output := runKubectlRetryOrDie(ns, "describe", "node", nodeName)
|
||||
@ -1635,7 +1636,7 @@ metadata:
|
||||
|
||||
ginkgo.By("adding the taint " + testTaint.ToString() + " to a node")
|
||||
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())
|
||||
output := runKubectlRetryOrDie(ns, "describe", "node", nodeName)
|
||||
@ -1653,7 +1654,7 @@ metadata:
|
||||
}
|
||||
ginkgo.By("adding another taint " + newTestTaint.ToString() + " to the node")
|
||||
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())
|
||||
output = runKubectlRetryOrDie(ns, "describe", "node", nodeName)
|
||||
@ -1671,7 +1672,7 @@ metadata:
|
||||
}
|
||||
ginkgo.By("adding NoExecute taint " + noExecuteTaint.ToString() + " to the node")
|
||||
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())
|
||||
output = runKubectlRetryOrDie(ns, "describe", "node", nodeName)
|
||||
|
@ -92,7 +92,7 @@ var _ = ginkgo.Describe("[sig-node] RuntimeClass", func() {
|
||||
}
|
||||
framework.AddOrUpdateTaintOnNode(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")
|
||||
runtimeClass := newRuntimeClass(f.Namespace.Name, "non-conflict-runtimeclass", framework.TestContext.ContainerRuntime)
|
||||
|
@ -190,7 +190,7 @@ var _ = SIGDescribe("NoExecuteTaintManager Single Pod [Serial]", func() {
|
||||
testTaint := getTestTaint()
|
||||
framework.AddOrUpdateTaintOnNode(cs, nodeName, testTaint)
|
||||
framework.ExpectNodeHasTaint(cs, nodeName, &testTaint)
|
||||
defer framework.RemoveTaintOffNode(cs, nodeName, testTaint)
|
||||
defer e2enode.RemoveTaintOffNode(cs, nodeName, testTaint)
|
||||
|
||||
// Wait a bit
|
||||
ginkgo.By("Waiting for Pod to be deleted")
|
||||
@ -222,7 +222,7 @@ var _ = SIGDescribe("NoExecuteTaintManager Single Pod [Serial]", func() {
|
||||
testTaint := getTestTaint()
|
||||
framework.AddOrUpdateTaintOnNode(cs, nodeName, testTaint)
|
||||
framework.ExpectNodeHasTaint(cs, nodeName, &testTaint)
|
||||
defer framework.RemoveTaintOffNode(cs, nodeName, testTaint)
|
||||
defer e2enode.RemoveTaintOffNode(cs, nodeName, testTaint)
|
||||
|
||||
// Wait a bit
|
||||
ginkgo.By("Waiting for Pod to be deleted")
|
||||
@ -255,7 +255,7 @@ var _ = SIGDescribe("NoExecuteTaintManager Single Pod [Serial]", func() {
|
||||
testTaint := getTestTaint()
|
||||
framework.AddOrUpdateTaintOnNode(cs, nodeName, testTaint)
|
||||
framework.ExpectNodeHasTaint(cs, nodeName, &testTaint)
|
||||
defer framework.RemoveTaintOffNode(cs, nodeName, testTaint)
|
||||
defer e2enode.RemoveTaintOffNode(cs, nodeName, testTaint)
|
||||
|
||||
// Wait a bit
|
||||
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
|
||||
defer func() {
|
||||
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
|
||||
framework.Logf("Removing taint from Node")
|
||||
framework.RemoveTaintOffNode(cs, nodeName, testTaint)
|
||||
e2enode.RemoveTaintOffNode(cs, nodeName, testTaint)
|
||||
taintRemoved = true
|
||||
|
||||
// 5. See if Pod won't be evicted.
|
||||
@ -376,11 +376,11 @@ var _ = SIGDescribe("NoExecuteTaintManager Multiple Pods [Serial]", func() {
|
||||
testTaint := getTestTaint()
|
||||
framework.AddOrUpdateTaintOnNode(cs, nodeName1, testTaint)
|
||||
framework.ExpectNodeHasTaint(cs, nodeName1, &testTaint)
|
||||
defer framework.RemoveTaintOffNode(cs, nodeName1, testTaint)
|
||||
defer e2enode.RemoveTaintOffNode(cs, nodeName1, testTaint)
|
||||
if nodeName2 != nodeName1 {
|
||||
framework.AddOrUpdateTaintOnNode(cs, nodeName2, testTaint)
|
||||
framework.ExpectNodeHasTaint(cs, nodeName2, &testTaint)
|
||||
defer framework.RemoveTaintOffNode(cs, nodeName2, testTaint)
|
||||
defer e2enode.RemoveTaintOffNode(cs, nodeName2, testTaint)
|
||||
}
|
||||
|
||||
// Wait a bit
|
||||
@ -449,7 +449,7 @@ var _ = SIGDescribe("NoExecuteTaintManager Multiple Pods [Serial]", func() {
|
||||
testTaint := getTestTaint()
|
||||
framework.AddOrUpdateTaintOnNode(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
|
||||
ginkgo.By("Waiting for Pod1 and Pod2 to be deleted")
|
||||
|
@ -587,7 +587,7 @@ var _ = SIGDescribe("SchedulerPredicates [Serial]", func() {
|
||||
}
|
||||
framework.AddOrUpdateTaintOnNode(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.")
|
||||
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.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.")
|
||||
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.
|
||||
func removeTaintFromNodeAction(cs clientset.Interface, nodeName string, testTaint v1.Taint) Action {
|
||||
return func() error {
|
||||
framework.RemoveTaintOffNode(cs, nodeName, testTaint)
|
||||
e2enode.RemoveTaintOffNode(cs, nodeName, testTaint)
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
@ -314,14 +314,14 @@ var _ = SIGDescribe("SchedulerPriorities [Serial]", func() {
|
||||
for i := 0; i < 10; i++ {
|
||||
testTaint := addRandomTaintToNode(cs, nodeName)
|
||||
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")
|
||||
for i := 1; i < len(nodeList.Items); i++ {
|
||||
node := nodeList.Items[i]
|
||||
for i := 0; i < 10; i++ {
|
||||
testTaint := addRandomTaintToNode(cs, node.Name)
|
||||
defer framework.RemoveTaintOffNode(cs, node.Name, *testTaint)
|
||||
defer e2enode.RemoveTaintOffNode(cs, node.Name, *testTaint)
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user