From d648ba856b21c4ae98e9b1e9d8a998d0a0b9ca49 Mon Sep 17 00:00:00 2001 From: "Daniel (Shijun) Qian" Date: Wed, 27 Feb 2019 03:05:32 +0800 Subject: [PATCH] Move pkg/api/v1/node to pkg/util/node (#73656) * merge pkg/api/v1/node with pkg/util/node * update test case for utilnode * remove package pkg/api/v1/node * move isNodeReady to internal func * Split GetNodeCondition into e2e and controller pkg * fix import errors --- pkg/BUILD | 1 - pkg/api/v1/node/BUILD | 26 ------------------- pkg/controller/.import-restrictions | 1 - pkg/controller/cloud/BUILD | 2 +- .../cloud/node_lifecycle_controller.go | 4 +-- pkg/controller/nodeipam/ipam/BUILD | 1 - .../nodeipam/ipam/cloud_cidr_allocator.go | 3 +-- pkg/controller/nodelifecycle/BUILD | 1 - .../node_lifecycle_controller.go | 13 +++++----- pkg/controller/route/BUILD | 4 +-- pkg/controller/route/route_controller.go | 10 +++---- pkg/controller/route/route_controller_test.go | 2 +- pkg/controller/util/node/controller_utils.go | 14 ++++++++++ test/e2e/common/BUILD | 1 - test/e2e/common/node_lease.go | 7 +++-- test/e2e_node/BUILD | 5 ++-- test/e2e_node/e2e_node_suite_test.go | 13 ++++++++-- test/e2e_node/eviction_test.go | 4 +-- test/e2e_node/node_problem_detector_linux.go | 4 +-- test/utils/BUILD | 1 + pkg/api/v1/node/util.go => test/utils/node.go | 20 +++----------- 21 files changed, 56 insertions(+), 81 deletions(-) delete mode 100644 pkg/api/v1/node/BUILD rename pkg/api/v1/node/util.go => test/utils/node.go (73%) diff --git a/pkg/BUILD b/pkg/BUILD index 04431003b87..c05c2b23db1 100644 --- a/pkg/BUILD +++ b/pkg/BUILD @@ -24,7 +24,6 @@ filegroup( "//pkg/api/testapi:all-srcs", "//pkg/api/testing:all-srcs", "//pkg/api/v1/endpoints:all-srcs", - "//pkg/api/v1/node:all-srcs", "//pkg/api/v1/persistentvolume:all-srcs", "//pkg/api/v1/pod:all-srcs", "//pkg/api/v1/resource:all-srcs", diff --git a/pkg/api/v1/node/BUILD b/pkg/api/v1/node/BUILD deleted file mode 100644 index de080f93ee2..00000000000 --- a/pkg/api/v1/node/BUILD +++ /dev/null @@ -1,26 +0,0 @@ -package(default_visibility = ["//visibility:public"]) - -load( - "@io_bazel_rules_go//go:def.bzl", - "go_library", -) - -go_library( - name = "go_default_library", - srcs = ["util.go"], - importpath = "k8s.io/kubernetes/pkg/api/v1/node", - deps = ["//staging/src/k8s.io/api/core/v1:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], -) diff --git a/pkg/controller/.import-restrictions b/pkg/controller/.import-restrictions index 6000753734d..e3b8394d058 100644 --- a/pkg/controller/.import-restrictions +++ b/pkg/controller/.import-restrictions @@ -167,7 +167,6 @@ "AllowedPrefixes": [ "k8s.io/kubernetes/pkg/api/legacyscheme", "k8s.io/kubernetes/pkg/api/v1/endpoints", - "k8s.io/kubernetes/pkg/api/v1/node", "k8s.io/kubernetes/pkg/api/v1/pod", "k8s.io/kubernetes/pkg/apis/apps/v1", "k8s.io/kubernetes/pkg/apis/autoscaling", diff --git a/pkg/controller/cloud/BUILD b/pkg/controller/cloud/BUILD index 1997df80994..327a8ab7411 100644 --- a/pkg/controller/cloud/BUILD +++ b/pkg/controller/cloud/BUILD @@ -15,9 +15,9 @@ go_library( ], importpath = "k8s.io/kubernetes/pkg/controller/cloud", deps = [ - "//pkg/api/v1/node:go_default_library", "//pkg/apis/core/v1/helper:go_default_library", "//pkg/controller:go_default_library", + "//pkg/controller/util/node:go_default_library", "//pkg/kubelet/apis:go_default_library", "//pkg/scheduler/api:go_default_library", "//pkg/util/node:go_default_library", diff --git a/pkg/controller/cloud/node_lifecycle_controller.go b/pkg/controller/cloud/node_lifecycle_controller.go index 809e85c55d9..c75c9e801e7 100644 --- a/pkg/controller/cloud/node_lifecycle_controller.go +++ b/pkg/controller/cloud/node_lifecycle_controller.go @@ -35,8 +35,8 @@ import ( "k8s.io/client-go/tools/record" cloudprovider "k8s.io/cloud-provider" "k8s.io/klog" - nodeutilv1 "k8s.io/kubernetes/pkg/api/v1/node" "k8s.io/kubernetes/pkg/controller" + nodeutil "k8s.io/kubernetes/pkg/controller/util/node" schedulerapi "k8s.io/kubernetes/pkg/scheduler/api" ) @@ -133,7 +133,7 @@ func (c *CloudNodeLifecycleController) MonitorNodes() { for _, node := range nodes { // Default NodeReady status to v1.ConditionUnknown status := v1.ConditionUnknown - if _, c := nodeutilv1.GetNodeCondition(&node.Status, v1.NodeReady); c != nil { + if _, c := nodeutil.GetNodeCondition(&node.Status, v1.NodeReady); c != nil { status = c.Status } diff --git a/pkg/controller/nodeipam/ipam/BUILD b/pkg/controller/nodeipam/ipam/BUILD index e95fd1f7c91..d7dd6e6e1e1 100644 --- a/pkg/controller/nodeipam/ipam/BUILD +++ b/pkg/controller/nodeipam/ipam/BUILD @@ -42,7 +42,6 @@ go_library( ], importpath = "k8s.io/kubernetes/pkg/controller/nodeipam/ipam", deps = [ - "//pkg/api/v1/node:go_default_library", "//pkg/cloudprovider/providers/gce:go_default_library", "//pkg/controller:go_default_library", "//pkg/controller/nodeipam/ipam/cidrset:go_default_library", diff --git a/pkg/controller/nodeipam/ipam/cloud_cidr_allocator.go b/pkg/controller/nodeipam/ipam/cloud_cidr_allocator.go index 8c39a9f469e..21022555714 100644 --- a/pkg/controller/nodeipam/ipam/cloud_cidr_allocator.go +++ b/pkg/controller/nodeipam/ipam/cloud_cidr_allocator.go @@ -39,7 +39,6 @@ import ( "k8s.io/client-go/kubernetes/scheme" v1core "k8s.io/client-go/kubernetes/typed/core/v1" cloudprovider "k8s.io/cloud-provider" - v1node "k8s.io/kubernetes/pkg/api/v1/node" "k8s.io/kubernetes/pkg/cloudprovider/providers/gce" "k8s.io/kubernetes/pkg/controller" nodeutil "k8s.io/kubernetes/pkg/controller/util/node" @@ -118,7 +117,7 @@ func NewCloudCIDRAllocator(client clientset.Interface, cloud cloudprovider.Inter // Even if PodCIDR is assigned, but NetworkUnavailable condition is // set to true, we need to process the node to set the condition. networkUnavailableTaint := &v1.Taint{Key: schedulerapi.TaintNodeNetworkUnavailable, Effect: v1.TaintEffectNoSchedule} - _, cond := v1node.GetNodeCondition(&newNode.Status, v1.NodeNetworkUnavailable) + _, cond := nodeutil.GetNodeCondition(&newNode.Status, v1.NodeNetworkUnavailable) if cond == nil || cond.Status != v1.ConditionFalse || utiltaints.TaintExists(newNode.Spec.Taints, networkUnavailableTaint) { return ca.AllocateOrOccupyCIDR(newNode) } diff --git a/pkg/controller/nodelifecycle/BUILD b/pkg/controller/nodelifecycle/BUILD index a7935ff7908..0dfe54eedef 100644 --- a/pkg/controller/nodelifecycle/BUILD +++ b/pkg/controller/nodelifecycle/BUILD @@ -9,7 +9,6 @@ go_library( importpath = "k8s.io/kubernetes/pkg/controller/nodelifecycle", visibility = ["//visibility:public"], deps = [ - "//pkg/api/v1/node:go_default_library", "//pkg/controller:go_default_library", "//pkg/controller/nodelifecycle/scheduler:go_default_library", "//pkg/controller/util/node:go_default_library", diff --git a/pkg/controller/nodelifecycle/node_lifecycle_controller.go b/pkg/controller/nodelifecycle/node_lifecycle_controller.go index 87796c5757e..9359a611b67 100644 --- a/pkg/controller/nodelifecycle/node_lifecycle_controller.go +++ b/pkg/controller/nodelifecycle/node_lifecycle_controller.go @@ -52,7 +52,6 @@ import ( "k8s.io/client-go/tools/record" "k8s.io/client-go/util/flowcontrol" "k8s.io/client-go/util/workqueue" - v1node "k8s.io/kubernetes/pkg/api/v1/node" "k8s.io/kubernetes/pkg/controller" "k8s.io/kubernetes/pkg/controller/nodelifecycle/scheduler" nodeutil "k8s.io/kubernetes/pkg/controller/util/node" @@ -525,7 +524,7 @@ func (nc *Controller) doNoExecuteTaintingPass() { // retry in 50 millisecond return false, 50 * time.Millisecond } - _, condition := v1node.GetNodeCondition(&node.Status, v1.NodeReady) + _, condition := nodeutil.GetNodeCondition(&node.Status, v1.NodeReady) // Because we want to mimic NodeStatus.Condition["Ready"] we make "unreachable" and "not ready" taints mutually exclusive. taintToAdd := v1.Taint{} oppositeTaint := v1.Taint{} @@ -742,7 +741,7 @@ func (nc *Controller) tryUpdateNodeHealth(node *v1.Node) (time.Duration, v1.Node var err error var gracePeriod time.Duration var observedReadyCondition v1.NodeCondition - _, currentReadyCondition := v1node.GetNodeCondition(&node.Status, v1.NodeReady) + _, currentReadyCondition := nodeutil.GetNodeCondition(&node.Status, v1.NodeReady) if currentReadyCondition == nil { // If ready condition is nil, then kubelet (or nodecontroller) never posted node status. // A fake ready condition is created, where LastHeartbeatTime and LastTransitionTime is set @@ -787,10 +786,10 @@ func (nc *Controller) tryUpdateNodeHealth(node *v1.Node) (time.Duration, v1.Node var savedCondition *v1.NodeCondition var savedLease *coordv1beta1.Lease if found { - _, savedCondition = v1node.GetNodeCondition(savedNodeHealth.status, v1.NodeReady) + _, savedCondition = nodeutil.GetNodeCondition(savedNodeHealth.status, v1.NodeReady) savedLease = savedNodeHealth.lease } - _, observedCondition := v1node.GetNodeCondition(&node.Status, v1.NodeReady) + _, observedCondition := nodeutil.GetNodeCondition(&node.Status, v1.NodeReady) if !found { klog.Warningf("Missing timestamp for Node %s. Assuming now as a timestamp.", node.Name) savedNodeHealth = &nodeHealthData{ @@ -885,7 +884,7 @@ func (nc *Controller) tryUpdateNodeHealth(node *v1.Node) (time.Duration, v1.Node nowTimestamp := nc.now() for _, nodeConditionType := range remainingNodeConditionTypes { - _, currentCondition := v1node.GetNodeCondition(&node.Status, nodeConditionType) + _, currentCondition := nodeutil.GetNodeCondition(&node.Status, nodeConditionType) if currentCondition == nil { klog.V(2).Infof("Condition %v of node %v was never updated by kubelet", nodeConditionType, node.Name) node.Status.Conditions = append(node.Status.Conditions, v1.NodeCondition{ @@ -908,7 +907,7 @@ func (nc *Controller) tryUpdateNodeHealth(node *v1.Node) (time.Duration, v1.Node } } - _, currentCondition := v1node.GetNodeCondition(&node.Status, v1.NodeReady) + _, currentCondition := nodeutil.GetNodeCondition(&node.Status, v1.NodeReady) if !apiequality.Semantic.DeepEqual(currentCondition, &observedReadyCondition) { if _, err = nc.kubeClient.CoreV1().Nodes().UpdateStatus(node); err != nil { klog.Errorf("Error updating node %s: %v", node.Name, err) diff --git a/pkg/controller/route/BUILD b/pkg/controller/route/BUILD index b756e1bc204..f74931ae354 100644 --- a/pkg/controller/route/BUILD +++ b/pkg/controller/route/BUILD @@ -14,8 +14,8 @@ go_library( ], importpath = "k8s.io/kubernetes/pkg/controller/route", deps = [ - "//pkg/api/v1/node:go_default_library", "//pkg/controller:go_default_library", + "//pkg/controller/util/node:go_default_library", "//pkg/util/metrics:go_default_library", "//pkg/util/node:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", @@ -42,9 +42,9 @@ go_test( srcs = ["route_controller_test.go"], embed = [":go_default_library"], deps = [ - "//pkg/api/v1/node:go_default_library", "//pkg/cloudprovider/providers/fake:go_default_library", "//pkg/controller:go_default_library", + "//pkg/controller/util/node: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/types:go_default_library", diff --git a/pkg/controller/route/route_controller.go b/pkg/controller/route/route_controller.go index a8fd29e39c8..27719b178ea 100644 --- a/pkg/controller/route/route_controller.go +++ b/pkg/controller/route/route_controller.go @@ -40,10 +40,10 @@ import ( "k8s.io/client-go/tools/record" clientretry "k8s.io/client-go/util/retry" cloudprovider "k8s.io/cloud-provider" - v1node "k8s.io/kubernetes/pkg/api/v1/node" "k8s.io/kubernetes/pkg/controller" + nodeutil "k8s.io/kubernetes/pkg/controller/util/node" "k8s.io/kubernetes/pkg/util/metrics" - nodeutil "k8s.io/kubernetes/pkg/util/node" + utilnode "k8s.io/kubernetes/pkg/util/node" ) const ( @@ -201,7 +201,7 @@ func (rc *RouteController) reconcile(nodes []*v1.Node, routes []*cloudprovider.R }(nodeName, nameHint, route) } else { // Update condition only if it doesn't reflect the current state. - _, condition := v1node.GetNodeCondition(&node.Status, v1.NodeNetworkUnavailable) + _, condition := nodeutil.GetNodeCondition(&node.Status, v1.NodeNetworkUnavailable) if condition == nil || condition.Status != v1.ConditionFalse { rc.updateNetworkingCondition(types.NodeName(node.Name), true) } @@ -237,7 +237,7 @@ func (rc *RouteController) updateNetworkingCondition(nodeName types.NodeName, ro // patch in the retry loop. currentTime := metav1.Now() if routeCreated { - err = nodeutil.SetNodeCondition(rc.kubeClient, nodeName, v1.NodeCondition{ + err = utilnode.SetNodeCondition(rc.kubeClient, nodeName, v1.NodeCondition{ Type: v1.NodeNetworkUnavailable, Status: v1.ConditionFalse, Reason: "RouteCreated", @@ -245,7 +245,7 @@ func (rc *RouteController) updateNetworkingCondition(nodeName types.NodeName, ro LastTransitionTime: currentTime, }) } else { - err = nodeutil.SetNodeCondition(rc.kubeClient, nodeName, v1.NodeCondition{ + err = utilnode.SetNodeCondition(rc.kubeClient, nodeName, v1.NodeCondition{ Type: v1.NodeNetworkUnavailable, Status: v1.ConditionTrue, Reason: "NoRouteCreated", diff --git a/pkg/controller/route/route_controller_test.go b/pkg/controller/route/route_controller_test.go index b7ea9bd770c..4283779546b 100644 --- a/pkg/controller/route/route_controller_test.go +++ b/pkg/controller/route/route_controller_test.go @@ -29,9 +29,9 @@ import ( "k8s.io/client-go/kubernetes/fake" core "k8s.io/client-go/testing" cloudprovider "k8s.io/cloud-provider" - nodeutil "k8s.io/kubernetes/pkg/api/v1/node" fakecloud "k8s.io/kubernetes/pkg/cloudprovider/providers/fake" "k8s.io/kubernetes/pkg/controller" + nodeutil "k8s.io/kubernetes/pkg/controller/util/node" ) func alwaysReady() bool { return true } diff --git a/pkg/controller/util/node/controller_utils.go b/pkg/controller/util/node/controller_utils.go index 7d67118cc6b..c4e8b316049 100644 --- a/pkg/controller/util/node/controller_utils.go +++ b/pkg/controller/util/node/controller_utils.go @@ -260,3 +260,17 @@ func CreateDeleteNodeHandler(f func(node *v1.Node) error) func(obj interface{}) } } } + +// GetNodeCondition extracts the provided condition from the given status and returns that. +// Returns nil and -1 if the condition is not present, and the index of the located condition. +func GetNodeCondition(status *v1.NodeStatus, conditionType v1.NodeConditionType) (int, *v1.NodeCondition) { + if status == nil { + return -1, nil + } + for i := range status.Conditions { + if status.Conditions[i].Type == conditionType { + return i, &status.Conditions[i] + } + } + return -1, nil +} diff --git a/test/e2e/common/BUILD b/test/e2e/common/BUILD index bcd82581dc2..be73bd777a2 100644 --- a/test/e2e/common/BUILD +++ b/test/e2e/common/BUILD @@ -43,7 +43,6 @@ go_library( ], importpath = "k8s.io/kubernetes/test/e2e/common", deps = [ - "//pkg/api/v1/node:go_default_library", "//pkg/api/v1/pod:go_default_library", "//pkg/apis/core:go_default_library", "//pkg/client/clientset_generated/internalclientset:go_default_library", diff --git a/test/e2e/common/node_lease.go b/test/e2e/common/node_lease.go index c4477df0aef..b3a113b86d5 100644 --- a/test/e2e/common/node_lease.go +++ b/test/e2e/common/node_lease.go @@ -24,9 +24,8 @@ import ( corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" clientset "k8s.io/client-go/kubernetes" - - v1node "k8s.io/kubernetes/pkg/api/v1/node" "k8s.io/kubernetes/test/e2e/framework" + testutils "k8s.io/kubernetes/test/utils" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" @@ -123,7 +122,7 @@ var _ = framework.KubeDescribe("NodeLease", func() { // run controller manager, i.e., no node lifecycle controller. node, err := f.ClientSet.CoreV1().Nodes().Get(nodeName, metav1.GetOptions{}) Expect(err).To(BeNil()) - _, readyCondition := v1node.GetNodeCondition(&node.Status, corev1.NodeReady) + _, readyCondition := testutils.GetNodeCondition(&node.Status, corev1.NodeReady) Expect(readyCondition.Status).To(Equal(corev1.ConditionTrue)) }) }) @@ -136,7 +135,7 @@ func getNextReadyConditionHeartbeatTime(clientSet clientset.Interface, nodeName if err != nil { return err } - _, readyCondition := v1node.GetNodeCondition(&node.Status, corev1.NodeReady) + _, readyCondition := testutils.GetNodeCondition(&node.Status, corev1.NodeReady) Expect(readyCondition.Status).To(Equal(corev1.ConditionTrue)) newHeartbeatTime = readyCondition.LastHeartbeatTime if prevHeartbeatTime.Before(&newHeartbeatTime) { diff --git a/test/e2e_node/BUILD b/test/e2e_node/BUILD index a8cf1c6b3c3..6ada6c9ea23 100644 --- a/test/e2e_node/BUILD +++ b/test/e2e_node/BUILD @@ -60,7 +60,6 @@ go_library( "//vendor/k8s.io/klog:go_default_library", ] + select({ "@io_bazel_rules_go//go/platform:linux": [ - "//pkg/api/v1/node:go_default_library", "//pkg/util/procfs:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/fields:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library", @@ -71,6 +70,7 @@ go_library( "//staging/src/k8s.io/client-go/kubernetes/typed/core/v1:go_default_library", "//test/e2e/perftype:go_default_library", "//test/e2e_node/perftype:go_default_library", + "//test/utils:go_default_library", "//vendor/github.com/google/cadvisor/client/v2:go_default_library", "//vendor/github.com/google/cadvisor/info/v2:go_default_library", "//vendor/github.com/opencontainers/runc/libcontainer/cgroups:go_default_library", @@ -114,7 +114,6 @@ go_test( embed = [":go_default_library"], tags = ["e2e"], deps = [ - "//pkg/api/v1/node:go_default_library", "//pkg/apis/core:go_default_library", "//pkg/features:go_default_library", "//pkg/kubelet:go_default_library", @@ -157,6 +156,7 @@ go_test( "//test/e2e/framework/metrics:go_default_library", "//test/e2e_node/perf/workloads:go_default_library", "//test/e2e_node/services:go_default_library", + "//test/utils:go_default_library", "//test/utils/image:go_default_library", "//vendor/github.com/blang/semver:go_default_library", "//vendor/github.com/coreos/go-systemd/util:go_default_library", @@ -175,7 +175,6 @@ go_test( "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/yaml:go_default_library", "//staging/src/k8s.io/client-go/tools/cache:go_default_library", - "//test/utils:go_default_library", "//vendor/github.com/kardianos/osext:go_default_library", "//vendor/github.com/onsi/ginkgo/config:go_default_library", "//vendor/github.com/onsi/ginkgo/reporters:go_default_library", diff --git a/test/e2e_node/e2e_node_suite_test.go b/test/e2e_node/e2e_node_suite_test.go index 41357cc407d..623b7b1839e 100644 --- a/test/e2e_node/e2e_node_suite_test.go +++ b/test/e2e_node/e2e_node_suite_test.go @@ -39,7 +39,6 @@ import ( utilyaml "k8s.io/apimachinery/pkg/util/yaml" clientset "k8s.io/client-go/kubernetes" "k8s.io/kubernetes/cmd/kubeadm/app/util/system" - nodeutil "k8s.io/kubernetes/pkg/api/v1/node" commontest "k8s.io/kubernetes/test/e2e/common" "k8s.io/kubernetes/test/e2e/framework" "k8s.io/kubernetes/test/e2e_node/services" @@ -234,7 +233,7 @@ func waitForNodeReady() { if err != nil { return fmt.Errorf("failed to get node: %v", err) } - if !nodeutil.IsNodeReady(node) { + if !isNodeReady(node) { return fmt.Errorf("node is not ready: %+v", node) } return nil @@ -310,3 +309,13 @@ func loadSystemSpecFromFile(filename string) (*system.SysSpec, error) { } return spec, nil } + +// isNodeReady returns true if a node is ready; false otherwise. +func isNodeReady(node *v1.Node) bool { + for _, c := range node.Status.Conditions { + if c.Type == v1.NodeReady { + return c.Status == v1.ConditionTrue + } + } + return false +} diff --git a/test/e2e_node/eviction_test.go b/test/e2e_node/eviction_test.go index da8444eb496..abbd22f8458 100644 --- a/test/e2e_node/eviction_test.go +++ b/test/e2e_node/eviction_test.go @@ -29,7 +29,6 @@ import ( "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/fields" - nodeutil "k8s.io/kubernetes/pkg/api/v1/node" kubeletconfig "k8s.io/kubernetes/pkg/kubelet/apis/config" stats "k8s.io/kubernetes/pkg/kubelet/apis/stats/v1alpha1" "k8s.io/kubernetes/pkg/kubelet/eviction" @@ -37,6 +36,7 @@ import ( kubeletmetrics "k8s.io/kubernetes/pkg/kubelet/metrics" kubetypes "k8s.io/kubernetes/pkg/kubelet/types" "k8s.io/kubernetes/test/e2e/framework" + testutils "k8s.io/kubernetes/test/utils" imageutils "k8s.io/kubernetes/test/utils/image" . "github.com/onsi/ginkgo" @@ -682,7 +682,7 @@ func verifyEvictionEvents(f *framework.Framework, testSpecs []podEvictSpec, expe // Returns TRUE if the node has the node condition, FALSE otherwise func hasNodeCondition(f *framework.Framework, expectedNodeCondition v1.NodeConditionType) bool { localNodeStatus := getLocalNode(f).Status - _, actualNodeCondition := nodeutil.GetNodeCondition(&localNodeStatus, expectedNodeCondition) + _, actualNodeCondition := testutils.GetNodeCondition(&localNodeStatus, expectedNodeCondition) Expect(actualNodeCondition).NotTo(BeNil()) return actualNodeCondition.Status == v1.ConditionTrue } diff --git a/test/e2e_node/node_problem_detector_linux.go b/test/e2e_node/node_problem_detector_linux.go index 36a63193c9e..e3119fcd1b9 100644 --- a/test/e2e_node/node_problem_detector_linux.go +++ b/test/e2e_node/node_problem_detector_linux.go @@ -32,9 +32,9 @@ import ( "k8s.io/apimachinery/pkg/util/uuid" clientset "k8s.io/client-go/kubernetes" coreclientset "k8s.io/client-go/kubernetes/typed/core/v1" - nodeutil "k8s.io/kubernetes/pkg/api/v1/node" "k8s.io/kubernetes/pkg/kubelet/util" "k8s.io/kubernetes/test/e2e/framework" + testutils "k8s.io/kubernetes/test/utils" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" @@ -427,7 +427,7 @@ func verifyNodeCondition(n coreclientset.NodeInterface, condition v1.NodeConditi if err != nil { return err } - _, c := nodeutil.GetNodeCondition(&node.Status, condition) + _, c := testutils.GetNodeCondition(&node.Status, condition) if c == nil { return fmt.Errorf("node condition %q not found", condition) } diff --git a/test/utils/BUILD b/test/utils/BUILD index 08f839e6914..d2707e16097 100644 --- a/test/utils/BUILD +++ b/test/utils/BUILD @@ -15,6 +15,7 @@ go_library( "delete_resources.go", "density_utils.go", "deployment.go", + "node.go", "paths.go", "pod_store.go", "replicaset.go", diff --git a/pkg/api/v1/node/util.go b/test/utils/node.go similarity index 73% rename from pkg/api/v1/node/util.go rename to test/utils/node.go index c82ac87e51f..9388251acd0 100644 --- a/pkg/api/v1/node/util.go +++ b/test/utils/node.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors. +Copyright 2018 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. @@ -14,13 +14,9 @@ See the License for the specific language governing permissions and limitations under the License. */ -// TODO: merge with pkg/util/node +package utils -package node - -import ( - "k8s.io/api/core/v1" -) +import "k8s.io/api/core/v1" // GetNodeCondition extracts the provided condition from the given status and returns that. // Returns nil and -1 if the condition is not present, and the index of the located condition. @@ -35,13 +31,3 @@ func GetNodeCondition(status *v1.NodeStatus, conditionType v1.NodeConditionType) } return -1, nil } - -// IsNodeReady returns true if a node is ready; false otherwise. -func IsNodeReady(node *v1.Node) bool { - for _, c := range node.Status.Conditions { - if c.Type == v1.NodeReady { - return c.Status == v1.ConditionTrue - } - } - return false -}