diff --git a/cmd/cloud-controller-manager/app/BUILD b/cmd/cloud-controller-manager/app/BUILD index bf587b2dcd9..e7d4168f7b7 100644 --- a/cmd/cloud-controller-manager/app/BUILD +++ b/cmd/cloud-controller-manager/app/BUILD @@ -12,7 +12,6 @@ go_library( "//cmd/cloud-controller-manager/app/config:go_default_library", "//cmd/cloud-controller-manager/app/options:go_default_library", "//cmd/controller-manager/app:go_default_library", - "//pkg/controller/cloud:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/uuid:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library", @@ -23,6 +22,7 @@ go_library( "//staging/src/k8s.io/client-go/tools/leaderelection/resourcelock:go_default_library", "//staging/src/k8s.io/cloud-provider:go_default_library", "//staging/src/k8s.io/cloud-provider/controllers/node:go_default_library", + "//staging/src/k8s.io/cloud-provider/controllers/nodelifecycle:go_default_library", "//staging/src/k8s.io/cloud-provider/controllers/route:go_default_library", "//staging/src/k8s.io/cloud-provider/controllers/service:go_default_library", "//staging/src/k8s.io/component-base/cli/flag:go_default_library", diff --git a/cmd/cloud-controller-manager/app/core.go b/cmd/cloud-controller-manager/app/core.go index 683095c5577..e7673f94a66 100644 --- a/cmd/cloud-controller-manager/app/core.go +++ b/cmd/cloud-controller-manager/app/core.go @@ -28,11 +28,11 @@ import ( cloudprovider "k8s.io/cloud-provider" cloudnodecontroller "k8s.io/cloud-provider/controllers/node" + cloudnodelifecyclecontroller "k8s.io/cloud-provider/controllers/nodelifecycle" routecontroller "k8s.io/cloud-provider/controllers/route" servicecontroller "k8s.io/cloud-provider/controllers/service" "k8s.io/klog/v2" cloudcontrollerconfig "k8s.io/kubernetes/cmd/cloud-controller-manager/app/config" - cloudcontrollers "k8s.io/kubernetes/pkg/controller/cloud" netutils "k8s.io/utils/net" utilfeature "k8s.io/apiserver/pkg/util/feature" @@ -65,7 +65,7 @@ func startCloudNodeController(ctx *cloudcontrollerconfig.CompletedConfig, cloud func startCloudNodeLifecycleController(ctx *cloudcontrollerconfig.CompletedConfig, cloud cloudprovider.Interface, stopCh <-chan struct{}) (http.Handler, bool, error) { // Start the cloudNodeLifecycleController - cloudNodeLifecycleController, err := cloudcontrollers.NewCloudNodeLifecycleController( + cloudNodeLifecycleController, err := cloudnodelifecyclecontroller.NewCloudNodeLifecycleController( ctx.SharedInformers.Core().V1().Nodes(), // cloud node lifecycle controller uses existing cluster role from node-controller ctx.ClientBuilder.ClientOrDie("node-controller"), diff --git a/cmd/kube-controller-manager/app/BUILD b/cmd/kube-controller-manager/app/BUILD index 3674efc1360..c1527ba41eb 100644 --- a/cmd/kube-controller-manager/app/BUILD +++ b/cmd/kube-controller-manager/app/BUILD @@ -49,7 +49,6 @@ go_library( "//pkg/controller/certificates/rootcacertpublisher:go_default_library", "//pkg/controller/certificates/signer:go_default_library", "//pkg/controller/certificates/signer/config:go_default_library", - "//pkg/controller/cloud:go_default_library", "//pkg/controller/clusterroleaggregation:go_default_library", "//pkg/controller/cronjob:go_default_library", "//pkg/controller/daemon:go_default_library", @@ -135,6 +134,7 @@ go_library( "//staging/src/k8s.io/client-go/util/flowcontrol:go_default_library", "//staging/src/k8s.io/client-go/util/keyutil:go_default_library", "//staging/src/k8s.io/cloud-provider:go_default_library", + "//staging/src/k8s.io/cloud-provider/controllers/nodelifecycle:go_default_library", "//staging/src/k8s.io/cloud-provider/controllers/route:go_default_library", "//staging/src/k8s.io/cloud-provider/controllers/service:go_default_library", "//staging/src/k8s.io/component-base/cli/flag:go_default_library", diff --git a/cmd/kube-controller-manager/app/core.go b/cmd/kube-controller-manager/app/core.go index 35864f08540..0849539ddb9 100644 --- a/cmd/kube-controller-manager/app/core.go +++ b/cmd/kube-controller-manager/app/core.go @@ -38,12 +38,12 @@ import ( clientset "k8s.io/client-go/kubernetes" "k8s.io/client-go/metadata" restclient "k8s.io/client-go/rest" + cloudnodelifecyclecontroller "k8s.io/cloud-provider/controllers/nodelifecycle" routecontroller "k8s.io/cloud-provider/controllers/route" servicecontroller "k8s.io/cloud-provider/controllers/service" "k8s.io/component-base/metrics/prometheus/ratelimiter" csitrans "k8s.io/csi-translation-lib" "k8s.io/kubernetes/pkg/controller" - cloudcontroller "k8s.io/kubernetes/pkg/controller/cloud" endpointcontroller "k8s.io/kubernetes/pkg/controller/endpoint" "k8s.io/kubernetes/pkg/controller/garbagecollector" namespacecontroller "k8s.io/kubernetes/pkg/controller/namespace" @@ -217,7 +217,7 @@ func startNodeLifecycleController(ctx ControllerContext) (http.Handler, bool, er } func startCloudNodeLifecycleController(ctx ControllerContext) (http.Handler, bool, error) { - cloudNodeLifecycleController, err := cloudcontroller.NewCloudNodeLifecycleController( + cloudNodeLifecycleController, err := cloudnodelifecyclecontroller.NewCloudNodeLifecycleController( ctx.InformerFactory.Core().V1().Nodes(), // cloud node lifecycle controller uses existing cluster role from node-controller ctx.ClientBuilder.ClientOrDie("node-controller"), diff --git a/hack/.golint_failures b/hack/.golint_failures index 34dc257aad8..b09e9d37fc9 100644 --- a/hack/.golint_failures +++ b/hack/.golint_failures @@ -50,7 +50,6 @@ pkg/controller/apis/config/v1alpha1 pkg/controller/certificates pkg/controller/certificates/signer pkg/controller/certificates/signer/config/v1alpha1 -pkg/controller/cloud pkg/controller/clusterroleaggregation pkg/controller/daemon pkg/controller/daemon/config/v1alpha1 @@ -424,6 +423,7 @@ staging/src/k8s.io/client-go/util/testing staging/src/k8s.io/client-go/util/workqueue staging/src/k8s.io/cloud-provider staging/src/k8s.io/cloud-provider/controllers/node +staging/src/k8s.io/cloud-provider/controllers/nodelifecycle staging/src/k8s.io/cloud-provider/controllers/route staging/src/k8s.io/code-generator/cmd/client-gen/args staging/src/k8s.io/code-generator/cmd/client-gen/generators/fake diff --git a/pkg/controller/BUILD b/pkg/controller/BUILD index a2fb28bb40d..9077086fe26 100644 --- a/pkg/controller/BUILD +++ b/pkg/controller/BUILD @@ -108,7 +108,6 @@ filegroup( "//pkg/controller/apis/config:all-srcs", "//pkg/controller/bootstrap:all-srcs", "//pkg/controller/certificates:all-srcs", - "//pkg/controller/cloud:all-srcs", "//pkg/controller/clusterroleaggregation:all-srcs", "//pkg/controller/cronjob:all-srcs", "//pkg/controller/daemon:all-srcs", diff --git a/staging/src/k8s.io/cloud-provider/BUILD b/staging/src/k8s.io/cloud-provider/BUILD index 3569ea55184..4533bea8b95 100644 --- a/staging/src/k8s.io/cloud-provider/BUILD +++ b/staging/src/k8s.io/cloud-provider/BUILD @@ -38,6 +38,7 @@ filegroup( ":package-srcs", "//staging/src/k8s.io/cloud-provider/api:all-srcs", "//staging/src/k8s.io/cloud-provider/controllers/node:all-srcs", + "//staging/src/k8s.io/cloud-provider/controllers/nodelifecycle:all-srcs", "//staging/src/k8s.io/cloud-provider/controllers/route:all-srcs", "//staging/src/k8s.io/cloud-provider/controllers/service:all-srcs", "//staging/src/k8s.io/cloud-provider/fake:all-srcs", diff --git a/pkg/controller/cloud/BUILD b/staging/src/k8s.io/cloud-provider/controllers/nodelifecycle/BUILD similarity index 94% rename from pkg/controller/cloud/BUILD rename to staging/src/k8s.io/cloud-provider/controllers/nodelifecycle/BUILD index 28e78388446..129e33da836 100644 --- a/pkg/controller/cloud/BUILD +++ b/staging/src/k8s.io/cloud-provider/controllers/nodelifecycle/BUILD @@ -3,7 +3,8 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") go_library( name = "go_default_library", srcs = ["node_lifecycle_controller.go"], - importpath = "k8s.io/kubernetes/pkg/controller/cloud", + importmap = "k8s.io/kubernetes/vendor/k8s.io/cloud-provider/controllers/nodelifecycle", + importpath = "k8s.io/cloud-provider/controllers/nodelifecycle", visibility = ["//visibility:public"], deps = [ "//staging/src/k8s.io/api/core/v1:go_default_library", diff --git a/pkg/controller/cloud/OWNERS b/staging/src/k8s.io/cloud-provider/controllers/nodelifecycle/OWNERS similarity index 100% rename from pkg/controller/cloud/OWNERS rename to staging/src/k8s.io/cloud-provider/controllers/nodelifecycle/OWNERS diff --git a/pkg/controller/cloud/node_lifecycle_controller.go b/staging/src/k8s.io/cloud-provider/controllers/nodelifecycle/node_lifecycle_controller.go similarity index 90% rename from pkg/controller/cloud/node_lifecycle_controller.go rename to staging/src/k8s.io/cloud-provider/controllers/nodelifecycle/node_lifecycle_controller.go index 9f8c75db5a7..95dbf0b6066 100644 --- a/pkg/controller/cloud/node_lifecycle_controller.go +++ b/staging/src/k8s.io/cloud-provider/controllers/nodelifecycle/node_lifecycle_controller.go @@ -207,3 +207,26 @@ func shutdownInCloudProvider(ctx context.Context, cloud cloudprovider.Interface, return shutdown, err } + +// ensureNodeExistsByProviderID checks if the instance exists by the provider id, +// If provider id in spec is empty it calls instanceId with node name to get provider id +func ensureNodeExistsByProviderID(ctx context.Context, instances cloudprovider.Instances, node *v1.Node) (bool, error) { + providerID := node.Spec.ProviderID + if providerID == "" { + var err error + providerID, err = instances.InstanceID(ctx, types.NodeName(node.Name)) + if err != nil { + if err == cloudprovider.InstanceNotFound { + return false, nil + } + return false, err + } + + if providerID == "" { + klog.Warningf("Cannot find valid providerID for node name %q, assuming non existence", node.Name) + return false, nil + } + } + + return instances.InstanceExistsByProviderID(ctx, providerID) +} diff --git a/pkg/controller/cloud/node_lifecycle_controller_test.go b/staging/src/k8s.io/cloud-provider/controllers/nodelifecycle/node_lifecycle_controller_test.go similarity index 100% rename from pkg/controller/cloud/node_lifecycle_controller_test.go rename to staging/src/k8s.io/cloud-provider/controllers/nodelifecycle/node_lifecycle_controller_test.go diff --git a/staging/src/k8s.io/cloud-provider/go.mod b/staging/src/k8s.io/cloud-provider/go.mod index 985bb3102e6..f9fe79c7fcb 100644 --- a/staging/src/k8s.io/cloud-provider/go.mod +++ b/staging/src/k8s.io/cloud-provider/go.mod @@ -5,6 +5,8 @@ module k8s.io/cloud-provider go 1.13 require ( + github.com/google/go-cmp v0.4.0 + github.com/stretchr/testify v1.4.0 k8s.io/api v0.0.0 k8s.io/apimachinery v0.0.0 k8s.io/client-go v0.0.0