From 766ee8764e9d7cbfa75456a2f891d27538800f62 Mon Sep 17 00:00:00 2001 From: elmiko Date: Fri, 26 Sep 2025 15:39:18 -0400 Subject: [PATCH 1/5] refactor core.AutoscalerOptions in a new package This change helps to prevent circular dependencies between the core and builder packages as we start to pass the AutoscalerOptions to the cloud provider builder functions. --- cluster-autoscaler/core/autoscaler.go | 37 ++---------- cluster-autoscaler/core/options/autoscaler.go | 59 +++++++++++++++++++ 2 files changed, 63 insertions(+), 33 deletions(-) create mode 100644 cluster-autoscaler/core/options/autoscaler.go diff --git a/cluster-autoscaler/core/autoscaler.go b/cluster-autoscaler/core/autoscaler.go index 1fc3ff4e1f1f..3160b22c444b 100644 --- a/cluster-autoscaler/core/autoscaler.go +++ b/cluster-autoscaler/core/autoscaler.go @@ -20,53 +20,24 @@ import ( "strings" "time" - "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" cloudBuilder "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/builder" - "k8s.io/autoscaler/cluster-autoscaler/config" "k8s.io/autoscaler/cluster-autoscaler/context" + "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/autoscaler/cluster-autoscaler/core/scaledown/pdb" - "k8s.io/autoscaler/cluster-autoscaler/core/scaleup" - "k8s.io/autoscaler/cluster-autoscaler/debuggingsnapshot" "k8s.io/autoscaler/cluster-autoscaler/estimator" - "k8s.io/autoscaler/cluster-autoscaler/expander" "k8s.io/autoscaler/cluster-autoscaler/expander/factory" "k8s.io/autoscaler/cluster-autoscaler/observers/loopstart" ca_processors "k8s.io/autoscaler/cluster-autoscaler/processors" - "k8s.io/autoscaler/cluster-autoscaler/simulator/clustersnapshot" "k8s.io/autoscaler/cluster-autoscaler/simulator/clustersnapshot/predicate" "k8s.io/autoscaler/cluster-autoscaler/simulator/clustersnapshot/store" "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability/rules" draprovider "k8s.io/autoscaler/cluster-autoscaler/simulator/dynamicresources/provider" "k8s.io/autoscaler/cluster-autoscaler/simulator/framework" - "k8s.io/autoscaler/cluster-autoscaler/simulator/options" "k8s.io/autoscaler/cluster-autoscaler/utils/backoff" "k8s.io/autoscaler/cluster-autoscaler/utils/errors" "k8s.io/client-go/informers" - kube_client "k8s.io/client-go/kubernetes" ) -// AutoscalerOptions is the whole set of options for configuring an autoscaler -type AutoscalerOptions struct { - config.AutoscalingOptions - KubeClient kube_client.Interface - InformerFactory informers.SharedInformerFactory - AutoscalingKubeClients *context.AutoscalingKubeClients - CloudProvider cloudprovider.CloudProvider - FrameworkHandle *framework.Handle - ClusterSnapshot clustersnapshot.ClusterSnapshot - ExpanderStrategy expander.Strategy - EstimatorBuilder estimator.EstimatorBuilder - Processors *ca_processors.AutoscalingProcessors - LoopStartNotifier *loopstart.ObserversList - Backoff backoff.Backoff - DebuggingSnapshotter debuggingsnapshot.DebuggingSnapshotter - RemainingPdbTracker pdb.RemainingPdbTracker - ScaleUpOrchestrator scaleup.Orchestrator - DeleteOptions options.NodeDeleteOptions - DrainabilityRules rules.Rules - DraProvider *draprovider.Provider -} - // Autoscaler is the main component of CA which scales up/down node groups according to its configuration // The configuration can be injected at the creation of an autoscaler type Autoscaler interface { @@ -83,7 +54,7 @@ type Autoscaler interface { } // NewAutoscaler creates an autoscaler of an appropriate type according to the parameters -func NewAutoscaler(opts AutoscalerOptions, informerFactory informers.SharedInformerFactory) (Autoscaler, errors.AutoscalerError) { +func NewAutoscaler(opts options.AutoscalerOptions, informerFactory informers.SharedInformerFactory) (Autoscaler, errors.AutoscalerError) { err := initializeDefaultOptions(&opts, informerFactory) if err != nil { return nil, errors.ToAutoscalerError(errors.InternalError, err) @@ -109,7 +80,7 @@ func NewAutoscaler(opts AutoscalerOptions, informerFactory informers.SharedInfor } // Initialize default options if not provided. -func initializeDefaultOptions(opts *AutoscalerOptions, informerFactory informers.SharedInformerFactory) error { +func initializeDefaultOptions(opts *options.AutoscalerOptions, informerFactory informers.SharedInformerFactory) error { if opts.Processors == nil { opts.Processors = ca_processors.DefaultProcessors(opts.AutoscalingOptions) } @@ -133,7 +104,7 @@ func initializeDefaultOptions(opts *AutoscalerOptions, informerFactory informers opts.RemainingPdbTracker = pdb.NewBasicRemainingPdbTracker() } if opts.CloudProvider == nil { - opts.CloudProvider = cloudBuilder.NewCloudProvider(opts.AutoscalingOptions, informerFactory) + opts.CloudProvider = cloudBuilder.NewCloudProvider(opts, informerFactory) } if opts.ExpanderStrategy == nil { expanderFactory := factory.NewFactory() diff --git a/cluster-autoscaler/core/options/autoscaler.go b/cluster-autoscaler/core/options/autoscaler.go new file mode 100644 index 000000000000..50a45370e847 --- /dev/null +++ b/cluster-autoscaler/core/options/autoscaler.go @@ -0,0 +1,59 @@ +/* +Copyright 2025 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. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ +package options + +import ( + "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" + "k8s.io/autoscaler/cluster-autoscaler/config" + "k8s.io/autoscaler/cluster-autoscaler/context" + "k8s.io/autoscaler/cluster-autoscaler/core/scaledown/pdb" + "k8s.io/autoscaler/cluster-autoscaler/core/scaleup" + "k8s.io/autoscaler/cluster-autoscaler/debuggingsnapshot" + "k8s.io/autoscaler/cluster-autoscaler/estimator" + "k8s.io/autoscaler/cluster-autoscaler/expander" + "k8s.io/autoscaler/cluster-autoscaler/observers/loopstart" + ca_processors "k8s.io/autoscaler/cluster-autoscaler/processors" + "k8s.io/autoscaler/cluster-autoscaler/simulator/clustersnapshot" + "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability/rules" + draprovider "k8s.io/autoscaler/cluster-autoscaler/simulator/dynamicresources/provider" + "k8s.io/autoscaler/cluster-autoscaler/simulator/framework" + "k8s.io/autoscaler/cluster-autoscaler/simulator/options" + "k8s.io/autoscaler/cluster-autoscaler/utils/backoff" + "k8s.io/client-go/informers" + kube_client "k8s.io/client-go/kubernetes" +) + +// AutoscalerOptions is the whole set of options for configuring an autoscaler +type AutoscalerOptions struct { + config.AutoscalingOptions + KubeClient kube_client.Interface + InformerFactory informers.SharedInformerFactory + AutoscalingKubeClients *context.AutoscalingKubeClients + CloudProvider cloudprovider.CloudProvider + FrameworkHandle *framework.Handle + ClusterSnapshot clustersnapshot.ClusterSnapshot + ExpanderStrategy expander.Strategy + EstimatorBuilder estimator.EstimatorBuilder + Processors *ca_processors.AutoscalingProcessors + LoopStartNotifier *loopstart.ObserversList + Backoff backoff.Backoff + DebuggingSnapshotter debuggingsnapshot.DebuggingSnapshotter + RemainingPdbTracker pdb.RemainingPdbTracker + ScaleUpOrchestrator scaleup.Orchestrator + DeleteOptions options.NodeDeleteOptions + DrainabilityRules rules.Rules + DraProvider *draprovider.Provider +} From f59084ec4bd5a566a8b25dc5a860fdeb79c34326 Mon Sep 17 00:00:00 2001 From: elmiko Date: Fri, 26 Sep 2025 16:29:29 -0400 Subject: [PATCH 2/5] refactor NewCloudProvider to accept AutoscalerOptions this changes the options input to the cloud provider builder function so that the full autoscaler options are passed. This is being proposed so that cloud providers will have new options for injecting behavior into the core parts of the autoscaler. --- .../alicloud/alicloud_cloud_provider.go | 4 ++-- .../cloudprovider/aws/aws_cloud_provider.go | 3 ++- .../cloudprovider/aws/aws_cloud_provider_test.go | 4 ++-- .../cloudprovider/azure/azure_cloud_provider.go | 4 ++-- .../baiducloud/baiducloud_cloud_provider.go | 3 ++- .../bizflycloud/bizflycloud_cloud_provider.go | 4 ++-- .../brightbox/brightbox_cloud_provider.go | 4 ++-- .../cloudprovider/builder/builder_all.go | 4 ++-- .../builder/cloud_provider_builder.go | 6 +++--- .../cherryservers/cherry_cloud_provider.go | 6 +++--- .../cloudprovider/civo/civo_cloud_provider.go | 4 ++-- .../cloudstack/cloudstack_cloud_provider.go | 5 +++-- .../clusterapi/clusterapi_provider.go | 4 ++-- .../cloudprovider/coreweave/coreweave_provider.go | 7 ++++--- .../digitalocean/digitalocean_cloud_provider.go | 4 ++-- .../cloudprovider/equinixmetal/cloud_provider.go | 6 +++--- .../exoscale/exoscale_cloud_provider.go | 4 ++-- .../externalgrpc/externalgrpc_cloud_provider.go | 4 ++-- .../cloudprovider/gce/gce_cloud_provider.go | 3 ++- .../hetzner/hetzner_cloud_provider.go | 4 ++-- .../huaweicloud/huaweicloud_cloud_provider.go | 5 +++-- .../ionoscloud/ionoscloud_cloud_provider.go | 3 ++- .../kamatera/kamatera_cloud_provider.go | 5 +++-- .../cloudprovider/kwok/kwok_provider.go | 6 +++--- .../cloudprovider/linode/linode_cloud_provider.go | 4 ++-- .../cloudprovider/magnum/magnum_cloud_provider.go | 6 +++--- .../oci/instancepools/oci_cloud_provider.go | 7 ++++--- .../cloudprovider/ovhcloud/ovh_cloud_provider.go | 5 +++-- .../cloudprovider/rancher/rancher_provider.go | 4 ++-- .../scaleway/scaleway_cloud_provider.go | 4 ++-- .../tencentcloud/tencentcloud_cloud_provider.go | 4 ++-- .../cloudprovider/utho/utho_cloud_provider.go | 4 ++-- .../volcengine/volcengine_cloud_provider.go | 4 ++-- .../cloudprovider/vultr/vultr_cloud_provider.go | 4 ++-- cluster-autoscaler/main.go | 3 ++- .../scale_down_candidates_processor.go | 14 +++++++------- 36 files changed, 90 insertions(+), 79 deletions(-) diff --git a/cluster-autoscaler/cloudprovider/alicloud/alicloud_cloud_provider.go b/cluster-autoscaler/cloudprovider/alicloud/alicloud_cloud_provider.go index c8513c7bf964..95b69d4ba67d 100644 --- a/cluster-autoscaler/cloudprovider/alicloud/alicloud_cloud_provider.go +++ b/cluster-autoscaler/cloudprovider/alicloud/alicloud_cloud_provider.go @@ -24,8 +24,8 @@ import ( apiv1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" - "k8s.io/autoscaler/cluster-autoscaler/config" "k8s.io/autoscaler/cluster-autoscaler/config/dynamic" + "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/autoscaler/cluster-autoscaler/utils/errors" "k8s.io/autoscaler/cluster-autoscaler/utils/gpu" klog "k8s.io/klog/v2" @@ -220,7 +220,7 @@ func buildAsg(manager *AliCloudManager, minSize int, maxSize int, id string, reg } // BuildAlicloud returns alicloud provider -func BuildAlicloud(opts config.AutoscalingOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { +func BuildAlicloud(opts *options.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { var aliManager *AliCloudManager var aliError error if opts.CloudConfig != "" { diff --git a/cluster-autoscaler/cloudprovider/aws/aws_cloud_provider.go b/cluster-autoscaler/cloudprovider/aws/aws_cloud_provider.go index 3117b1c73654..766e3412a144 100644 --- a/cluster-autoscaler/cloudprovider/aws/aws_cloud_provider.go +++ b/cluster-autoscaler/cloudprovider/aws/aws_cloud_provider.go @@ -27,6 +27,7 @@ import ( "k8s.io/apimachinery/pkg/api/resource" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" "k8s.io/autoscaler/cluster-autoscaler/config" + "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/autoscaler/cluster-autoscaler/simulator/framework" "k8s.io/autoscaler/cluster-autoscaler/utils/errors" "k8s.io/autoscaler/cluster-autoscaler/utils/gpu" @@ -415,7 +416,7 @@ func (ng *AwsNodeGroup) TemplateNodeInfo() (*framework.NodeInfo, error) { } // BuildAWS builds AWS cloud provider, manager etc. -func BuildAWS(opts config.AutoscalingOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { +func BuildAWS(opts *options.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { var cfg io.ReadCloser if opts.CloudConfig != "" { var err error diff --git a/cluster-autoscaler/cloudprovider/aws/aws_cloud_provider_test.go b/cluster-autoscaler/cloudprovider/aws/aws_cloud_provider_test.go index 1910f8752fd5..adfb39d0a2c6 100644 --- a/cluster-autoscaler/cloudprovider/aws/aws_cloud_provider_test.go +++ b/cluster-autoscaler/cloudprovider/aws/aws_cloud_provider_test.go @@ -27,7 +27,7 @@ import ( "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/aws/aws-sdk-go/aws" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/aws/aws-sdk-go/service/autoscaling" - "k8s.io/autoscaler/cluster-autoscaler/config" + "k8s.io/autoscaler/cluster-autoscaler/core/options" ) var testAwsManager = &AwsManager{ @@ -133,7 +133,7 @@ func TestInstanceTypeFallback(t *testing.T) { map[string]int64{cloudprovider.ResourceNameCores: 10, cloudprovider.ResourceNameMemory: 100000000}) do := cloudprovider.NodeGroupDiscoveryOptions{} - opts := config.AutoscalingOptions{} + opts := &options.AutoscalerOptions{} t.Setenv("AWS_REGION", "non-existent-region") diff --git a/cluster-autoscaler/cloudprovider/azure/azure_cloud_provider.go b/cluster-autoscaler/cloudprovider/azure/azure_cloud_provider.go index f99f2dae615d..aab794e96e06 100644 --- a/cluster-autoscaler/cloudprovider/azure/azure_cloud_provider.go +++ b/cluster-autoscaler/cloudprovider/azure/azure_cloud_provider.go @@ -25,7 +25,7 @@ import ( apiv1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" - "k8s.io/autoscaler/cluster-autoscaler/config" + "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/autoscaler/cluster-autoscaler/utils/errors" "k8s.io/autoscaler/cluster-autoscaler/utils/gpu" klog "k8s.io/klog/v2" @@ -190,7 +190,7 @@ func (m *azureRef) String() string { } // BuildAzure builds Azure cloud provider, manager etc. -func BuildAzure(opts config.AutoscalingOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { +func BuildAzure(opts *options.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { var config io.ReadCloser if opts.CloudConfig != "" { klog.Infof("Creating Azure Manager using cloud-config file: %v", opts.CloudConfig) diff --git a/cluster-autoscaler/cloudprovider/baiducloud/baiducloud_cloud_provider.go b/cluster-autoscaler/cloudprovider/baiducloud/baiducloud_cloud_provider.go index 1698eb23cbde..e6000677a223 100644 --- a/cluster-autoscaler/cloudprovider/baiducloud/baiducloud_cloud_provider.go +++ b/cluster-autoscaler/cloudprovider/baiducloud/baiducloud_cloud_provider.go @@ -27,6 +27,7 @@ import ( "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" "k8s.io/autoscaler/cluster-autoscaler/config" "k8s.io/autoscaler/cluster-autoscaler/config/dynamic" + "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/autoscaler/cluster-autoscaler/simulator/framework" "k8s.io/autoscaler/cluster-autoscaler/utils/errors" "k8s.io/autoscaler/cluster-autoscaler/utils/gpu" @@ -56,7 +57,7 @@ type baiducloudCloudProvider struct { } // BuildBaiducloud builds baiducloud cloud provider, manager etc. -func BuildBaiducloud(opts config.AutoscalingOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { +func BuildBaiducloud(opts *options.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { var cfg io.ReadCloser if opts.CloudConfig != "" { var err error diff --git a/cluster-autoscaler/cloudprovider/bizflycloud/bizflycloud_cloud_provider.go b/cluster-autoscaler/cloudprovider/bizflycloud/bizflycloud_cloud_provider.go index 4b9f5db16e9f..4a5fa7919569 100644 --- a/cluster-autoscaler/cloudprovider/bizflycloud/bizflycloud_cloud_provider.go +++ b/cluster-autoscaler/cloudprovider/bizflycloud/bizflycloud_cloud_provider.go @@ -25,7 +25,7 @@ import ( apiv1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" - "k8s.io/autoscaler/cluster-autoscaler/config" + "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/autoscaler/cluster-autoscaler/utils/errors" "k8s.io/autoscaler/cluster-autoscaler/utils/gpu" klog "k8s.io/klog/v2" @@ -174,7 +174,7 @@ func (d *bizflycloudCloudProvider) Refresh() error { // BuildBizflyCloud builds the Bizflycloud cloud provider. func BuildBizflyCloud( - opts config.AutoscalingOptions, + opts *options.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, ) cloudprovider.CloudProvider { diff --git a/cluster-autoscaler/cloudprovider/brightbox/brightbox_cloud_provider.go b/cluster-autoscaler/cloudprovider/brightbox/brightbox_cloud_provider.go index f2806ece76db..c0a09800df7f 100644 --- a/cluster-autoscaler/cloudprovider/brightbox/brightbox_cloud_provider.go +++ b/cluster-autoscaler/cloudprovider/brightbox/brightbox_cloud_provider.go @@ -28,7 +28,7 @@ import ( brightbox "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/brightbox/gobrightbox" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/brightbox/gobrightbox/status" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/brightbox/k8ssdk" - "k8s.io/autoscaler/cluster-autoscaler/config" + "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/autoscaler/cluster-autoscaler/utils/errors" "k8s.io/autoscaler/cluster-autoscaler/utils/gpu" klog "k8s.io/klog/v2" @@ -221,7 +221,7 @@ func (b *brightboxCloudProvider) Cleanup() error { // BuildBrightbox builds the Brightbox provider func BuildBrightbox( - opts config.AutoscalingOptions, + opts *options.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, ) cloudprovider.CloudProvider { diff --git a/cluster-autoscaler/cloudprovider/builder/builder_all.go b/cluster-autoscaler/cloudprovider/builder/builder_all.go index eb961fd3c3a7..9d353282164a 100644 --- a/cluster-autoscaler/cloudprovider/builder/builder_all.go +++ b/cluster-autoscaler/cloudprovider/builder/builder_all.go @@ -52,7 +52,7 @@ import ( "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/utho" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/volcengine" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/vultr" - "k8s.io/autoscaler/cluster-autoscaler/config" + "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/client-go/informers" ) @@ -94,7 +94,7 @@ var AvailableCloudProviders = []string{ // DefaultCloudProvider is GCE. const DefaultCloudProvider = cloudprovider.GceProviderName -func buildCloudProvider(opts config.AutoscalingOptions, +func buildCloudProvider(opts *options.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, informerFactory informers.SharedInformerFactory) cloudprovider.CloudProvider { diff --git a/cluster-autoscaler/cloudprovider/builder/cloud_provider_builder.go b/cluster-autoscaler/cloudprovider/builder/cloud_provider_builder.go index af9b07285de5..1c23501fbdc5 100644 --- a/cluster-autoscaler/cloudprovider/builder/cloud_provider_builder.go +++ b/cluster-autoscaler/cloudprovider/builder/cloud_provider_builder.go @@ -18,15 +18,15 @@ package builder import ( "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" - "k8s.io/autoscaler/cluster-autoscaler/config" "k8s.io/autoscaler/cluster-autoscaler/context" + "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/client-go/informers" klog "k8s.io/klog/v2" ) // NewCloudProvider builds a cloud provider from provided parameters. -func NewCloudProvider(opts config.AutoscalingOptions, informerFactory informers.SharedInformerFactory) cloudprovider.CloudProvider { +func NewCloudProvider(opts *options.AutoscalerOptions, informerFactory informers.SharedInformerFactory) cloudprovider.CloudProvider { klog.V(1).Infof("Building %s cloud provider.", opts.CloudProviderName) do := cloudprovider.NodeGroupDiscoveryOptions{ @@ -34,7 +34,7 @@ func NewCloudProvider(opts config.AutoscalingOptions, informerFactory informers. NodeGroupAutoDiscoverySpecs: opts.NodeGroupAutoDiscovery, } - rl := context.NewResourceLimiterFromAutoscalingOptions(opts) + rl := context.NewResourceLimiterFromAutoscalingOptions(opts.AutoscalingOptions) if opts.CloudProviderName == "" { // Ideally this would be an error, but several unit tests of the diff --git a/cluster-autoscaler/cloudprovider/cherryservers/cherry_cloud_provider.go b/cluster-autoscaler/cloudprovider/cherryservers/cherry_cloud_provider.go index 0407f1971e8e..9e4f25475c92 100644 --- a/cluster-autoscaler/cloudprovider/cherryservers/cherry_cloud_provider.go +++ b/cluster-autoscaler/cloudprovider/cherryservers/cherry_cloud_provider.go @@ -24,8 +24,8 @@ import ( apiv1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" - "k8s.io/autoscaler/cluster-autoscaler/config" "k8s.io/autoscaler/cluster-autoscaler/config/dynamic" + "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/autoscaler/cluster-autoscaler/utils/errors" "k8s.io/autoscaler/cluster-autoscaler/utils/gpu" klog "k8s.io/klog/v2" @@ -174,7 +174,7 @@ func (ccp *cherryCloudProvider) Cleanup() error { // // The cherryManager is created here, and the node groups are created // based on the specs provided via the command line parameters. -func BuildCherry(opts config.AutoscalingOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { +func BuildCherry(opts *options.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { var config io.ReadCloser if opts.CloudConfig != "" { @@ -186,7 +186,7 @@ func BuildCherry(opts config.AutoscalingOptions, do cloudprovider.NodeGroupDisco defer config.Close() } - manager, err := createCherryManager(config, do, opts) + manager, err := createCherryManager(config, do, opts.AutoscalingOptions) if err != nil { klog.Fatalf("Failed to create cherry manager: %v", err) } diff --git a/cluster-autoscaler/cloudprovider/civo/civo_cloud_provider.go b/cluster-autoscaler/cloudprovider/civo/civo_cloud_provider.go index c5b69be57d1c..477c253284b9 100644 --- a/cluster-autoscaler/cloudprovider/civo/civo_cloud_provider.go +++ b/cluster-autoscaler/cloudprovider/civo/civo_cloud_provider.go @@ -25,7 +25,7 @@ import ( apiv1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" - "k8s.io/autoscaler/cluster-autoscaler/config" + "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/autoscaler/cluster-autoscaler/utils/errors" "k8s.io/autoscaler/cluster-autoscaler/utils/gpu" "k8s.io/klog/v2" @@ -169,7 +169,7 @@ func (d *civoCloudProvider) Refresh() error { // BuildCivo builds the Civo cloud provider. func BuildCivo( - opts config.AutoscalingOptions, + opts *options.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, ) cloudprovider.CloudProvider { diff --git a/cluster-autoscaler/cloudprovider/cloudstack/cloudstack_cloud_provider.go b/cluster-autoscaler/cloudprovider/cloudstack/cloudstack_cloud_provider.go index cbc2996155d0..33dcec493823 100644 --- a/cluster-autoscaler/cloudprovider/cloudstack/cloudstack_cloud_provider.go +++ b/cluster-autoscaler/cloudprovider/cloudstack/cloudstack_cloud_provider.go @@ -24,6 +24,7 @@ import ( "k8s.io/apimachinery/pkg/api/resource" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" "k8s.io/autoscaler/cluster-autoscaler/config" + "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/autoscaler/cluster-autoscaler/utils/errors" "k8s.io/autoscaler/cluster-autoscaler/utils/gpu" @@ -149,9 +150,9 @@ func createClusterConfig(opts config.AutoscalingOptions) (*clusterConfig, error) } // BuildCloudStack builds CloudProvider implementation for CloudStack -func BuildCloudStack(opts config.AutoscalingOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { +func BuildCloudStack(opts *options.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { - config, err := createClusterConfig(opts) + config, err := createClusterConfig(opts.AutoscalingOptions) if err != nil { klog.Fatal(err) } diff --git a/cluster-autoscaler/cloudprovider/clusterapi/clusterapi_provider.go b/cluster-autoscaler/cloudprovider/clusterapi/clusterapi_provider.go index 94a322e5962f..698ce8d2f04c 100644 --- a/cluster-autoscaler/cloudprovider/clusterapi/clusterapi_provider.go +++ b/cluster-autoscaler/cloudprovider/clusterapi/clusterapi_provider.go @@ -33,7 +33,7 @@ import ( klog "k8s.io/klog/v2" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" - "k8s.io/autoscaler/cluster-autoscaler/config" + "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/autoscaler/cluster-autoscaler/utils/errors" "k8s.io/autoscaler/cluster-autoscaler/utils/gpu" ) @@ -153,7 +153,7 @@ func newProvider( } // BuildClusterAPI builds CloudProvider implementation for machine api. -func BuildClusterAPI(opts config.AutoscalingOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { +func BuildClusterAPI(opts *options.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { managementKubeconfig := opts.CloudConfig if managementKubeconfig == "" && !opts.ClusterAPICloudConfigAuthoritative { managementKubeconfig = opts.KubeClientOpts.KubeConfigPath diff --git a/cluster-autoscaler/cloudprovider/coreweave/coreweave_provider.go b/cluster-autoscaler/cloudprovider/coreweave/coreweave_provider.go index 84dadf018873..610011783306 100644 --- a/cluster-autoscaler/cloudprovider/coreweave/coreweave_provider.go +++ b/cluster-autoscaler/cloudprovider/coreweave/coreweave_provider.go @@ -23,6 +23,7 @@ import ( "k8s.io/apimachinery/pkg/api/resource" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" "k8s.io/autoscaler/cluster-autoscaler/config" + "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/autoscaler/cluster-autoscaler/utils/errors" kube_util "k8s.io/autoscaler/cluster-autoscaler/utils/kubernetes" "k8s.io/klog/v2" @@ -182,7 +183,7 @@ func (c *CoreWeaveCloudProvider) Refresh() error { } // BuildCoreWeave builds the CoreWeave cloud provider with the given options and returns it. -func BuildCoreWeave(opts config.AutoscalingOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { - klog.V(4).Infof("Building CoreWeave cloud provider with options: %+v", opts) - return NewCoreWeaveCloudProvider(rl, opts) +func BuildCoreWeave(opts *options.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { + klog.V(4).Infof("Building CoreWeave cloud provider with options: %+v", opts.AutoscalingOptions) + return NewCoreWeaveCloudProvider(rl, opts.AutoscalingOptions) } diff --git a/cluster-autoscaler/cloudprovider/digitalocean/digitalocean_cloud_provider.go b/cluster-autoscaler/cloudprovider/digitalocean/digitalocean_cloud_provider.go index b9e4941dffe6..3c467ff363e1 100644 --- a/cluster-autoscaler/cloudprovider/digitalocean/digitalocean_cloud_provider.go +++ b/cluster-autoscaler/cloudprovider/digitalocean/digitalocean_cloud_provider.go @@ -25,7 +25,7 @@ import ( apiv1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" - "k8s.io/autoscaler/cluster-autoscaler/config" + "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/autoscaler/cluster-autoscaler/utils/errors" "k8s.io/autoscaler/cluster-autoscaler/utils/gpu" "k8s.io/klog/v2" @@ -171,7 +171,7 @@ func (d *digitaloceanCloudProvider) Refresh() error { // BuildDigitalOcean builds the DigitalOcean cloud provider. func BuildDigitalOcean( - opts config.AutoscalingOptions, + opts *options.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, ) cloudprovider.CloudProvider { diff --git a/cluster-autoscaler/cloudprovider/equinixmetal/cloud_provider.go b/cluster-autoscaler/cloudprovider/equinixmetal/cloud_provider.go index fd1ec89be920..cd3b3660ad36 100644 --- a/cluster-autoscaler/cloudprovider/equinixmetal/cloud_provider.go +++ b/cluster-autoscaler/cloudprovider/equinixmetal/cloud_provider.go @@ -28,8 +28,8 @@ import ( klog "k8s.io/klog/v2" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" - "k8s.io/autoscaler/cluster-autoscaler/config" "k8s.io/autoscaler/cluster-autoscaler/config/dynamic" + "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/autoscaler/cluster-autoscaler/utils/errors" "k8s.io/autoscaler/cluster-autoscaler/utils/gpu" ) @@ -180,7 +180,7 @@ func (pcp *equinixMetalCloudProvider) Cleanup() error { // // The equinixMetalManager is created here, and the node groups are created // based on the specs provided via the command line parameters. -func BuildCloudProvider(opts config.AutoscalingOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { +func BuildCloudProvider(opts *options.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { var config io.ReadCloser if opts.CloudConfig != "" { @@ -192,7 +192,7 @@ func BuildCloudProvider(opts config.AutoscalingOptions, do cloudprovider.NodeGro defer config.Close() } - manager, err := createEquinixMetalManager(config, do, opts) + manager, err := createEquinixMetalManager(config, do, opts.AutoscalingOptions) if err != nil { klog.Fatalf("Failed to create equinix metal manager: %v", err) } diff --git a/cluster-autoscaler/cloudprovider/exoscale/exoscale_cloud_provider.go b/cluster-autoscaler/cloudprovider/exoscale/exoscale_cloud_provider.go index 067340e19ad9..f22ad36cb5e0 100644 --- a/cluster-autoscaler/cloudprovider/exoscale/exoscale_cloud_provider.go +++ b/cluster-autoscaler/cloudprovider/exoscale/exoscale_cloud_provider.go @@ -23,8 +23,8 @@ import ( "k8s.io/apimachinery/pkg/api/resource" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" egoscale "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/exoscale/internal/github.com/exoscale/egoscale/v2" - "k8s.io/autoscaler/cluster-autoscaler/config" "k8s.io/autoscaler/cluster-autoscaler/config/dynamic" + "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/autoscaler/cluster-autoscaler/utils/errors" "k8s.io/autoscaler/cluster-autoscaler/utils/gpu" ) @@ -225,7 +225,7 @@ func (e *exoscaleCloudProvider) Refresh() error { } // BuildExoscale builds the Exoscale cloud provider. -func BuildExoscale(_ config.AutoscalingOptions, discoveryOpts cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { +func BuildExoscale(_ *options.AutoscalerOptions, discoveryOpts cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { manager, err := newManager(discoveryOpts) if err != nil { fatalf("failed to initialize manager: %v", err) diff --git a/cluster-autoscaler/cloudprovider/externalgrpc/externalgrpc_cloud_provider.go b/cluster-autoscaler/cloudprovider/externalgrpc/externalgrpc_cloud_provider.go index 2779f229e3d3..ce870a921e2f 100644 --- a/cluster-autoscaler/cloudprovider/externalgrpc/externalgrpc_cloud_provider.go +++ b/cluster-autoscaler/cloudprovider/externalgrpc/externalgrpc_cloud_provider.go @@ -35,7 +35,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/externalgrpc/protos" - "k8s.io/autoscaler/cluster-autoscaler/config" + "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/autoscaler/cluster-autoscaler/utils/errors" "k8s.io/autoscaler/cluster-autoscaler/utils/gpu" klog "k8s.io/klog/v2" @@ -318,7 +318,7 @@ func (e *externalGrpcCloudProvider) Refresh() error { // BuildExternalGrpc builds the externalgrpc cloud provider. func BuildExternalGrpc( - opts config.AutoscalingOptions, + opts *options.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, ) cloudprovider.CloudProvider { diff --git a/cluster-autoscaler/cloudprovider/gce/gce_cloud_provider.go b/cluster-autoscaler/cloudprovider/gce/gce_cloud_provider.go index 8a8632ad0bb7..18a7b4908e55 100644 --- a/cluster-autoscaler/cloudprovider/gce/gce_cloud_provider.go +++ b/cluster-autoscaler/cloudprovider/gce/gce_cloud_provider.go @@ -26,6 +26,7 @@ import ( "k8s.io/apimachinery/pkg/api/resource" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" "k8s.io/autoscaler/cluster-autoscaler/config" + "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/autoscaler/cluster-autoscaler/simulator/framework" "k8s.io/autoscaler/cluster-autoscaler/utils/errors" "k8s.io/autoscaler/cluster-autoscaler/utils/gpu" @@ -387,7 +388,7 @@ func (mig *gceMig) TemplateNodeInfo() (*framework.NodeInfo, error) { } // BuildGCE builds GCE cloud provider, manager etc. -func BuildGCE(opts config.AutoscalingOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { +func BuildGCE(opts *options.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { var config io.ReadCloser if opts.CloudConfig != "" { var err error diff --git a/cluster-autoscaler/cloudprovider/hetzner/hetzner_cloud_provider.go b/cluster-autoscaler/cloudprovider/hetzner/hetzner_cloud_provider.go index 07e73cfd3c6e..9d3a21f092ba 100644 --- a/cluster-autoscaler/cloudprovider/hetzner/hetzner_cloud_provider.go +++ b/cluster-autoscaler/cloudprovider/hetzner/hetzner_cloud_provider.go @@ -30,7 +30,7 @@ import ( "k8s.io/apimachinery/pkg/api/resource" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/hetzner/hcloud-go/hcloud" - "k8s.io/autoscaler/cluster-autoscaler/config" + "k8s.io/autoscaler/cluster-autoscaler/core/options" autoscalerErrors "k8s.io/autoscaler/cluster-autoscaler/utils/errors" "k8s.io/autoscaler/cluster-autoscaler/utils/gpu" "k8s.io/klog/v2" @@ -183,7 +183,7 @@ func (d *HetznerCloudProvider) Refresh() error { } // BuildHetzner builds the Hetzner cloud provider. -func BuildHetzner(_ config.AutoscalingOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { +func BuildHetzner(_ *options.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { manager, err := newManager() if err != nil { klog.Fatalf("Failed to create Hetzner manager: %v", err) diff --git a/cluster-autoscaler/cloudprovider/huaweicloud/huaweicloud_cloud_provider.go b/cluster-autoscaler/cloudprovider/huaweicloud/huaweicloud_cloud_provider.go index d58dae40763f..5836137a1f2f 100644 --- a/cluster-autoscaler/cloudprovider/huaweicloud/huaweicloud_cloud_provider.go +++ b/cluster-autoscaler/cloudprovider/huaweicloud/huaweicloud_cloud_provider.go @@ -25,6 +25,7 @@ import ( "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" "k8s.io/autoscaler/cluster-autoscaler/config" "k8s.io/autoscaler/cluster-autoscaler/config/dynamic" + "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/autoscaler/cluster-autoscaler/utils/errors" "k8s.io/autoscaler/cluster-autoscaler/utils/gpu" klog "k8s.io/klog/v2" @@ -212,12 +213,12 @@ func (hcp *huaweicloudCloudProvider) addAsg(asg *AutoScalingGroup) { } // BuildHuaweiCloud is called by the autoscaler/cluster-autoscaler/builder to build a huaweicloud cloud provider. -func BuildHuaweiCloud(opts config.AutoscalingOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { +func BuildHuaweiCloud(opts *options.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { if len(opts.CloudConfig) == 0 { klog.Fatalf("cloud config is missing.") } - return newCloudProvider(opts, do, rl) + return newCloudProvider(opts.AutoscalingOptions, do, rl) } func buildAsgFromSpec(specStr string, asgs []AutoScalingGroup, manager CloudServiceManager) (*AutoScalingGroup, error) { diff --git a/cluster-autoscaler/cloudprovider/ionoscloud/ionoscloud_cloud_provider.go b/cluster-autoscaler/cloudprovider/ionoscloud/ionoscloud_cloud_provider.go index 7669cba28b09..c60e232e6f20 100644 --- a/cluster-autoscaler/cloudprovider/ionoscloud/ionoscloud_cloud_provider.go +++ b/cluster-autoscaler/cloudprovider/ionoscloud/ionoscloud_cloud_provider.go @@ -24,6 +24,7 @@ import ( "k8s.io/apimachinery/pkg/api/resource" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" "k8s.io/autoscaler/cluster-autoscaler/config" + "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/autoscaler/cluster-autoscaler/simulator/framework" caerrors "k8s.io/autoscaler/cluster-autoscaler/utils/errors" "k8s.io/autoscaler/cluster-autoscaler/utils/gpu" @@ -310,7 +311,7 @@ func (ic *IonosCloudCloudProvider) Refresh() error { // BuildIonosCloud builds the IonosCloud cloud provider. func BuildIonosCloud( - opts config.AutoscalingOptions, + opts *options.AutoscalerOptions, _ cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, ) cloudprovider.CloudProvider { diff --git a/cluster-autoscaler/cloudprovider/kamatera/kamatera_cloud_provider.go b/cluster-autoscaler/cloudprovider/kamatera/kamatera_cloud_provider.go index ed8af5cc0fee..fe72e5526671 100644 --- a/cluster-autoscaler/cloudprovider/kamatera/kamatera_cloud_provider.go +++ b/cluster-autoscaler/cloudprovider/kamatera/kamatera_cloud_provider.go @@ -29,6 +29,7 @@ import ( "k8s.io/apimachinery/pkg/api/resource" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" "k8s.io/autoscaler/cluster-autoscaler/config" + "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/autoscaler/cluster-autoscaler/utils/errors" "k8s.io/autoscaler/cluster-autoscaler/utils/gpu" klog "k8s.io/klog/v2" @@ -131,7 +132,7 @@ func (k *kamateraCloudProvider) Refresh() error { // BuildKamatera builds the Kamatera cloud provider. func BuildKamatera( - opts config.AutoscalingOptions, + opts *options.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, ) cloudprovider.CloudProvider { @@ -143,7 +144,7 @@ func BuildKamatera( klog.Fatalf("Could not open cloud provider configuration file %q, error: %v", opts.CloudConfig, err) } defer configFile.Close() - kcp, err := newKamateraCloudProvider(configFile, rl, createKubeClient(opts)) + kcp, err := newKamateraCloudProvider(configFile, rl, createKubeClient(opts.AutoscalingOptions)) if err != nil { klog.Fatalf("Could not create kamatera cloud provider: %v", err) } diff --git a/cluster-autoscaler/cloudprovider/kwok/kwok_provider.go b/cluster-autoscaler/cloudprovider/kwok/kwok_provider.go index a1691171bf0e..6664cfc1f507 100644 --- a/cluster-autoscaler/cloudprovider/kwok/kwok_provider.go +++ b/cluster-autoscaler/cloudprovider/kwok/kwok_provider.go @@ -23,7 +23,7 @@ import ( "strings" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" - "k8s.io/autoscaler/cluster-autoscaler/config" + "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/autoscaler/cluster-autoscaler/utils/errors" "k8s.io/autoscaler/cluster-autoscaler/utils/gpu" kube_util "k8s.io/autoscaler/cluster-autoscaler/utils/kubernetes" @@ -171,7 +171,7 @@ func (kwok *KwokCloudProvider) Cleanup() error { } // BuildKwok builds kwok cloud provider. -func BuildKwok(opts config.AutoscalingOptions, +func BuildKwok(opts *options.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, informerFactory informers.SharedInformerFactory) cloudprovider.CloudProvider { @@ -204,7 +204,7 @@ func BuildKwok(opts config.AutoscalingOptions, p, err := BuildKwokProvider(&kwokOptions{ kubeClient: kubeClient, - autoscalingOpts: &opts, + autoscalingOpts: &opts.AutoscalingOptions, discoveryOpts: &do, resourceLimiter: rl, ngNodeListerFn: kube_util.NewNodeLister, diff --git a/cluster-autoscaler/cloudprovider/linode/linode_cloud_provider.go b/cluster-autoscaler/cloudprovider/linode/linode_cloud_provider.go index a5b44563ded7..84e51d8a7f55 100644 --- a/cluster-autoscaler/cloudprovider/linode/linode_cloud_provider.go +++ b/cluster-autoscaler/cloudprovider/linode/linode_cloud_provider.go @@ -24,7 +24,7 @@ import ( apiv1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" - "k8s.io/autoscaler/cluster-autoscaler/config" + "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/autoscaler/cluster-autoscaler/utils/errors" "k8s.io/autoscaler/cluster-autoscaler/utils/gpu" klog "k8s.io/klog/v2" @@ -121,7 +121,7 @@ func (l *linodeCloudProvider) Cleanup() error { // BuildLinode builds the BuildLinode cloud provider. func BuildLinode( - opts config.AutoscalingOptions, + opts *options.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, ) cloudprovider.CloudProvider { diff --git a/cluster-autoscaler/cloudprovider/magnum/magnum_cloud_provider.go b/cluster-autoscaler/cloudprovider/magnum/magnum_cloud_provider.go index c6161e362157..0bef77420e7a 100644 --- a/cluster-autoscaler/cloudprovider/magnum/magnum_cloud_provider.go +++ b/cluster-autoscaler/cloudprovider/magnum/magnum_cloud_provider.go @@ -28,8 +28,8 @@ import ( "k8s.io/apimachinery/pkg/api/resource" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/magnum/gophercloud/openstack/containerinfra/v1/nodegroups" - "k8s.io/autoscaler/cluster-autoscaler/config" "k8s.io/autoscaler/cluster-autoscaler/config/dynamic" + "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/autoscaler/cluster-autoscaler/utils/errors" "k8s.io/autoscaler/cluster-autoscaler/utils/gpu" klog "k8s.io/klog/v2" @@ -317,7 +317,7 @@ func (mcp *magnumCloudProvider) refreshNodeGroups() error { // // The magnumManager is created here, and the initial node groups are created // based on the static or auto discovery specs provided via the command line parameters. -func BuildMagnum(opts config.AutoscalingOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { +func BuildMagnum(opts *options.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { var config io.ReadCloser // Should be loaded with --cloud-config /etc/kubernetes/kube_openstack_config from master node. @@ -338,7 +338,7 @@ func BuildMagnum(opts config.AutoscalingOptions, do cloudprovider.NodeGroupDisco klog.Fatal("can not use both static node group discovery and node group auto discovery") } - manager, err := createMagnumManager(config, do, opts) + manager, err := createMagnumManager(config, do, opts.AutoscalingOptions) if err != nil { klog.Fatalf("Failed to create magnum manager: %v", err) } diff --git a/cluster-autoscaler/cloudprovider/oci/instancepools/oci_cloud_provider.go b/cluster-autoscaler/cloudprovider/oci/instancepools/oci_cloud_provider.go index 425f4350331c..01d4ad5346a0 100644 --- a/cluster-autoscaler/cloudprovider/oci/instancepools/oci_cloud_provider.go +++ b/cluster-autoscaler/cloudprovider/oci/instancepools/oci_cloud_provider.go @@ -15,6 +15,7 @@ import ( "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/oci/nodepools" npconsts "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/oci/nodepools/consts" "k8s.io/autoscaler/cluster-autoscaler/config" + "k8s.io/autoscaler/cluster-autoscaler/core/options" caerrors "k8s.io/autoscaler/cluster-autoscaler/utils/errors" "k8s.io/autoscaler/cluster-autoscaler/utils/gpu" "k8s.io/client-go/kubernetes" @@ -148,7 +149,7 @@ func (ocp *OciCloudProvider) Refresh() error { } // BuildOCI constructs the OciCloudProvider object that implements the could provider interface (InstancePoolManager). -func BuildOCI(opts config.AutoscalingOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { +func BuildOCI(opts *options.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { ocidType, err := ocicommon.GetAllPoolTypes(opts.NodeGroups) if err != nil { klog.Fatalf("Failed to get pool type: %v", err) @@ -160,7 +161,7 @@ func BuildOCI(opts config.AutoscalingOptions, do cloudprovider.NodeGroupDiscover if strings.HasPrefix(ocidType, npconsts.OciNodePoolResourceIdent) && nodepoolTagsFound == true { klog.Fatalf("-nodes and -node-group-auto-discovery parameters can not be used together.") } else if strings.HasPrefix(ocidType, npconsts.OciNodePoolResourceIdent) || nodepoolTagsFound == true { - manager, err := nodepools.CreateNodePoolManager(opts.CloudConfig, opts.NodeGroupAutoDiscovery, do, createKubeClient(opts)) + manager, err := nodepools.CreateNodePoolManager(opts.CloudConfig, opts.NodeGroupAutoDiscovery, do, createKubeClient(opts.AutoscalingOptions)) if err != nil { klog.Fatalf("Could not create OCI OKE cloud provider: %v", err) } @@ -168,7 +169,7 @@ func BuildOCI(opts config.AutoscalingOptions, do cloudprovider.NodeGroupDiscover } // theoretically the only other possible value is no value (if no node groups are passed in) // or instancepool, but either way, we'll just default to the instance pool implementation - ipManager, err := CreateInstancePoolManager(opts.CloudConfig, do, createKubeClient(opts)) + ipManager, err := CreateInstancePoolManager(opts.CloudConfig, do, createKubeClient(opts.AutoscalingOptions)) if err != nil { klog.Fatalf("Could not create OCI cloud provider: %v", err) } diff --git a/cluster-autoscaler/cloudprovider/ovhcloud/ovh_cloud_provider.go b/cluster-autoscaler/cloudprovider/ovhcloud/ovh_cloud_provider.go index c731a8b8e3d4..f5d73a5c1e70 100644 --- a/cluster-autoscaler/cloudprovider/ovhcloud/ovh_cloud_provider.go +++ b/cluster-autoscaler/cloudprovider/ovhcloud/ovh_cloud_provider.go @@ -30,6 +30,7 @@ import ( "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/ovhcloud/sdk" "k8s.io/autoscaler/cluster-autoscaler/config" + "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/autoscaler/cluster-autoscaler/utils/errors" "k8s.io/autoscaler/cluster-autoscaler/utils/gpu" ) @@ -59,7 +60,7 @@ type OVHCloudProvider struct { } // BuildOVHcloud builds the OVHcloud provider. -func BuildOVHcloud(opts config.AutoscalingOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { +func BuildOVHcloud(opts *options.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { // Open cloud provider folder var configFile io.ReadCloser if opts.CloudConfig != "" { @@ -82,7 +83,7 @@ func BuildOVHcloud(opts config.AutoscalingOptions, do cloudprovider.NodeGroupDis provider := &OVHCloudProvider{ manager: manager, - autoscalingOptions: opts, + autoscalingOptions: opts.AutoscalingOptions, discoveryOptions: do, resourceLimiter: rl, } diff --git a/cluster-autoscaler/cloudprovider/rancher/rancher_provider.go b/cluster-autoscaler/cloudprovider/rancher/rancher_provider.go index a7b94d902b3e..ab735a5ef4ce 100644 --- a/cluster-autoscaler/cloudprovider/rancher/rancher_provider.go +++ b/cluster-autoscaler/cloudprovider/rancher/rancher_provider.go @@ -28,7 +28,7 @@ import ( "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" - "k8s.io/autoscaler/cluster-autoscaler/config" + "k8s.io/autoscaler/cluster-autoscaler/core/options" autoscalererrors "k8s.io/autoscaler/cluster-autoscaler/utils/errors" "k8s.io/autoscaler/cluster-autoscaler/utils/gpu" "k8s.io/client-go/discovery" @@ -64,7 +64,7 @@ type RancherCloudProvider struct { } // BuildRancher builds rancher cloud provider. -func BuildRancher(opts config.AutoscalingOptions, _ cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { +func BuildRancher(opts *options.AutoscalerOptions, _ cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { provider, err := newRancherCloudProvider(opts.CloudConfig, rl) if err != nil { klog.Fatalf("failed to create rancher cloud provider: %v", err) diff --git a/cluster-autoscaler/cloudprovider/scaleway/scaleway_cloud_provider.go b/cluster-autoscaler/cloudprovider/scaleway/scaleway_cloud_provider.go index a214d16823ff..d960c01960ed 100644 --- a/cluster-autoscaler/cloudprovider/scaleway/scaleway_cloud_provider.go +++ b/cluster-autoscaler/cloudprovider/scaleway/scaleway_cloud_provider.go @@ -30,7 +30,7 @@ import ( "k8s.io/apimachinery/pkg/api/resource" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/scaleway/scalewaygo" - "k8s.io/autoscaler/cluster-autoscaler/config" + "k8s.io/autoscaler/cluster-autoscaler/core/options" ca_errors "k8s.io/autoscaler/cluster-autoscaler/utils/errors" "k8s.io/autoscaler/cluster-autoscaler/utils/gpu" "k8s.io/klog/v2" @@ -103,7 +103,7 @@ func newScalewayCloudProvider(configFile io.Reader, defaultUserAgent string, rl // BuildScaleway returns CloudProvider implementation for Scaleway. func BuildScaleway( - opts config.AutoscalingOptions, + opts *options.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, ) cloudprovider.CloudProvider { diff --git a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud_cloud_provider.go b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud_cloud_provider.go index a33c140fb315..699605999cb0 100644 --- a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud_cloud_provider.go +++ b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud_cloud_provider.go @@ -24,7 +24,7 @@ import ( apiv1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" - "k8s.io/autoscaler/cluster-autoscaler/config" + "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/autoscaler/cluster-autoscaler/utils/errors" "k8s.io/autoscaler/cluster-autoscaler/utils/gpu" "k8s.io/klog/v2" @@ -174,7 +174,7 @@ func (tencentcloud *tencentCloudProvider) Refresh() error { } // BuildTencentcloud returns tencentcloud provider -func BuildTencentcloud(opts config.AutoscalingOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { +func BuildTencentcloud(opts *options.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { var config io.ReadCloser if opts.CloudConfig != "" { var err error diff --git a/cluster-autoscaler/cloudprovider/utho/utho_cloud_provider.go b/cluster-autoscaler/cloudprovider/utho/utho_cloud_provider.go index 9d511e127c70..c7f680280273 100644 --- a/cluster-autoscaler/cloudprovider/utho/utho_cloud_provider.go +++ b/cluster-autoscaler/cloudprovider/utho/utho_cloud_provider.go @@ -23,7 +23,7 @@ import ( apiv1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" - "k8s.io/autoscaler/cluster-autoscaler/config" + "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/autoscaler/cluster-autoscaler/utils/errors" "k8s.io/autoscaler/cluster-autoscaler/utils/gpu" "k8s.io/klog/v2" @@ -164,7 +164,7 @@ func (u *uthoCloudProvider) Refresh() error { // BuildUtho builds the Utho cloud provider. func BuildUtho( - opts config.AutoscalingOptions, + opts *options.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, ) cloudprovider.CloudProvider { diff --git a/cluster-autoscaler/cloudprovider/volcengine/volcengine_cloud_provider.go b/cluster-autoscaler/cloudprovider/volcengine/volcengine_cloud_provider.go index 53ad1ec1139d..cf8971f4d068 100644 --- a/cluster-autoscaler/cloudprovider/volcengine/volcengine_cloud_provider.go +++ b/cluster-autoscaler/cloudprovider/volcengine/volcengine_cloud_provider.go @@ -26,8 +26,8 @@ import ( apiv1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" - "k8s.io/autoscaler/cluster-autoscaler/config" "k8s.io/autoscaler/cluster-autoscaler/config/dynamic" + "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/autoscaler/cluster-autoscaler/utils/errors" "k8s.io/autoscaler/cluster-autoscaler/utils/gpu" "k8s.io/klog/v2" @@ -160,7 +160,7 @@ func buildScalingGroupFromSpec(manager VolcengineManager, spec string) (*AutoSca } // BuildVolcengine builds CloudProvider implementation for Volcengine -func BuildVolcengine(opts config.AutoscalingOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { +func BuildVolcengine(opts *options.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { if opts.CloudConfig == "" { klog.Fatalf("The path to the cloud provider configuration file must be set via the --cloud-config command line parameter") } diff --git a/cluster-autoscaler/cloudprovider/vultr/vultr_cloud_provider.go b/cluster-autoscaler/cloudprovider/vultr/vultr_cloud_provider.go index 5234a1019786..d6b976ef382c 100644 --- a/cluster-autoscaler/cloudprovider/vultr/vultr_cloud_provider.go +++ b/cluster-autoscaler/cloudprovider/vultr/vultr_cloud_provider.go @@ -24,7 +24,7 @@ import ( apiv1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" - "k8s.io/autoscaler/cluster-autoscaler/config" + "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/autoscaler/cluster-autoscaler/utils/errors" "k8s.io/autoscaler/cluster-autoscaler/utils/gpu" "k8s.io/klog/v2" @@ -151,7 +151,7 @@ func toNodeID(providerID string) string { } // BuildVultr builds the Vultr cloud provider. -func BuildVultr(opts config.AutoscalingOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { +func BuildVultr(opts *options.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { if opts.CloudConfig == "" { klog.Fatalf("No config file provided, please specify it via the --cloud-config flag") } diff --git a/cluster-autoscaler/main.go b/cluster-autoscaler/main.go index d91511b84988..b2e90e37b7e6 100644 --- a/cluster-autoscaler/main.go +++ b/cluster-autoscaler/main.go @@ -51,6 +51,7 @@ import ( capacitybuffer "k8s.io/autoscaler/cluster-autoscaler/capacitybuffer/controller" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" "k8s.io/autoscaler/cluster-autoscaler/core" + coreoptions "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/autoscaler/cluster-autoscaler/core/podlistprocessor" "k8s.io/autoscaler/cluster-autoscaler/metrics" "k8s.io/autoscaler/cluster-autoscaler/observers/loopstart" @@ -122,7 +123,7 @@ func buildAutoscaler(context ctx.Context, debuggingSnapshotter debuggingsnapshot drainabilityRules := rules.Default(deleteOptions) var snapshotStore clustersnapshot.ClusterSnapshotStore = store.NewDeltaSnapshotStore(autoscalingOptions.ClusterSnapshotParallelism) - opts := core.AutoscalerOptions{ + opts := coreoptions.AutoscalerOptions{ AutoscalingOptions: autoscalingOptions, FrameworkHandle: fwHandle, ClusterSnapshot: predicate.NewPredicateSnapshot(snapshotStore, fwHandle, autoscalingOptions.DynamicResourceAllocationEnabled), diff --git a/cluster-autoscaler/processors/scaledowncandidates/scale_down_candidates_processor.go b/cluster-autoscaler/processors/scaledowncandidates/scale_down_candidates_processor.go index 854b6831624e..042ec9de4d41 100644 --- a/cluster-autoscaler/processors/scaledowncandidates/scale_down_candidates_processor.go +++ b/cluster-autoscaler/processors/scaledowncandidates/scale_down_candidates_processor.go @@ -23,25 +23,25 @@ import ( "k8s.io/autoscaler/cluster-autoscaler/utils/errors" ) -type combinedScaleDownCandidatesProcessor struct { +type CombinedScaleDownCandidatesProcessor struct { processors []nodes.ScaleDownNodeProcessor } // NewCombinedScaleDownCandidatesProcessor returns a default implementation of the scale down candidates // processor, which wraps and sequentially runs other sub-processors. -func NewCombinedScaleDownCandidatesProcessor() *combinedScaleDownCandidatesProcessor { - return &combinedScaleDownCandidatesProcessor{} +func NewCombinedScaleDownCandidatesProcessor() *CombinedScaleDownCandidatesProcessor { + return &CombinedScaleDownCandidatesProcessor{} } // Register registers a new ScaleDownNodeProcessor -func (p *combinedScaleDownCandidatesProcessor) Register(np nodes.ScaleDownNodeProcessor) { +func (p *CombinedScaleDownCandidatesProcessor) Register(np nodes.ScaleDownNodeProcessor) { p.processors = append(p.processors, np) } // GetPodDestinationCandidates returns nodes that potentially could act as destinations for pods // that would become unscheduled after a scale down. -func (p *combinedScaleDownCandidatesProcessor) GetPodDestinationCandidates(ctx *context.AutoscalingContext, nodes []*apiv1.Node) ([]*apiv1.Node, errors.AutoscalerError) { +func (p *CombinedScaleDownCandidatesProcessor) GetPodDestinationCandidates(ctx *context.AutoscalingContext, nodes []*apiv1.Node) ([]*apiv1.Node, errors.AutoscalerError) { var err errors.AutoscalerError for _, processor := range p.processors { nodes, err = processor.GetPodDestinationCandidates(ctx, nodes) @@ -53,7 +53,7 @@ func (p *combinedScaleDownCandidatesProcessor) GetPodDestinationCandidates(ctx * } // GetScaleDownCandidates returns nodes that potentially could be scaled down. -func (p *combinedScaleDownCandidatesProcessor) GetScaleDownCandidates(ctx *context.AutoscalingContext, nodes []*apiv1.Node) ([]*apiv1.Node, errors.AutoscalerError) { +func (p *CombinedScaleDownCandidatesProcessor) GetScaleDownCandidates(ctx *context.AutoscalingContext, nodes []*apiv1.Node) ([]*apiv1.Node, errors.AutoscalerError) { var err errors.AutoscalerError for _, processor := range p.processors { nodes, err = processor.GetScaleDownCandidates(ctx, nodes) @@ -65,7 +65,7 @@ func (p *combinedScaleDownCandidatesProcessor) GetScaleDownCandidates(ctx *conte } // CleanUp is called at CA termination -func (p *combinedScaleDownCandidatesProcessor) CleanUp() { +func (p *CombinedScaleDownCandidatesProcessor) CleanUp() { for _, processor := range p.processors { processor.CleanUp() } From b8fb85a461d5488ba509ab40f538325e9c1812fb Mon Sep 17 00:00:00 2001 From: elmiko Date: Fri, 26 Sep 2025 17:39:12 -0400 Subject: [PATCH 3/5] add scale down registration method this change adds a method to the AutoscalerOptions struct to allow registering a scale down node processor. --- cluster-autoscaler/core/options/autoscaler.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/cluster-autoscaler/core/options/autoscaler.go b/cluster-autoscaler/core/options/autoscaler.go index 50a45370e847..bfb947298ab7 100644 --- a/cluster-autoscaler/core/options/autoscaler.go +++ b/cluster-autoscaler/core/options/autoscaler.go @@ -26,6 +26,8 @@ import ( "k8s.io/autoscaler/cluster-autoscaler/expander" "k8s.io/autoscaler/cluster-autoscaler/observers/loopstart" ca_processors "k8s.io/autoscaler/cluster-autoscaler/processors" + "k8s.io/autoscaler/cluster-autoscaler/processors/nodes" + "k8s.io/autoscaler/cluster-autoscaler/processors/scaledowncandidates" "k8s.io/autoscaler/cluster-autoscaler/simulator/clustersnapshot" "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability/rules" draprovider "k8s.io/autoscaler/cluster-autoscaler/simulator/dynamicresources/provider" @@ -57,3 +59,7 @@ type AutoscalerOptions struct { DrainabilityRules rules.Rules DraProvider *draprovider.Provider } + +func (a *AutoscalerOptions) RegisterScaleDownNodeProcessor(np nodes.ScaleDownNodeProcessor) { + a.Processors.ScaleDownNodeProcessor.(*scaledowncandidates.CombinedScaleDownCandidatesProcessor).Register(np) +} From a5f07fed3adaf7c0df959294a343a2729071670d Mon Sep 17 00:00:00 2001 From: elmiko Date: Mon, 8 Sep 2025 15:53:23 -0400 Subject: [PATCH 4/5] add clusterapi scale down upgrade processor This change adds a custom scale down node processor for cluster api to reject nodes that are undergoing upgrade. --- .../alicloud/alicloud_cloud_provider.go | 4 +- .../cloudprovider/aws/aws_cloud_provider.go | 4 +- .../aws/aws_cloud_provider_test.go | 4 +- .../azure/azure_cloud_provider.go | 4 +- .../baiducloud/baiducloud_cloud_provider.go | 4 +- .../bizflycloud/bizflycloud_cloud_provider.go | 4 +- .../brightbox/brightbox_cloud_provider.go | 4 +- .../brightbox_cloud_provider_test.go | 15 ++-- .../cloudprovider/builder/builder_alicloud.go | 4 +- .../cloudprovider/builder/builder_all.go | 4 +- .../cloudprovider/builder/builder_aws.go | 4 +- .../cloudprovider/builder/builder_azure.go | 4 +- .../builder/builder_baiducloud.go | 4 +- .../builder/builder_bizflycloud.go | 4 +- .../builder/builder_brightbox.go | 4 +- .../cloudprovider/builder/builder_cherry.go | 4 +- .../cloudprovider/builder/builder_civo.go | 4 +- .../builder/builder_cloudstack.go | 4 +- .../builder/builder_clusterapi.go | 4 +- .../builder/builder_coreweave.go | 4 +- .../builder/builder_digitalocean.go | 4 +- .../builder/builder_equinixmetal.go | 4 +- .../cloudprovider/builder/builder_exoscale.go | 4 +- .../builder/builder_externalgrpc.go | 4 +- .../cloudprovider/builder/builder_gce.go | 4 +- .../cloudprovider/builder/builder_hetzner.go | 4 +- .../builder/builder_huaweicloud.go | 4 +- .../builder/builder_ionoscloud.go | 4 +- .../cloudprovider/builder/builder_kamatera.go | 4 +- .../cloudprovider/builder/builder_kubemark.go | 4 +- .../cloudprovider/builder/builder_kwok.go | 4 +- .../cloudprovider/builder/builder_linode.go | 4 +- .../cloudprovider/builder/builder_magnum.go | 4 +- .../cloudprovider/builder/builder_oci.go | 4 +- .../cloudprovider/builder/builder_ovhcloud.go | 4 +- .../cloudprovider/builder/builder_rancher.go | 4 +- .../cloudprovider/builder/builder_scaleway.go | 4 +- .../builder/builder_tencentcloud.go | 4 +- .../cloudprovider/builder/builder_utho.go | 4 +- .../builder/builder_volcengine.go | 4 +- .../cloudprovider/builder/builder_vultr.go | 4 +- .../builder/cloud_provider_builder.go | 4 +- .../cherryservers/cherry_cloud_provider.go | 4 +- .../cloudprovider/civo/civo_cloud_provider.go | 4 +- .../cloudstack/cloudstack_cloud_provider.go | 4 +- .../clusterapi/clusterapi_controller.go | 21 +++++ .../clusterapi/clusterapi_nodegroup.go | 62 ++++++++++++++ .../clusterapi/clusterapi_processors.go | 80 +++++++++++++++++++ .../clusterapi/clusterapi_provider.go | 9 ++- .../clusterapi/clusterapi_utils.go | 20 ++--- .../coreweave/coreweave_provider.go | 4 +- .../digitalocean_cloud_provider.go | 4 +- .../equinixmetal/cloud_provider.go | 4 +- .../exoscale/exoscale_cloud_provider.go | 4 +- .../main.go | 23 +++--- .../externalgrpc_cloud_provider.go | 4 +- .../cloudprovider/gce/gce_cloud_provider.go | 4 +- .../hetzner/hetzner_cloud_provider.go | 4 +- .../huaweicloud/huaweicloud_cloud_provider.go | 4 +- .../ionoscloud/ionoscloud_cloud_provider.go | 4 +- .../kamatera/kamatera_cloud_provider.go | 4 +- .../cloudprovider/kubemark/kubemark_linux.go | 3 +- .../cloudprovider/kwok/kwok_provider.go | 4 +- .../linode/linode_cloud_provider.go | 4 +- .../magnum/magnum_cloud_provider.go | 4 +- .../oci/instancepools/oci_cloud_provider.go | 4 +- .../ovhcloud/ovh_cloud_provider.go | 4 +- .../cloudprovider/rancher/rancher_provider.go | 4 +- .../scaleway/scaleway_cloud_provider.go | 4 +- .../tencentcloud_cloud_provider.go | 4 +- .../cloudprovider/utho/utho_cloud_provider.go | 4 +- .../volcengine/volcengine_cloud_provider.go | 4 +- .../vultr/vultr_cloud_provider.go | 4 +- cluster-autoscaler/core/autoscaler.go | 6 +- cluster-autoscaler/core/options/autoscaler.go | 5 +- .../scale_down_candidates_processor.go | 2 + 76 files changed, 344 insertions(+), 162 deletions(-) create mode 100644 cluster-autoscaler/cloudprovider/clusterapi/clusterapi_processors.go diff --git a/cluster-autoscaler/cloudprovider/alicloud/alicloud_cloud_provider.go b/cluster-autoscaler/cloudprovider/alicloud/alicloud_cloud_provider.go index 95b69d4ba67d..e6ee8b17003d 100644 --- a/cluster-autoscaler/cloudprovider/alicloud/alicloud_cloud_provider.go +++ b/cluster-autoscaler/cloudprovider/alicloud/alicloud_cloud_provider.go @@ -25,7 +25,7 @@ import ( "k8s.io/apimachinery/pkg/api/resource" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" "k8s.io/autoscaler/cluster-autoscaler/config/dynamic" - "k8s.io/autoscaler/cluster-autoscaler/core/options" + coreoptions "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/autoscaler/cluster-autoscaler/utils/errors" "k8s.io/autoscaler/cluster-autoscaler/utils/gpu" klog "k8s.io/klog/v2" @@ -220,7 +220,7 @@ func buildAsg(manager *AliCloudManager, minSize int, maxSize int, id string, reg } // BuildAlicloud returns alicloud provider -func BuildAlicloud(opts *options.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { +func BuildAlicloud(opts *coreoptions.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { var aliManager *AliCloudManager var aliError error if opts.CloudConfig != "" { diff --git a/cluster-autoscaler/cloudprovider/aws/aws_cloud_provider.go b/cluster-autoscaler/cloudprovider/aws/aws_cloud_provider.go index 766e3412a144..11899739c9c8 100644 --- a/cluster-autoscaler/cloudprovider/aws/aws_cloud_provider.go +++ b/cluster-autoscaler/cloudprovider/aws/aws_cloud_provider.go @@ -27,7 +27,7 @@ import ( "k8s.io/apimachinery/pkg/api/resource" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" "k8s.io/autoscaler/cluster-autoscaler/config" - "k8s.io/autoscaler/cluster-autoscaler/core/options" + coreoptions "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/autoscaler/cluster-autoscaler/simulator/framework" "k8s.io/autoscaler/cluster-autoscaler/utils/errors" "k8s.io/autoscaler/cluster-autoscaler/utils/gpu" @@ -416,7 +416,7 @@ func (ng *AwsNodeGroup) TemplateNodeInfo() (*framework.NodeInfo, error) { } // BuildAWS builds AWS cloud provider, manager etc. -func BuildAWS(opts *options.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { +func BuildAWS(opts *coreoptions.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { var cfg io.ReadCloser if opts.CloudConfig != "" { var err error diff --git a/cluster-autoscaler/cloudprovider/aws/aws_cloud_provider_test.go b/cluster-autoscaler/cloudprovider/aws/aws_cloud_provider_test.go index adfb39d0a2c6..ea3ec8e9fdc2 100644 --- a/cluster-autoscaler/cloudprovider/aws/aws_cloud_provider_test.go +++ b/cluster-autoscaler/cloudprovider/aws/aws_cloud_provider_test.go @@ -27,7 +27,7 @@ import ( "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/aws/aws-sdk-go/aws" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/aws/aws-sdk-go/service/autoscaling" - "k8s.io/autoscaler/cluster-autoscaler/core/options" + coreoptions "k8s.io/autoscaler/cluster-autoscaler/core/options" ) var testAwsManager = &AwsManager{ @@ -133,7 +133,7 @@ func TestInstanceTypeFallback(t *testing.T) { map[string]int64{cloudprovider.ResourceNameCores: 10, cloudprovider.ResourceNameMemory: 100000000}) do := cloudprovider.NodeGroupDiscoveryOptions{} - opts := &options.AutoscalerOptions{} + opts := &coreoptions.AutoscalerOptions{} t.Setenv("AWS_REGION", "non-existent-region") diff --git a/cluster-autoscaler/cloudprovider/azure/azure_cloud_provider.go b/cluster-autoscaler/cloudprovider/azure/azure_cloud_provider.go index aab794e96e06..c0c9fec3e786 100644 --- a/cluster-autoscaler/cloudprovider/azure/azure_cloud_provider.go +++ b/cluster-autoscaler/cloudprovider/azure/azure_cloud_provider.go @@ -25,7 +25,7 @@ import ( apiv1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" - "k8s.io/autoscaler/cluster-autoscaler/core/options" + coreoptions "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/autoscaler/cluster-autoscaler/utils/errors" "k8s.io/autoscaler/cluster-autoscaler/utils/gpu" klog "k8s.io/klog/v2" @@ -190,7 +190,7 @@ func (m *azureRef) String() string { } // BuildAzure builds Azure cloud provider, manager etc. -func BuildAzure(opts *options.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { +func BuildAzure(opts *coreoptions.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { var config io.ReadCloser if opts.CloudConfig != "" { klog.Infof("Creating Azure Manager using cloud-config file: %v", opts.CloudConfig) diff --git a/cluster-autoscaler/cloudprovider/baiducloud/baiducloud_cloud_provider.go b/cluster-autoscaler/cloudprovider/baiducloud/baiducloud_cloud_provider.go index e6000677a223..0f972b09eee4 100644 --- a/cluster-autoscaler/cloudprovider/baiducloud/baiducloud_cloud_provider.go +++ b/cluster-autoscaler/cloudprovider/baiducloud/baiducloud_cloud_provider.go @@ -27,7 +27,7 @@ import ( "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" "k8s.io/autoscaler/cluster-autoscaler/config" "k8s.io/autoscaler/cluster-autoscaler/config/dynamic" - "k8s.io/autoscaler/cluster-autoscaler/core/options" + coreoptions "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/autoscaler/cluster-autoscaler/simulator/framework" "k8s.io/autoscaler/cluster-autoscaler/utils/errors" "k8s.io/autoscaler/cluster-autoscaler/utils/gpu" @@ -57,7 +57,7 @@ type baiducloudCloudProvider struct { } // BuildBaiducloud builds baiducloud cloud provider, manager etc. -func BuildBaiducloud(opts *options.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { +func BuildBaiducloud(opts *coreoptions.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { var cfg io.ReadCloser if opts.CloudConfig != "" { var err error diff --git a/cluster-autoscaler/cloudprovider/bizflycloud/bizflycloud_cloud_provider.go b/cluster-autoscaler/cloudprovider/bizflycloud/bizflycloud_cloud_provider.go index 4a5fa7919569..49982463bd7e 100644 --- a/cluster-autoscaler/cloudprovider/bizflycloud/bizflycloud_cloud_provider.go +++ b/cluster-autoscaler/cloudprovider/bizflycloud/bizflycloud_cloud_provider.go @@ -25,7 +25,7 @@ import ( apiv1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" - "k8s.io/autoscaler/cluster-autoscaler/core/options" + coreoptions "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/autoscaler/cluster-autoscaler/utils/errors" "k8s.io/autoscaler/cluster-autoscaler/utils/gpu" klog "k8s.io/klog/v2" @@ -174,7 +174,7 @@ func (d *bizflycloudCloudProvider) Refresh() error { // BuildBizflyCloud builds the Bizflycloud cloud provider. func BuildBizflyCloud( - opts *options.AutoscalerOptions, + opts *coreoptions.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, ) cloudprovider.CloudProvider { diff --git a/cluster-autoscaler/cloudprovider/brightbox/brightbox_cloud_provider.go b/cluster-autoscaler/cloudprovider/brightbox/brightbox_cloud_provider.go index c0a09800df7f..6a680dc2d47d 100644 --- a/cluster-autoscaler/cloudprovider/brightbox/brightbox_cloud_provider.go +++ b/cluster-autoscaler/cloudprovider/brightbox/brightbox_cloud_provider.go @@ -28,7 +28,7 @@ import ( brightbox "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/brightbox/gobrightbox" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/brightbox/gobrightbox/status" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/brightbox/k8ssdk" - "k8s.io/autoscaler/cluster-autoscaler/core/options" + coreoptions "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/autoscaler/cluster-autoscaler/utils/errors" "k8s.io/autoscaler/cluster-autoscaler/utils/gpu" klog "k8s.io/klog/v2" @@ -221,7 +221,7 @@ func (b *brightboxCloudProvider) Cleanup() error { // BuildBrightbox builds the Brightbox provider func BuildBrightbox( - opts *options.AutoscalerOptions, + opts *coreoptions.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, ) cloudprovider.CloudProvider { diff --git a/cluster-autoscaler/cloudprovider/brightbox/brightbox_cloud_provider_test.go b/cluster-autoscaler/cloudprovider/brightbox/brightbox_cloud_provider_test.go index bf284be8ab67..199b1d5a9ae5 100644 --- a/cluster-autoscaler/cloudprovider/brightbox/brightbox_cloud_provider_test.go +++ b/cluster-autoscaler/cloudprovider/brightbox/brightbox_cloud_provider_test.go @@ -33,6 +33,7 @@ import ( "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/brightbox/k8ssdk" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/brightbox/k8ssdk/mocks" "k8s.io/autoscaler/cluster-autoscaler/config" + coreoptions "k8s.io/autoscaler/cluster-autoscaler/core/options" klog "k8s.io/klog/v2" ) @@ -138,9 +139,11 @@ func TestBuildBrightBox(t *testing.T) { defer ts.Close() rl := cloudprovider.NewResourceLimiter(nil, nil) do := cloudprovider.NodeGroupDiscoveryOptions{} - opts := config.AutoscalingOptions{ - CloudProviderName: cloudprovider.BrightboxProviderName, - ClusterName: fakeClusterName, + opts := &coreoptions.AutoscalerOptions{ + AutoscalingOptions: config.AutoscalingOptions{ + CloudProviderName: cloudprovider.BrightboxProviderName, + ClusterName: fakeClusterName, + }, } cloud := BuildBrightbox(opts, do, rl) assert.Equal(t, cloud.Name(), cloudprovider.BrightboxProviderName) @@ -170,8 +173,10 @@ func TestBuildBrightboxMissingClusterName(t *testing.T) { defer ts.Close() rl := cloudprovider.NewResourceLimiter(nil, nil) do := cloudprovider.NodeGroupDiscoveryOptions{} - opts := config.AutoscalingOptions{ - CloudProviderName: cloudprovider.BrightboxProviderName, + opts := &coreoptions.AutoscalerOptions{ + AutoscalingOptions: config.AutoscalingOptions{ + CloudProviderName: cloudprovider.BrightboxProviderName, + }, } BuildBrightbox(opts, do, rl) }) diff --git a/cluster-autoscaler/cloudprovider/builder/builder_alicloud.go b/cluster-autoscaler/cloudprovider/builder/builder_alicloud.go index 566cfeb9264b..693ad3310e0e 100644 --- a/cluster-autoscaler/cloudprovider/builder/builder_alicloud.go +++ b/cluster-autoscaler/cloudprovider/builder/builder_alicloud.go @@ -22,7 +22,7 @@ package builder import ( "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/alicloud" - "k8s.io/autoscaler/cluster-autoscaler/config" + coreoptions "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/client-go/informers" ) @@ -34,7 +34,7 @@ var AvailableCloudProviders = []string{ // DefaultCloudProvider for alicloud-only build is alicloud. const DefaultCloudProvider = cloudprovider.AlicloudProviderName -func buildCloudProvider(opts config.AutoscalingOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, _ informers.SharedInformerFactory) cloudprovider.CloudProvider { +func buildCloudProvider(opts *coreoptions.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, _ informers.SharedInformerFactory) cloudprovider.CloudProvider { switch opts.CloudProviderName { case cloudprovider.AlicloudProviderName: return alicloud.BuildAlicloud(opts, do, rl) diff --git a/cluster-autoscaler/cloudprovider/builder/builder_all.go b/cluster-autoscaler/cloudprovider/builder/builder_all.go index 9d353282164a..e98cdc62f6a7 100644 --- a/cluster-autoscaler/cloudprovider/builder/builder_all.go +++ b/cluster-autoscaler/cloudprovider/builder/builder_all.go @@ -52,7 +52,7 @@ import ( "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/utho" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/volcengine" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/vultr" - "k8s.io/autoscaler/cluster-autoscaler/core/options" + coreoptions "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/client-go/informers" ) @@ -94,7 +94,7 @@ var AvailableCloudProviders = []string{ // DefaultCloudProvider is GCE. const DefaultCloudProvider = cloudprovider.GceProviderName -func buildCloudProvider(opts *options.AutoscalerOptions, +func buildCloudProvider(opts *coreoptions.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, informerFactory informers.SharedInformerFactory) cloudprovider.CloudProvider { diff --git a/cluster-autoscaler/cloudprovider/builder/builder_aws.go b/cluster-autoscaler/cloudprovider/builder/builder_aws.go index e13c60c2412d..db734278f7a7 100644 --- a/cluster-autoscaler/cloudprovider/builder/builder_aws.go +++ b/cluster-autoscaler/cloudprovider/builder/builder_aws.go @@ -22,7 +22,7 @@ package builder import ( "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/aws" - "k8s.io/autoscaler/cluster-autoscaler/config" + coreoptions "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/client-go/informers" ) @@ -34,7 +34,7 @@ var AvailableCloudProviders = []string{ // DefaultCloudProvider for AWS-only build is AWS. const DefaultCloudProvider = cloudprovider.AwsProviderName -func buildCloudProvider(opts config.AutoscalingOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, _ informers.SharedInformerFactory) cloudprovider.CloudProvider { +func buildCloudProvider(opts *coreoptions.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, _ informers.SharedInformerFactory) cloudprovider.CloudProvider { switch opts.CloudProviderName { case cloudprovider.AwsProviderName: return aws.BuildAWS(opts, do, rl) diff --git a/cluster-autoscaler/cloudprovider/builder/builder_azure.go b/cluster-autoscaler/cloudprovider/builder/builder_azure.go index 7812ab138b48..fca5ff0dfe40 100644 --- a/cluster-autoscaler/cloudprovider/builder/builder_azure.go +++ b/cluster-autoscaler/cloudprovider/builder/builder_azure.go @@ -22,7 +22,7 @@ package builder import ( "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/azure" - "k8s.io/autoscaler/cluster-autoscaler/config" + coreoptions "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/client-go/informers" ) @@ -34,7 +34,7 @@ var AvailableCloudProviders = []string{ // DefaultCloudProvider on Azure-only build is Azure. const DefaultCloudProvider = cloudprovider.AzureProviderName -func buildCloudProvider(opts config.AutoscalingOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, _ informers.SharedInformerFactory) cloudprovider.CloudProvider { +func buildCloudProvider(opts *coreoptions.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, _ informers.SharedInformerFactory) cloudprovider.CloudProvider { switch opts.CloudProviderName { case cloudprovider.AzureProviderName: return azure.BuildAzure(opts, do, rl) diff --git a/cluster-autoscaler/cloudprovider/builder/builder_baiducloud.go b/cluster-autoscaler/cloudprovider/builder/builder_baiducloud.go index 05e4669486d1..2076973c210e 100644 --- a/cluster-autoscaler/cloudprovider/builder/builder_baiducloud.go +++ b/cluster-autoscaler/cloudprovider/builder/builder_baiducloud.go @@ -22,7 +22,7 @@ package builder import ( "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/baiducloud" - "k8s.io/autoscaler/cluster-autoscaler/config" + coreoptions "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/client-go/informers" ) @@ -34,7 +34,7 @@ var AvailableCloudProviders = []string{ // DefaultCloudProvider for baiducloud-only build is baiducloud. const DefaultCloudProvider = cloudprovider.BaiducloudProviderName -func buildCloudProvider(opts config.AutoscalingOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, _ informers.SharedInformerFactory) cloudprovider.CloudProvider { +func buildCloudProvider(opts *coreoptions.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, _ informers.SharedInformerFactory) cloudprovider.CloudProvider { switch opts.CloudProviderName { case cloudprovider.BaiducloudProviderName: return baiducloud.BuildBaiducloud(opts, do, rl) diff --git a/cluster-autoscaler/cloudprovider/builder/builder_bizflycloud.go b/cluster-autoscaler/cloudprovider/builder/builder_bizflycloud.go index b8388ba7e4de..ad74c89cd2f3 100644 --- a/cluster-autoscaler/cloudprovider/builder/builder_bizflycloud.go +++ b/cluster-autoscaler/cloudprovider/builder/builder_bizflycloud.go @@ -22,7 +22,7 @@ package builder import ( "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/bizflycloud" - "k8s.io/autoscaler/cluster-autoscaler/config" + coreoptions "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/client-go/informers" ) @@ -34,7 +34,7 @@ var AvailableCloudProviders = []string{ // DefaultCloudProvider for Bizflycloud-only build is Bizflycloud. const DefaultCloudProvider = cloudprovider.BizflyCloudProviderName -func buildCloudProvider(opts config.AutoscalingOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, _ informers.SharedInformerFactory) cloudprovider.CloudProvider { +func buildCloudProvider(opts *coreoptions.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, _ informers.SharedInformerFactory) cloudprovider.CloudProvider { switch opts.CloudProviderName { case cloudprovider.BizflyCloudProviderName: return bizflycloud.BuildBizflyCloud(opts, do, rl) diff --git a/cluster-autoscaler/cloudprovider/builder/builder_brightbox.go b/cluster-autoscaler/cloudprovider/builder/builder_brightbox.go index 4b321a252ad4..cc98e195cae5 100644 --- a/cluster-autoscaler/cloudprovider/builder/builder_brightbox.go +++ b/cluster-autoscaler/cloudprovider/builder/builder_brightbox.go @@ -22,7 +22,7 @@ package builder import ( "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/brightbox" - "k8s.io/autoscaler/cluster-autoscaler/config" + coreoptions "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/client-go/informers" ) @@ -34,7 +34,7 @@ var AvailableCloudProviders = []string{ // DefaultCloudProvider for Brightbox-only build is Brightbox. const DefaultCloudProvider = cloudprovider.BrightboxProviderName -func buildCloudProvider(opts config.AutoscalingOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, _ informers.SharedInformerFactory) cloudprovider.CloudProvider { +func buildCloudProvider(opts *coreoptions.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, _ informers.SharedInformerFactory) cloudprovider.CloudProvider { switch opts.CloudProviderName { case cloudprovider.BrightboxProviderName: return brightbox.BuildBrightbox(opts, do, rl) diff --git a/cluster-autoscaler/cloudprovider/builder/builder_cherry.go b/cluster-autoscaler/cloudprovider/builder/builder_cherry.go index 455be264c518..97053b8581eb 100644 --- a/cluster-autoscaler/cloudprovider/builder/builder_cherry.go +++ b/cluster-autoscaler/cloudprovider/builder/builder_cherry.go @@ -22,7 +22,7 @@ package builder import ( "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" cherry "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/cherryservers" - "k8s.io/autoscaler/cluster-autoscaler/config" + coreoptions "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/client-go/informers" ) @@ -34,7 +34,7 @@ var AvailableCloudProviders = []string{ // DefaultCloudProvider for Cherry-only build is Cherry. const DefaultCloudProvider = cherry.ProviderName -func buildCloudProvider(opts config.AutoscalingOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, _ informers.SharedInformerFactory) cloudprovider.CloudProvider { +func buildCloudProvider(opts *coreoptions.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, _ informers.SharedInformerFactory) cloudprovider.CloudProvider { switch opts.CloudProviderName { case cherry.ProviderName: return cherry.BuildCherry(opts, do, rl) diff --git a/cluster-autoscaler/cloudprovider/builder/builder_civo.go b/cluster-autoscaler/cloudprovider/builder/builder_civo.go index f63ddb994040..9a086b846795 100644 --- a/cluster-autoscaler/cloudprovider/builder/builder_civo.go +++ b/cluster-autoscaler/cloudprovider/builder/builder_civo.go @@ -22,7 +22,7 @@ package builder import ( "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/civo" - "k8s.io/autoscaler/cluster-autoscaler/config" + coreoptions "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/client-go/informers" ) @@ -34,7 +34,7 @@ var AvailableCloudProviders = []string{ // DefaultCloudProvider for Civo-only build is Civo. const DefaultCloudProvider = cloudprovider.CivoProviderName -func buildCloudProvider(opts config.AutoscalingOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, _ informers.SharedInformerFactory) cloudprovider.CloudProvider { +func buildCloudProvider(opts *coreoptions.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, _ informers.SharedInformerFactory) cloudprovider.CloudProvider { switch opts.CloudProviderName { case cloudprovider.CivoProviderName: return civo.BuildCivo(opts, do, rl) diff --git a/cluster-autoscaler/cloudprovider/builder/builder_cloudstack.go b/cluster-autoscaler/cloudprovider/builder/builder_cloudstack.go index eb32c4c83d7c..e8cef9aa3854 100644 --- a/cluster-autoscaler/cloudprovider/builder/builder_cloudstack.go +++ b/cluster-autoscaler/cloudprovider/builder/builder_cloudstack.go @@ -22,7 +22,7 @@ package builder import ( "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/cloudstack" - "k8s.io/autoscaler/cluster-autoscaler/config" + coreoptions "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/client-go/informers" ) @@ -34,7 +34,7 @@ var AvailableCloudProviders = []string{ // DefaultCloudProvider for cloudstack-only build is cloudstack. const DefaultCloudProvider = cloudprovider.CloudStackProviderName -func buildCloudProvider(opts config.AutoscalingOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, _ informers.SharedInformerFactory) cloudprovider.CloudProvider { +func buildCloudProvider(opts *coreoptions.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, _ informers.SharedInformerFactory) cloudprovider.CloudProvider { switch opts.CloudProviderName { case cloudprovider.CloudStackProviderName: return cloudstack.BuildCloudStack(opts, do, rl) diff --git a/cluster-autoscaler/cloudprovider/builder/builder_clusterapi.go b/cluster-autoscaler/cloudprovider/builder/builder_clusterapi.go index ca3b1947cd5d..113af18f8fca 100644 --- a/cluster-autoscaler/cloudprovider/builder/builder_clusterapi.go +++ b/cluster-autoscaler/cloudprovider/builder/builder_clusterapi.go @@ -22,7 +22,7 @@ package builder import ( "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/clusterapi" - "k8s.io/autoscaler/cluster-autoscaler/config" + coreoptions "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/client-go/informers" ) @@ -34,7 +34,7 @@ var AvailableCloudProviders = []string{ // DefaultCloudProvider for Cluster API-only build is Cluster API. const DefaultCloudProvider = cloudprovider.ClusterAPIProviderName -func buildCloudProvider(opts config.AutoscalingOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, _ informers.SharedInformerFactory) cloudprovider.CloudProvider { +func buildCloudProvider(opts *coreoptions.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, _ informers.SharedInformerFactory) cloudprovider.CloudProvider { switch opts.CloudProviderName { case cloudprovider.ClusterAPIProviderName: return clusterapi.BuildClusterAPI(opts, do, rl) diff --git a/cluster-autoscaler/cloudprovider/builder/builder_coreweave.go b/cluster-autoscaler/cloudprovider/builder/builder_coreweave.go index 87378cbc9f9d..d0e7cbb72ca6 100644 --- a/cluster-autoscaler/cloudprovider/builder/builder_coreweave.go +++ b/cluster-autoscaler/cloudprovider/builder/builder_coreweave.go @@ -22,7 +22,7 @@ package builder import ( "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/coreweave" - "k8s.io/autoscaler/cluster-autoscaler/config" + coreoptions "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/client-go/informers" ) @@ -34,6 +34,6 @@ var AvailableCloudProviders = []string{ // DefaultCloudProvider for coreweave-only build is coreweave. const DefaultCloudProvider = cloudprovider.CoreWeaveProviderName -func buildCloudProvider(opts config.AutoscalingOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, _ informers.SharedInformerFactory) cloudprovider.CloudProvider { +func buildCloudProvider(opts *coreoptions.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, _ informers.SharedInformerFactory) cloudprovider.CloudProvider { return coreweave.BuildCoreWeave(opts, do, rl) } diff --git a/cluster-autoscaler/cloudprovider/builder/builder_digitalocean.go b/cluster-autoscaler/cloudprovider/builder/builder_digitalocean.go index c7d9ba5a61f9..7152b082c4a4 100644 --- a/cluster-autoscaler/cloudprovider/builder/builder_digitalocean.go +++ b/cluster-autoscaler/cloudprovider/builder/builder_digitalocean.go @@ -22,7 +22,7 @@ package builder import ( "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/digitalocean" - "k8s.io/autoscaler/cluster-autoscaler/config" + coreoptions "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/client-go/informers" ) @@ -34,7 +34,7 @@ var AvailableCloudProviders = []string{ // DefaultCloudProvider for DigitalOcean-only build is DigitalOcean. const DefaultCloudProvider = cloudprovider.DigitalOceanProviderName -func buildCloudProvider(opts config.AutoscalingOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, _ informers.SharedInformerFactory) cloudprovider.CloudProvider { +func buildCloudProvider(opts *coreoptions.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, _ informers.SharedInformerFactory) cloudprovider.CloudProvider { switch opts.CloudProviderName { case cloudprovider.DigitalOceanProviderName: return digitalocean.BuildDigitalOcean(opts, do, rl) diff --git a/cluster-autoscaler/cloudprovider/builder/builder_equinixmetal.go b/cluster-autoscaler/cloudprovider/builder/builder_equinixmetal.go index e0c9b633e947..7f018ef29280 100644 --- a/cluster-autoscaler/cloudprovider/builder/builder_equinixmetal.go +++ b/cluster-autoscaler/cloudprovider/builder/builder_equinixmetal.go @@ -22,7 +22,7 @@ package builder import ( "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/equinixmetal" - "k8s.io/autoscaler/cluster-autoscaler/config" + coreoptions "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/client-go/informers" ) @@ -35,7 +35,7 @@ var AvailableCloudProviders = []string{ // DefaultCloudProvider for Packet or Equinix Metal-only build is Equinix Metal. const DefaultCloudProvider = cloudprovider.EquinixMetalProviderName -func buildCloudProvider(opts config.AutoscalingOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, _ informers.SharedInformerFactory) cloudprovider.CloudProvider { +func buildCloudProvider(opts *coreoptions.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, _ informers.SharedInformerFactory) cloudprovider.CloudProvider { switch opts.CloudProviderName { case cloudprovider.PacketProviderName, cloudprovider.EquinixMetalProviderName: return equinixmetal.BuildCloudProvider(opts, do, rl) diff --git a/cluster-autoscaler/cloudprovider/builder/builder_exoscale.go b/cluster-autoscaler/cloudprovider/builder/builder_exoscale.go index f2b22090691c..4ad225649f06 100644 --- a/cluster-autoscaler/cloudprovider/builder/builder_exoscale.go +++ b/cluster-autoscaler/cloudprovider/builder/builder_exoscale.go @@ -22,7 +22,7 @@ package builder import ( "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/exoscale" - "k8s.io/autoscaler/cluster-autoscaler/config" + coreoptions "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/client-go/informers" ) @@ -34,7 +34,7 @@ var AvailableCloudProviders = []string{ // DefaultCloudProvider for Exoscale-only build is Exoscale. const DefaultCloudProvider = cloudprovider.ExoscaleProviderName -func buildCloudProvider(opts config.AutoscalingOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, _ informers.SharedInformerFactory) cloudprovider.CloudProvider { +func buildCloudProvider(opts *coreoptions.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, _ informers.SharedInformerFactory) cloudprovider.CloudProvider { switch opts.CloudProviderName { case cloudprovider.ExoscaleProviderName: return exoscale.BuildExoscale(opts, do, rl) diff --git a/cluster-autoscaler/cloudprovider/builder/builder_externalgrpc.go b/cluster-autoscaler/cloudprovider/builder/builder_externalgrpc.go index 4e5dfdd2374b..81bf3b273c01 100644 --- a/cluster-autoscaler/cloudprovider/builder/builder_externalgrpc.go +++ b/cluster-autoscaler/cloudprovider/builder/builder_externalgrpc.go @@ -22,7 +22,7 @@ package builder import ( "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/externalgrpc" - "k8s.io/autoscaler/cluster-autoscaler/config" + coreoptions "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/client-go/informers" ) @@ -34,7 +34,7 @@ var AvailableCloudProviders = []string{ // DefaultCloudProvider for externalgrpc-only build is externalgrpc. const DefaultCloudProvider = cloudprovider.ExternalGrpcProviderName -func buildCloudProvider(opts config.AutoscalingOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, _ informers.SharedInformerFactory) cloudprovider.CloudProvider { +func buildCloudProvider(opts *coreoptions.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, _ informers.SharedInformerFactory) cloudprovider.CloudProvider { switch opts.CloudProviderName { case cloudprovider.ExternalGrpcProviderName: return externalgrpc.BuildExternalGrpc(opts, do, rl) diff --git a/cluster-autoscaler/cloudprovider/builder/builder_gce.go b/cluster-autoscaler/cloudprovider/builder/builder_gce.go index fc9dea05dde9..15b4016cacd7 100644 --- a/cluster-autoscaler/cloudprovider/builder/builder_gce.go +++ b/cluster-autoscaler/cloudprovider/builder/builder_gce.go @@ -22,7 +22,7 @@ package builder import ( "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/gce" - "k8s.io/autoscaler/cluster-autoscaler/config" + coreoptions "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/client-go/informers" ) @@ -34,7 +34,7 @@ var AvailableCloudProviders = []string{ // DefaultCloudProvider for GCE-only build is GCE. const DefaultCloudProvider = cloudprovider.GceProviderName -func buildCloudProvider(opts config.AutoscalingOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, _ informers.SharedInformerFactory) cloudprovider.CloudProvider { +func buildCloudProvider(opts *coreoptions.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, _ informers.SharedInformerFactory) cloudprovider.CloudProvider { switch opts.CloudProviderName { case cloudprovider.GceProviderName: return gce.BuildGCE(opts, do, rl) diff --git a/cluster-autoscaler/cloudprovider/builder/builder_hetzner.go b/cluster-autoscaler/cloudprovider/builder/builder_hetzner.go index 9ffdd85ae328..1119cafb6208 100644 --- a/cluster-autoscaler/cloudprovider/builder/builder_hetzner.go +++ b/cluster-autoscaler/cloudprovider/builder/builder_hetzner.go @@ -22,7 +22,7 @@ package builder import ( "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/hetzner" - "k8s.io/autoscaler/cluster-autoscaler/config" + coreoptions "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/client-go/informers" ) @@ -34,7 +34,7 @@ var AvailableCloudProviders = []string{ // DefaultCloudProvider for Hetzner-only build is Hetzner. const DefaultCloudProvider = cloudprovider.HetznerProviderName -func buildCloudProvider(opts config.AutoscalingOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, _ informers.SharedInformerFactory) cloudprovider.CloudProvider { +func buildCloudProvider(opts *coreoptions.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, _ informers.SharedInformerFactory) cloudprovider.CloudProvider { switch opts.CloudProviderName { case cloudprovider.HetznerProviderName: return hetzner.BuildHetzner(opts, do, rl) diff --git a/cluster-autoscaler/cloudprovider/builder/builder_huaweicloud.go b/cluster-autoscaler/cloudprovider/builder/builder_huaweicloud.go index c7a5007e5f98..e9ba1181df03 100644 --- a/cluster-autoscaler/cloudprovider/builder/builder_huaweicloud.go +++ b/cluster-autoscaler/cloudprovider/builder/builder_huaweicloud.go @@ -22,7 +22,7 @@ package builder import ( "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/huaweicloud" - "k8s.io/autoscaler/cluster-autoscaler/config" + coreoptions "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/client-go/informers" ) @@ -34,7 +34,7 @@ var AvailableCloudProviders = []string{ // DefaultCloudProvider for huaweicloud-only build is huaweicloud. const DefaultCloudProvider = cloudprovider.HuaweicloudProviderName -func buildCloudProvider(opts config.AutoscalingOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, _ informers.SharedInformerFactory) cloudprovider.CloudProvider { +func buildCloudProvider(opts *coreoptions.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, _ informers.SharedInformerFactory) cloudprovider.CloudProvider { switch opts.CloudProviderName { case cloudprovider.HuaweicloudProviderName: return huaweicloud.BuildHuaweiCloud(opts, do, rl) diff --git a/cluster-autoscaler/cloudprovider/builder/builder_ionoscloud.go b/cluster-autoscaler/cloudprovider/builder/builder_ionoscloud.go index 4fc73d53f341..9e28d8f99512 100644 --- a/cluster-autoscaler/cloudprovider/builder/builder_ionoscloud.go +++ b/cluster-autoscaler/cloudprovider/builder/builder_ionoscloud.go @@ -22,7 +22,7 @@ package builder import ( "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/ionoscloud" - "k8s.io/autoscaler/cluster-autoscaler/config" + coreoptions "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/client-go/informers" ) @@ -34,7 +34,7 @@ var AvailableCloudProviders = []string{ // DefaultCloudProvider for IonosCloud-only build is IonosCloud. const DefaultCloudProvider = cloudprovider.IonoscloudProviderName -func buildCloudProvider(opts config.AutoscalingOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, _ informers.SharedInformerFactory) cloudprovider.CloudProvider { +func buildCloudProvider(opts *coreoptions.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, _ informers.SharedInformerFactory) cloudprovider.CloudProvider { switch opts.CloudProviderName { case cloudprovider.IonoscloudProviderName: return ionoscloud.BuildIonosCloud(opts, do, rl) diff --git a/cluster-autoscaler/cloudprovider/builder/builder_kamatera.go b/cluster-autoscaler/cloudprovider/builder/builder_kamatera.go index 34e85c417fac..2f4f3fee1238 100644 --- a/cluster-autoscaler/cloudprovider/builder/builder_kamatera.go +++ b/cluster-autoscaler/cloudprovider/builder/builder_kamatera.go @@ -22,7 +22,7 @@ package builder import ( "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/kamatera" - "k8s.io/autoscaler/cluster-autoscaler/config" + coreoptions "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/client-go/informers" ) @@ -34,7 +34,7 @@ var AvailableCloudProviders = []string{ // DefaultCloudProvider for Kamatera-only build is Kamatera. const DefaultCloudProvider = cloudprovider.KamateraProviderName -func buildCloudProvider(opts config.AutoscalingOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, _ informers.SharedInformerFactory) cloudprovider.CloudProvider { +func buildCloudProvider(opts *coreoptions.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, _ informers.SharedInformerFactory) cloudprovider.CloudProvider { switch opts.CloudProviderName { case cloudprovider.KamateraProviderName: return kamatera.BuildKamatera(opts, do, rl) diff --git a/cluster-autoscaler/cloudprovider/builder/builder_kubemark.go b/cluster-autoscaler/cloudprovider/builder/builder_kubemark.go index a8ee0fcc1e8a..70e44d825ce6 100644 --- a/cluster-autoscaler/cloudprovider/builder/builder_kubemark.go +++ b/cluster-autoscaler/cloudprovider/builder/builder_kubemark.go @@ -22,7 +22,7 @@ package builder import ( "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/kubemark" - "k8s.io/autoscaler/cluster-autoscaler/config" + coreoptions "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/client-go/informers" ) @@ -34,7 +34,7 @@ var AvailableCloudProviders = []string{ // DefaultCloudProvider for Kubemark-only build is Kubemark. const DefaultCloudProvider = cloudprovider.KubemarkProviderName -func buildCloudProvider(opts config.AutoscalingOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, _ informers.SharedInformerFactory) cloudprovider.CloudProvider { +func buildCloudProvider(opts *coreoptions.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, _ informers.SharedInformerFactory) cloudprovider.CloudProvider { switch opts.CloudProviderName { case cloudprovider.KubemarkProviderName: return kubemark.BuildKubemark(opts, do, rl) diff --git a/cluster-autoscaler/cloudprovider/builder/builder_kwok.go b/cluster-autoscaler/cloudprovider/builder/builder_kwok.go index a254ac4246bc..1f1e0e8d1559 100644 --- a/cluster-autoscaler/cloudprovider/builder/builder_kwok.go +++ b/cluster-autoscaler/cloudprovider/builder/builder_kwok.go @@ -22,7 +22,7 @@ package builder import ( "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/kwok" - "k8s.io/autoscaler/cluster-autoscaler/config" + coreoptions "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/client-go/informers" ) @@ -35,7 +35,7 @@ var AvailableCloudProviders = []string{ // DefaultCloudProvider for Kwok-only build is Kwok. const DefaultCloudProvider = cloudprovider.KwokProviderName -func buildCloudProvider(opts config.AutoscalingOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, informerFactory informers.SharedInformerFactory) cloudprovider.CloudProvider { +func buildCloudProvider(opts *coreoptions.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, informerFactory informers.SharedInformerFactory) cloudprovider.CloudProvider { switch opts.CloudProviderName { case cloudprovider.KwokProviderName: return kwok.BuildKwok(opts, do, rl, informerFactory) diff --git a/cluster-autoscaler/cloudprovider/builder/builder_linode.go b/cluster-autoscaler/cloudprovider/builder/builder_linode.go index b8af94e1f679..a53105fba36c 100644 --- a/cluster-autoscaler/cloudprovider/builder/builder_linode.go +++ b/cluster-autoscaler/cloudprovider/builder/builder_linode.go @@ -22,7 +22,7 @@ package builder import ( "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/linode" - "k8s.io/autoscaler/cluster-autoscaler/config" + coreoptions "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/client-go/informers" ) @@ -34,7 +34,7 @@ var AvailableCloudProviders = []string{ // DefaultCloudProvider for linode-only build is linode. const DefaultCloudProvider = cloudprovider.LinodeProviderName -func buildCloudProvider(opts config.AutoscalingOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, _ informers.SharedInformerFactory) cloudprovider.CloudProvider { +func buildCloudProvider(opts *coreoptions.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, _ informers.SharedInformerFactory) cloudprovider.CloudProvider { switch opts.CloudProviderName { case cloudprovider.LinodeProviderName: return linode.BuildLinode(opts, do, rl) diff --git a/cluster-autoscaler/cloudprovider/builder/builder_magnum.go b/cluster-autoscaler/cloudprovider/builder/builder_magnum.go index ea14fd9803f8..e4a0432f318b 100644 --- a/cluster-autoscaler/cloudprovider/builder/builder_magnum.go +++ b/cluster-autoscaler/cloudprovider/builder/builder_magnum.go @@ -22,7 +22,7 @@ package builder import ( "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/magnum" - "k8s.io/autoscaler/cluster-autoscaler/config" + coreoptions "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/client-go/informers" ) @@ -34,7 +34,7 @@ var AvailableCloudProviders = []string{ // DefaultCloudProvider for Magnum-only build is Magnum. const DefaultCloudProvider = cloudprovider.MagnumProviderName -func buildCloudProvider(opts config.AutoscalingOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, _ informers.SharedInformerFactory) cloudprovider.CloudProvider { +func buildCloudProvider(opts *coreoptions.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, _ informers.SharedInformerFactory) cloudprovider.CloudProvider { switch opts.CloudProviderName { case cloudprovider.MagnumProviderName: return magnum.BuildMagnum(opts, do, rl) diff --git a/cluster-autoscaler/cloudprovider/builder/builder_oci.go b/cluster-autoscaler/cloudprovider/builder/builder_oci.go index fb33f55719b4..d5017ef04cea 100644 --- a/cluster-autoscaler/cloudprovider/builder/builder_oci.go +++ b/cluster-autoscaler/cloudprovider/builder/builder_oci.go @@ -22,7 +22,7 @@ package builder import ( "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" oci "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/oci/instancepools" - "k8s.io/autoscaler/cluster-autoscaler/config" + coreoptions "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/client-go/informers" ) @@ -34,7 +34,7 @@ var AvailableCloudProviders = []string{ // DefaultCloudProvider for oci-only build is oci. const DefaultCloudProvider = cloudprovider.OracleCloudProviderName -func buildCloudProvider(opts config.AutoscalingOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, _ informers.SharedInformerFactory) cloudprovider.CloudProvider { +func buildCloudProvider(opts *coreoptions.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, _ informers.SharedInformerFactory) cloudprovider.CloudProvider { switch opts.CloudProviderName { case cloudprovider.OracleCloudProviderName: return oci.BuildOCI(opts, do, rl) diff --git a/cluster-autoscaler/cloudprovider/builder/builder_ovhcloud.go b/cluster-autoscaler/cloudprovider/builder/builder_ovhcloud.go index 6e081209b68d..b25dd522a4ae 100644 --- a/cluster-autoscaler/cloudprovider/builder/builder_ovhcloud.go +++ b/cluster-autoscaler/cloudprovider/builder/builder_ovhcloud.go @@ -22,7 +22,7 @@ package builder import ( "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/ovhcloud" - "k8s.io/autoscaler/cluster-autoscaler/config" + coreoptions "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/client-go/informers" ) @@ -34,7 +34,7 @@ var AvailableCloudProviders = []string{ // DefaultCloudProvider for OVHcloud-only build is OVHcloud. const DefaultCloudProvider = cloudprovider.OVHcloudProviderName -func buildCloudProvider(opts config.AutoscalingOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, _ informers.SharedInformerFactory) cloudprovider.CloudProvider { +func buildCloudProvider(opts *coreoptions.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, _ informers.SharedInformerFactory) cloudprovider.CloudProvider { switch opts.CloudProviderName { case cloudprovider.OVHcloudProviderName: return ovhcloud.BuildOVHcloud(opts, do, rl) diff --git a/cluster-autoscaler/cloudprovider/builder/builder_rancher.go b/cluster-autoscaler/cloudprovider/builder/builder_rancher.go index ba240e62e954..aa0ff1e42fc1 100644 --- a/cluster-autoscaler/cloudprovider/builder/builder_rancher.go +++ b/cluster-autoscaler/cloudprovider/builder/builder_rancher.go @@ -22,7 +22,7 @@ package builder import ( "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/rancher" - "k8s.io/autoscaler/cluster-autoscaler/config" + coreoptions "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/client-go/informers" ) @@ -34,7 +34,7 @@ var AvailableCloudProviders = []string{ // DefaultCloudProvider for rancher-only build is rancher. const DefaultCloudProvider = cloudprovider.RancherProviderName -func buildCloudProvider(opts config.AutoscalingOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, _ informers.SharedInformerFactory) cloudprovider.CloudProvider { +func buildCloudProvider(opts *coreoptions.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, _ informers.SharedInformerFactory) cloudprovider.CloudProvider { switch opts.CloudProviderName { case cloudprovider.RancherProviderName: return rancher.BuildRancher(opts, do, rl) diff --git a/cluster-autoscaler/cloudprovider/builder/builder_scaleway.go b/cluster-autoscaler/cloudprovider/builder/builder_scaleway.go index 36ca6b314973..eb1ad9f05612 100644 --- a/cluster-autoscaler/cloudprovider/builder/builder_scaleway.go +++ b/cluster-autoscaler/cloudprovider/builder/builder_scaleway.go @@ -22,7 +22,7 @@ package builder import ( "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/scaleway" - "k8s.io/autoscaler/cluster-autoscaler/config" + coreoptions "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/client-go/informers" ) @@ -34,7 +34,7 @@ var AvailableCloudProviders = []string{ // DefaultCloudProvider for Scaleway-only build is Scaleway. const DefaultCloudProvider = cloudprovider.ScalewayProviderName -func buildCloudProvider(opts config.AutoscalingOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, _ informers.SharedInformerFactory) cloudprovider.CloudProvider { +func buildCloudProvider(opts *coreoptions.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, _ informers.SharedInformerFactory) cloudprovider.CloudProvider { switch opts.CloudProviderName { case cloudprovider.ScalewayProviderName: return scaleway.BuildScaleway(opts, do, rl) diff --git a/cluster-autoscaler/cloudprovider/builder/builder_tencentcloud.go b/cluster-autoscaler/cloudprovider/builder/builder_tencentcloud.go index 6b1e96684890..3600efc7805e 100644 --- a/cluster-autoscaler/cloudprovider/builder/builder_tencentcloud.go +++ b/cluster-autoscaler/cloudprovider/builder/builder_tencentcloud.go @@ -22,7 +22,7 @@ package builder import ( "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud" - "k8s.io/autoscaler/cluster-autoscaler/config" + coreoptions "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/client-go/informers" ) @@ -34,7 +34,7 @@ var AvailableCloudProviders = []string{ // DefaultCloudProvider for Tencent-only build is Tencent. const DefaultCloudProvider = cloudprovider.TencentcloudProviderName -func buildCloudProvider(opts config.AutoscalingOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, _ informers.SharedInformerFactory) cloudprovider.CloudProvider { +func buildCloudProvider(opts *coreoptions.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, _ informers.SharedInformerFactory) cloudprovider.CloudProvider { switch opts.CloudProviderName { case cloudprovider.TencentcloudProviderName: return tencentcloud.BuildTencentcloud(opts, do, rl) diff --git a/cluster-autoscaler/cloudprovider/builder/builder_utho.go b/cluster-autoscaler/cloudprovider/builder/builder_utho.go index 9e4bee94f858..032bdcf3ba36 100644 --- a/cluster-autoscaler/cloudprovider/builder/builder_utho.go +++ b/cluster-autoscaler/cloudprovider/builder/builder_utho.go @@ -22,7 +22,7 @@ package builder import ( "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/utho" - "k8s.io/autoscaler/cluster-autoscaler/config" + coreoptions "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/client-go/informers" ) @@ -34,7 +34,7 @@ var AvailableCloudProviders = []string{ // DefaultCloudProvider for utho-only build is utho. const DefaultCloudProvider = cloudprovider.UthoProviderName -func buildCloudProvider(opts config.AutoscalingOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, _ informers.SharedInformerFactory) cloudprovider.CloudProvider { +func buildCloudProvider(opts *coreoptions.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, _ informers.SharedInformerFactory) cloudprovider.CloudProvider { switch opts.CloudProviderName { case cloudprovider.UthoProviderName: return utho.BuildUtho(opts, do, rl) diff --git a/cluster-autoscaler/cloudprovider/builder/builder_volcengine.go b/cluster-autoscaler/cloudprovider/builder/builder_volcengine.go index 4be39817f923..f369162d914c 100644 --- a/cluster-autoscaler/cloudprovider/builder/builder_volcengine.go +++ b/cluster-autoscaler/cloudprovider/builder/builder_volcengine.go @@ -22,7 +22,7 @@ package builder import ( "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/volcengine" - "k8s.io/autoscaler/cluster-autoscaler/config" + coreoptions "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/client-go/informers" ) @@ -34,7 +34,7 @@ var AvailableCloudProviders = []string{ // DefaultCloudProvider for volcengine-only build is volcengine. const DefaultCloudProvider = cloudprovider.VolcengineProviderName -func buildCloudProvider(opts config.AutoscalingOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, _ informers.SharedInformerFactory) cloudprovider.CloudProvider { +func buildCloudProvider(opts *coreoptions.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, _ informers.SharedInformerFactory) cloudprovider.CloudProvider { switch opts.CloudProviderName { case cloudprovider.VolcengineProviderName: return volcengine.BuildVolcengine(opts, do, rl) diff --git a/cluster-autoscaler/cloudprovider/builder/builder_vultr.go b/cluster-autoscaler/cloudprovider/builder/builder_vultr.go index ca3f89fc2e4d..500e42dcfb07 100644 --- a/cluster-autoscaler/cloudprovider/builder/builder_vultr.go +++ b/cluster-autoscaler/cloudprovider/builder/builder_vultr.go @@ -22,7 +22,7 @@ package builder import ( "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/vultr" - "k8s.io/autoscaler/cluster-autoscaler/config" + coreoptions "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/client-go/informers" ) @@ -34,7 +34,7 @@ var AvailableCloudProviders = []string{ // DefaultCloudProvider for vultr-only build is vultr. const DefaultCloudProvider = cloudprovider.VultrProviderName -func buildCloudProvider(opts config.AutoscalingOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, _ informers.SharedInformerFactory) cloudprovider.CloudProvider { +func buildCloudProvider(opts *coreoptions.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, _ informers.SharedInformerFactory) cloudprovider.CloudProvider { switch opts.CloudProviderName { case cloudprovider.VultrProviderName: return vultr.BuildVultr(opts, do, rl) diff --git a/cluster-autoscaler/cloudprovider/builder/cloud_provider_builder.go b/cluster-autoscaler/cloudprovider/builder/cloud_provider_builder.go index 1c23501fbdc5..f64ae959cb0f 100644 --- a/cluster-autoscaler/cloudprovider/builder/cloud_provider_builder.go +++ b/cluster-autoscaler/cloudprovider/builder/cloud_provider_builder.go @@ -19,14 +19,14 @@ package builder import ( "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" "k8s.io/autoscaler/cluster-autoscaler/context" - "k8s.io/autoscaler/cluster-autoscaler/core/options" + coreoptions "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/client-go/informers" klog "k8s.io/klog/v2" ) // NewCloudProvider builds a cloud provider from provided parameters. -func NewCloudProvider(opts *options.AutoscalerOptions, informerFactory informers.SharedInformerFactory) cloudprovider.CloudProvider { +func NewCloudProvider(opts *coreoptions.AutoscalerOptions, informerFactory informers.SharedInformerFactory) cloudprovider.CloudProvider { klog.V(1).Infof("Building %s cloud provider.", opts.CloudProviderName) do := cloudprovider.NodeGroupDiscoveryOptions{ diff --git a/cluster-autoscaler/cloudprovider/cherryservers/cherry_cloud_provider.go b/cluster-autoscaler/cloudprovider/cherryservers/cherry_cloud_provider.go index 9e4f25475c92..7ed5a106c9e3 100644 --- a/cluster-autoscaler/cloudprovider/cherryservers/cherry_cloud_provider.go +++ b/cluster-autoscaler/cloudprovider/cherryservers/cherry_cloud_provider.go @@ -25,7 +25,7 @@ import ( "k8s.io/apimachinery/pkg/api/resource" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" "k8s.io/autoscaler/cluster-autoscaler/config/dynamic" - "k8s.io/autoscaler/cluster-autoscaler/core/options" + coreoptions "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/autoscaler/cluster-autoscaler/utils/errors" "k8s.io/autoscaler/cluster-autoscaler/utils/gpu" klog "k8s.io/klog/v2" @@ -174,7 +174,7 @@ func (ccp *cherryCloudProvider) Cleanup() error { // // The cherryManager is created here, and the node groups are created // based on the specs provided via the command line parameters. -func BuildCherry(opts *options.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { +func BuildCherry(opts *coreoptions.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { var config io.ReadCloser if opts.CloudConfig != "" { diff --git a/cluster-autoscaler/cloudprovider/civo/civo_cloud_provider.go b/cluster-autoscaler/cloudprovider/civo/civo_cloud_provider.go index 477c253284b9..0bce4404da76 100644 --- a/cluster-autoscaler/cloudprovider/civo/civo_cloud_provider.go +++ b/cluster-autoscaler/cloudprovider/civo/civo_cloud_provider.go @@ -25,7 +25,7 @@ import ( apiv1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" - "k8s.io/autoscaler/cluster-autoscaler/core/options" + coreoptions "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/autoscaler/cluster-autoscaler/utils/errors" "k8s.io/autoscaler/cluster-autoscaler/utils/gpu" "k8s.io/klog/v2" @@ -169,7 +169,7 @@ func (d *civoCloudProvider) Refresh() error { // BuildCivo builds the Civo cloud provider. func BuildCivo( - opts *options.AutoscalerOptions, + opts *coreoptions.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, ) cloudprovider.CloudProvider { diff --git a/cluster-autoscaler/cloudprovider/cloudstack/cloudstack_cloud_provider.go b/cluster-autoscaler/cloudprovider/cloudstack/cloudstack_cloud_provider.go index 33dcec493823..420a9363eac6 100644 --- a/cluster-autoscaler/cloudprovider/cloudstack/cloudstack_cloud_provider.go +++ b/cluster-autoscaler/cloudprovider/cloudstack/cloudstack_cloud_provider.go @@ -24,7 +24,7 @@ import ( "k8s.io/apimachinery/pkg/api/resource" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" "k8s.io/autoscaler/cluster-autoscaler/config" - "k8s.io/autoscaler/cluster-autoscaler/core/options" + coreoptions "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/autoscaler/cluster-autoscaler/utils/errors" "k8s.io/autoscaler/cluster-autoscaler/utils/gpu" @@ -150,7 +150,7 @@ func createClusterConfig(opts config.AutoscalingOptions) (*clusterConfig, error) } // BuildCloudStack builds CloudProvider implementation for CloudStack -func BuildCloudStack(opts *options.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { +func BuildCloudStack(opts *coreoptions.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { config, err := createClusterConfig(opts.AutoscalingOptions) if err != nil { diff --git a/cluster-autoscaler/cloudprovider/clusterapi/clusterapi_controller.go b/cluster-autoscaler/cloudprovider/clusterapi/clusterapi_controller.go index b3b7175dfa95..a3e03e9703c3 100644 --- a/cluster-autoscaler/cloudprovider/clusterapi/clusterapi_controller.go +++ b/cluster-autoscaler/cloudprovider/clusterapi/clusterapi_controller.go @@ -849,6 +849,27 @@ func (c *machineController) listMachinesForScalableResource(r *unstructured.Unst } } +func (c *machineController) listMachineSetsForMachineDeployment(r *unstructured.Unstructured) ([]*unstructured.Unstructured, error) { + selector := labels.SelectorFromSet(map[string]string{ + machineDeploymentNameLabel: r.GetName(), + }) + objs, err := c.machineSetInformer.Lister().ByNamespace(r.GetNamespace()).List(selector) + if err != nil { + return nil, fmt.Errorf("unable to list MachineSets for MachineDeployment %s: %w", r.GetName(), err) + } + + results := make([]*unstructured.Unstructured, 0, len(objs)) + for _, x := range objs { + u, ok := x.(*unstructured.Unstructured) + if !ok { + return nil, fmt.Errorf("expected unstructured resource from lister, not %T", x) + } + results = append(results, u.DeepCopy()) + } + + return results, nil +} + func (c *machineController) listScalableResources() ([]*unstructured.Unstructured, error) { scalableResources, err := c.listResources(c.machineSetInformer.Lister()) if err != nil { diff --git a/cluster-autoscaler/cloudprovider/clusterapi/clusterapi_nodegroup.go b/cluster-autoscaler/cloudprovider/clusterapi/clusterapi_nodegroup.go index d68a48b89c3f..4b6bb1b2905a 100644 --- a/cluster-autoscaler/cloudprovider/clusterapi/clusterapi_nodegroup.go +++ b/cluster-autoscaler/cloudprovider/clusterapi/clusterapi_nodegroup.go @@ -458,6 +458,68 @@ func (ng *nodegroup) GetOptions(defaults config.NodeGroupAutoscalingOptions) (*c return &defaults, nil } +func (ng *nodegroup) IsMachineDeploymentAndRollingOut() (bool, error) { + if ng.scalableResource.Kind() != machineDeploymentKind { + // Not a MachineDeployment. + return false, nil + } + + machineSets, err := ng.machineController.listMachineSetsForMachineDeployment(ng.scalableResource.unstructured) + if err != nil { + return false, err + } + + if len(machineSets) == 0 { + // No MachineSets => MD is not rolling out. + return false, nil + } + + // Find the latest revision, the MachineSet with the latest revision is the MachineSet that + // matches the MachineDeployment spec. + var latestMSRevisionInt int64 + for _, ms := range machineSets { + msRevision, ok := ms.GetAnnotations()[machineDeploymentRevisionAnnotation] + if !ok { + continue + } + + msRevisionInt, err := strconv.ParseInt(msRevision, 10, 64) + if err != nil { + return false, errors.Wrapf(err, "failed to parse current revision on MachineSet %s", klog.KObj(ms)) + } + latestMSRevisionInt = max(latestMSRevisionInt, msRevisionInt) + } + maxMSRevision := strconv.FormatInt(latestMSRevisionInt, 10) + + for _, ms := range machineSets { + if ms.GetAnnotations()[machineDeploymentRevisionAnnotation] == maxMSRevision { + // Ignore the MachineSet with the latest revision + continue + } + + // Check if any of the old MachineSets still have replicas + replicas, found, err := unstructured.NestedInt64(ms.UnstructuredContent(), "spec", "replicas") + if err != nil { + return false, errors.Wrapf(err, "failed to find spec replicas on MachineSet %s", klog.KObj(ms)) + } + if found && replicas > 0 { + // Found old MachineSets that still has replicas => MD is still rolling out. + return true, nil + } + replicas, found, err = unstructured.NestedInt64(ms.UnstructuredContent(), "status", "replicas") + if err != nil { + return false, errors.Wrapf(err, "failed to find status replicas on MachineSet %s", klog.KObj(ms)) + } + if found && replicas > 0 { + // Found old MachineSets that still has replicas => MD is still rolling out. + return true, nil + } + } + + // Didn't find any old MachineSets that still have replicas => MD is not rolling out. + return false, nil +} + func newNodeGroupFromScalableResource(controller *machineController, unstructuredScalableResource *unstructured.Unstructured) (*nodegroup, error) { // Ensure that the resulting node group would be allowed based on the autodiscovery specs if defined if !controller.allowedByAutoDiscoverySpecs(unstructuredScalableResource) { diff --git a/cluster-autoscaler/cloudprovider/clusterapi/clusterapi_processors.go b/cluster-autoscaler/cloudprovider/clusterapi/clusterapi_processors.go new file mode 100644 index 000000000000..b9a9a642f2c7 --- /dev/null +++ b/cluster-autoscaler/cloudprovider/clusterapi/clusterapi_processors.go @@ -0,0 +1,80 @@ +/* +Copyright 2025 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. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package clusterapi + +import ( + apiv1 "k8s.io/api/core/v1" + "k8s.io/autoscaler/cluster-autoscaler/context" + "k8s.io/autoscaler/cluster-autoscaler/utils/errors" + klog "k8s.io/klog/v2" +) + +// ScaleDownNodeUpgradeProcessor is a processor to filter out +// nodes that are undergoing an upgrade through a MachineDeployment. +type ScaleDownNodeUpgradeProcessor struct { + controller *machineController +} + +// NewScaleDownNodeUpgradeProcessor returns a new ScaleDownNodeUpgradeProcessor for use when +// registering a new upgrade scale down processor. +func NewScaleDownNodeUpgradeProcessor(c *machineController) *ScaleDownNodeUpgradeProcessor { + return &ScaleDownNodeUpgradeProcessor{controller: c} +} + +// GetPodDestinationCandidates returns nodes as is no processing is required here +func (p *ScaleDownNodeUpgradeProcessor) GetPodDestinationCandidates(ctx *context.AutoscalingContext, + nodes []*apiv1.Node) ([]*apiv1.Node, errors.AutoscalerError) { + return nodes, nil +} + +// GetScaleDownCandidates returns filter nodes based on if scale down is enabled or disabled per nodegroup. +func (p *ScaleDownNodeUpgradeProcessor) GetScaleDownCandidates(ctx *context.AutoscalingContext, + nodes []*apiv1.Node) ([]*apiv1.Node, errors.AutoscalerError) { + result := []*apiv1.Node{} + + for _, node := range nodes { + // check scale down, continue if not good + ng, err := p.controller.nodeGroupForNode(node) + if err != nil { + klog.Warningf("Error while checking node group for node %s: %v", node.Name, err) + continue + } + if ng == nil { + // this is at level 6 because the core scale down processor will already log this info + klog.V(6).Infof("Node %s will be skipped as it does not belong to a node group", node.Name) + continue + } + + rollingout, err := ng.IsMachineDeploymentAndRollingOut() + if err != nil { + klog.Warningf("Failed to determine rolling out status for MachineDeployment %s: %v", ng.scalableResource.ID(), err) + continue + } + + // A node is a good candidate for scale down if it is not currently part of a MachineDeployment that is rolling out. + if rollingout { + klog.V(4).Infof("Node %s will be skipped as it is currently under rollout", node.Name) + continue + } + result = append(result, node) + } + return result, nil +} + +// CleanUp is called at CA termination. +func (p *ScaleDownNodeUpgradeProcessor) CleanUp() { +} diff --git a/cluster-autoscaler/cloudprovider/clusterapi/clusterapi_provider.go b/cluster-autoscaler/cloudprovider/clusterapi/clusterapi_provider.go index 698ce8d2f04c..ac810fdbed2b 100644 --- a/cluster-autoscaler/cloudprovider/clusterapi/clusterapi_provider.go +++ b/cluster-autoscaler/cloudprovider/clusterapi/clusterapi_provider.go @@ -33,8 +33,8 @@ import ( klog "k8s.io/klog/v2" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" - "k8s.io/autoscaler/cluster-autoscaler/core/options" - "k8s.io/autoscaler/cluster-autoscaler/utils/errors" + coreoptions "k8s.io/autoscaler/cluster-autoscaler/core/options" + errors "k8s.io/autoscaler/cluster-autoscaler/utils/errors" "k8s.io/autoscaler/cluster-autoscaler/utils/gpu" ) @@ -153,7 +153,7 @@ func newProvider( } // BuildClusterAPI builds CloudProvider implementation for machine api. -func BuildClusterAPI(opts *options.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { +func BuildClusterAPI(opts *coreoptions.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { managementKubeconfig := opts.CloudConfig if managementKubeconfig == "" && !opts.ClusterAPICloudConfigAuthoritative { managementKubeconfig = opts.KubeClientOpts.KubeConfigPath @@ -210,6 +210,9 @@ func BuildClusterAPI(opts *options.AutoscalerOptions, do cloudprovider.NodeGroup klog.Fatal(err) } + scaleDownUpgradeProcessor := NewScaleDownNodeUpgradeProcessor(controller) + opts.RegisterScaleDownNodeProcessor(scaleDownUpgradeProcessor) + if err := controller.run(); err != nil { klog.Fatal(err) } diff --git a/cluster-autoscaler/cloudprovider/clusterapi/clusterapi_utils.go b/cluster-autoscaler/cloudprovider/clusterapi/clusterapi_utils.go index f28721f49b74..03b86adce90d 100644 --- a/cluster-autoscaler/cloudprovider/clusterapi/clusterapi_utils.go +++ b/cluster-autoscaler/cloudprovider/clusterapi/clusterapi_utils.go @@ -32,15 +32,17 @@ import ( ) const ( - cpuKey = "capacity.cluster-autoscaler.kubernetes.io/cpu" - memoryKey = "capacity.cluster-autoscaler.kubernetes.io/memory" - diskCapacityKey = "capacity.cluster-autoscaler.kubernetes.io/ephemeral-disk" - gpuTypeKey = "capacity.cluster-autoscaler.kubernetes.io/gpu-type" - gpuCountKey = "capacity.cluster-autoscaler.kubernetes.io/gpu-count" - maxPodsKey = "capacity.cluster-autoscaler.kubernetes.io/maxPods" - taintsKey = "capacity.cluster-autoscaler.kubernetes.io/taints" - labelsKey = "capacity.cluster-autoscaler.kubernetes.io/labels" - draDriverKey = "capacity.cluster-autoscaler.kubernetes.io/dra-driver" + cpuKey = "capacity.cluster-autoscaler.kubernetes.io/cpu" + memoryKey = "capacity.cluster-autoscaler.kubernetes.io/memory" + diskCapacityKey = "capacity.cluster-autoscaler.kubernetes.io/ephemeral-disk" + gpuTypeKey = "capacity.cluster-autoscaler.kubernetes.io/gpu-type" + gpuCountKey = "capacity.cluster-autoscaler.kubernetes.io/gpu-count" + maxPodsKey = "capacity.cluster-autoscaler.kubernetes.io/maxPods" + taintsKey = "capacity.cluster-autoscaler.kubernetes.io/taints" + labelsKey = "capacity.cluster-autoscaler.kubernetes.io/labels" + draDriverKey = "capacity.cluster-autoscaler.kubernetes.io/dra-driver" + machineDeploymentRevisionAnnotation = "machinedeployment.clusters.x-k8s.io/revision" + machineDeploymentNameLabel = "cluster.x-k8s.io/deployment-name" // UnknownArch is used if the Architecture is Unknown UnknownArch SystemArchitecture = "" // Amd64 is used if the Architecture is x86_64 diff --git a/cluster-autoscaler/cloudprovider/coreweave/coreweave_provider.go b/cluster-autoscaler/cloudprovider/coreweave/coreweave_provider.go index 610011783306..17233900dee0 100644 --- a/cluster-autoscaler/cloudprovider/coreweave/coreweave_provider.go +++ b/cluster-autoscaler/cloudprovider/coreweave/coreweave_provider.go @@ -23,7 +23,7 @@ import ( "k8s.io/apimachinery/pkg/api/resource" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" "k8s.io/autoscaler/cluster-autoscaler/config" - "k8s.io/autoscaler/cluster-autoscaler/core/options" + coreoptions "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/autoscaler/cluster-autoscaler/utils/errors" kube_util "k8s.io/autoscaler/cluster-autoscaler/utils/kubernetes" "k8s.io/klog/v2" @@ -183,7 +183,7 @@ func (c *CoreWeaveCloudProvider) Refresh() error { } // BuildCoreWeave builds the CoreWeave cloud provider with the given options and returns it. -func BuildCoreWeave(opts *options.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { +func BuildCoreWeave(opts *coreoptions.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { klog.V(4).Infof("Building CoreWeave cloud provider with options: %+v", opts.AutoscalingOptions) return NewCoreWeaveCloudProvider(rl, opts.AutoscalingOptions) } diff --git a/cluster-autoscaler/cloudprovider/digitalocean/digitalocean_cloud_provider.go b/cluster-autoscaler/cloudprovider/digitalocean/digitalocean_cloud_provider.go index 3c467ff363e1..7c6af7762f25 100644 --- a/cluster-autoscaler/cloudprovider/digitalocean/digitalocean_cloud_provider.go +++ b/cluster-autoscaler/cloudprovider/digitalocean/digitalocean_cloud_provider.go @@ -25,7 +25,7 @@ import ( apiv1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" - "k8s.io/autoscaler/cluster-autoscaler/core/options" + coreoptions "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/autoscaler/cluster-autoscaler/utils/errors" "k8s.io/autoscaler/cluster-autoscaler/utils/gpu" "k8s.io/klog/v2" @@ -171,7 +171,7 @@ func (d *digitaloceanCloudProvider) Refresh() error { // BuildDigitalOcean builds the DigitalOcean cloud provider. func BuildDigitalOcean( - opts *options.AutoscalerOptions, + opts *coreoptions.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, ) cloudprovider.CloudProvider { diff --git a/cluster-autoscaler/cloudprovider/equinixmetal/cloud_provider.go b/cluster-autoscaler/cloudprovider/equinixmetal/cloud_provider.go index cd3b3660ad36..cf34c256d3c7 100644 --- a/cluster-autoscaler/cloudprovider/equinixmetal/cloud_provider.go +++ b/cluster-autoscaler/cloudprovider/equinixmetal/cloud_provider.go @@ -29,7 +29,7 @@ import ( "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" "k8s.io/autoscaler/cluster-autoscaler/config/dynamic" - "k8s.io/autoscaler/cluster-autoscaler/core/options" + coreoptions "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/autoscaler/cluster-autoscaler/utils/errors" "k8s.io/autoscaler/cluster-autoscaler/utils/gpu" ) @@ -180,7 +180,7 @@ func (pcp *equinixMetalCloudProvider) Cleanup() error { // // The equinixMetalManager is created here, and the node groups are created // based on the specs provided via the command line parameters. -func BuildCloudProvider(opts *options.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { +func BuildCloudProvider(opts *coreoptions.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { var config io.ReadCloser if opts.CloudConfig != "" { diff --git a/cluster-autoscaler/cloudprovider/exoscale/exoscale_cloud_provider.go b/cluster-autoscaler/cloudprovider/exoscale/exoscale_cloud_provider.go index f22ad36cb5e0..4b27350e5a74 100644 --- a/cluster-autoscaler/cloudprovider/exoscale/exoscale_cloud_provider.go +++ b/cluster-autoscaler/cloudprovider/exoscale/exoscale_cloud_provider.go @@ -24,7 +24,7 @@ import ( "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" egoscale "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/exoscale/internal/github.com/exoscale/egoscale/v2" "k8s.io/autoscaler/cluster-autoscaler/config/dynamic" - "k8s.io/autoscaler/cluster-autoscaler/core/options" + coreoptions "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/autoscaler/cluster-autoscaler/utils/errors" "k8s.io/autoscaler/cluster-autoscaler/utils/gpu" ) @@ -225,7 +225,7 @@ func (e *exoscaleCloudProvider) Refresh() error { } // BuildExoscale builds the Exoscale cloud provider. -func BuildExoscale(_ *options.AutoscalerOptions, discoveryOpts cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { +func BuildExoscale(_ *coreoptions.AutoscalerOptions, discoveryOpts cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { manager, err := newManager(discoveryOpts) if err != nil { fatalf("failed to initialize manager: %v", err) diff --git a/cluster-autoscaler/cloudprovider/externalgrpc/examples/external-grpc-cloud-provider-service/main.go b/cluster-autoscaler/cloudprovider/externalgrpc/examples/external-grpc-cloud-provider-service/main.go index f2742ff72e7a..bf29963a1509 100644 --- a/cluster-autoscaler/cloudprovider/externalgrpc/examples/external-grpc-cloud-provider-service/main.go +++ b/cluster-autoscaler/cloudprovider/externalgrpc/examples/external-grpc-cloud-provider-service/main.go @@ -31,6 +31,7 @@ import ( "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/externalgrpc/protos" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/gce/localssdsize" "k8s.io/autoscaler/cluster-autoscaler/config" + coreoptions "k8s.io/autoscaler/cluster-autoscaler/core/options" kube_flag "k8s.io/component-base/cli/flag" klog "k8s.io/klog/v2" ) @@ -115,17 +116,19 @@ func main() { } //cloud provider config - autoscalingOptions := config.AutoscalingOptions{ - CloudProviderName: *cloudProviderFlag, - CloudConfig: *cloudConfig, - NodeGroupAutoDiscovery: *nodeGroupAutoDiscoveryFlag, - NodeGroups: *nodeGroupsFlag, - ClusterName: *clusterName, - GCEOptions: config.GCEOptions{ - ConcurrentRefreshes: 1, - LocalSSDDiskSizeProvider: localssdsize.NewSimpleLocalSSDProvider(), + autoscalingOptions := &coreoptions.AutoscalerOptions{ + AutoscalingOptions: config.AutoscalingOptions{ + CloudProviderName: *cloudProviderFlag, + CloudConfig: *cloudConfig, + NodeGroupAutoDiscovery: *nodeGroupAutoDiscoveryFlag, + NodeGroups: *nodeGroupsFlag, + ClusterName: *clusterName, + GCEOptions: config.GCEOptions{ + ConcurrentRefreshes: 1, + LocalSSDDiskSizeProvider: localssdsize.NewSimpleLocalSSDProvider(), + }, + UserAgent: "user-agent", }, - UserAgent: "user-agent", } cloudProvider := cloudBuilder.NewCloudProvider(autoscalingOptions, nil) srv := wrapper.NewCloudProviderGrpcWrapper(cloudProvider) diff --git a/cluster-autoscaler/cloudprovider/externalgrpc/externalgrpc_cloud_provider.go b/cluster-autoscaler/cloudprovider/externalgrpc/externalgrpc_cloud_provider.go index ce870a921e2f..dc4cb34e4ba8 100644 --- a/cluster-autoscaler/cloudprovider/externalgrpc/externalgrpc_cloud_provider.go +++ b/cluster-autoscaler/cloudprovider/externalgrpc/externalgrpc_cloud_provider.go @@ -35,7 +35,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/externalgrpc/protos" - "k8s.io/autoscaler/cluster-autoscaler/core/options" + coreoptions "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/autoscaler/cluster-autoscaler/utils/errors" "k8s.io/autoscaler/cluster-autoscaler/utils/gpu" klog "k8s.io/klog/v2" @@ -318,7 +318,7 @@ func (e *externalGrpcCloudProvider) Refresh() error { // BuildExternalGrpc builds the externalgrpc cloud provider. func BuildExternalGrpc( - opts *options.AutoscalerOptions, + opts *coreoptions.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, ) cloudprovider.CloudProvider { diff --git a/cluster-autoscaler/cloudprovider/gce/gce_cloud_provider.go b/cluster-autoscaler/cloudprovider/gce/gce_cloud_provider.go index 18a7b4908e55..7a7b4350e92a 100644 --- a/cluster-autoscaler/cloudprovider/gce/gce_cloud_provider.go +++ b/cluster-autoscaler/cloudprovider/gce/gce_cloud_provider.go @@ -26,7 +26,7 @@ import ( "k8s.io/apimachinery/pkg/api/resource" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" "k8s.io/autoscaler/cluster-autoscaler/config" - "k8s.io/autoscaler/cluster-autoscaler/core/options" + coreoptions "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/autoscaler/cluster-autoscaler/simulator/framework" "k8s.io/autoscaler/cluster-autoscaler/utils/errors" "k8s.io/autoscaler/cluster-autoscaler/utils/gpu" @@ -388,7 +388,7 @@ func (mig *gceMig) TemplateNodeInfo() (*framework.NodeInfo, error) { } // BuildGCE builds GCE cloud provider, manager etc. -func BuildGCE(opts *options.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { +func BuildGCE(opts *coreoptions.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { var config io.ReadCloser if opts.CloudConfig != "" { var err error diff --git a/cluster-autoscaler/cloudprovider/hetzner/hetzner_cloud_provider.go b/cluster-autoscaler/cloudprovider/hetzner/hetzner_cloud_provider.go index 9d3a21f092ba..c1570d867600 100644 --- a/cluster-autoscaler/cloudprovider/hetzner/hetzner_cloud_provider.go +++ b/cluster-autoscaler/cloudprovider/hetzner/hetzner_cloud_provider.go @@ -30,7 +30,7 @@ import ( "k8s.io/apimachinery/pkg/api/resource" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/hetzner/hcloud-go/hcloud" - "k8s.io/autoscaler/cluster-autoscaler/core/options" + coreoptions "k8s.io/autoscaler/cluster-autoscaler/core/options" autoscalerErrors "k8s.io/autoscaler/cluster-autoscaler/utils/errors" "k8s.io/autoscaler/cluster-autoscaler/utils/gpu" "k8s.io/klog/v2" @@ -183,7 +183,7 @@ func (d *HetznerCloudProvider) Refresh() error { } // BuildHetzner builds the Hetzner cloud provider. -func BuildHetzner(_ *options.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { +func BuildHetzner(_ *coreoptions.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { manager, err := newManager() if err != nil { klog.Fatalf("Failed to create Hetzner manager: %v", err) diff --git a/cluster-autoscaler/cloudprovider/huaweicloud/huaweicloud_cloud_provider.go b/cluster-autoscaler/cloudprovider/huaweicloud/huaweicloud_cloud_provider.go index 5836137a1f2f..208d707b5a32 100644 --- a/cluster-autoscaler/cloudprovider/huaweicloud/huaweicloud_cloud_provider.go +++ b/cluster-autoscaler/cloudprovider/huaweicloud/huaweicloud_cloud_provider.go @@ -25,7 +25,7 @@ import ( "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" "k8s.io/autoscaler/cluster-autoscaler/config" "k8s.io/autoscaler/cluster-autoscaler/config/dynamic" - "k8s.io/autoscaler/cluster-autoscaler/core/options" + coreoptions "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/autoscaler/cluster-autoscaler/utils/errors" "k8s.io/autoscaler/cluster-autoscaler/utils/gpu" klog "k8s.io/klog/v2" @@ -213,7 +213,7 @@ func (hcp *huaweicloudCloudProvider) addAsg(asg *AutoScalingGroup) { } // BuildHuaweiCloud is called by the autoscaler/cluster-autoscaler/builder to build a huaweicloud cloud provider. -func BuildHuaweiCloud(opts *options.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { +func BuildHuaweiCloud(opts *coreoptions.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { if len(opts.CloudConfig) == 0 { klog.Fatalf("cloud config is missing.") } diff --git a/cluster-autoscaler/cloudprovider/ionoscloud/ionoscloud_cloud_provider.go b/cluster-autoscaler/cloudprovider/ionoscloud/ionoscloud_cloud_provider.go index c60e232e6f20..c5c93de0e3af 100644 --- a/cluster-autoscaler/cloudprovider/ionoscloud/ionoscloud_cloud_provider.go +++ b/cluster-autoscaler/cloudprovider/ionoscloud/ionoscloud_cloud_provider.go @@ -24,7 +24,7 @@ import ( "k8s.io/apimachinery/pkg/api/resource" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" "k8s.io/autoscaler/cluster-autoscaler/config" - "k8s.io/autoscaler/cluster-autoscaler/core/options" + coreoptions "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/autoscaler/cluster-autoscaler/simulator/framework" caerrors "k8s.io/autoscaler/cluster-autoscaler/utils/errors" "k8s.io/autoscaler/cluster-autoscaler/utils/gpu" @@ -311,7 +311,7 @@ func (ic *IonosCloudCloudProvider) Refresh() error { // BuildIonosCloud builds the IonosCloud cloud provider. func BuildIonosCloud( - opts *options.AutoscalerOptions, + opts *coreoptions.AutoscalerOptions, _ cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, ) cloudprovider.CloudProvider { diff --git a/cluster-autoscaler/cloudprovider/kamatera/kamatera_cloud_provider.go b/cluster-autoscaler/cloudprovider/kamatera/kamatera_cloud_provider.go index fe72e5526671..d606effe1b72 100644 --- a/cluster-autoscaler/cloudprovider/kamatera/kamatera_cloud_provider.go +++ b/cluster-autoscaler/cloudprovider/kamatera/kamatera_cloud_provider.go @@ -29,7 +29,7 @@ import ( "k8s.io/apimachinery/pkg/api/resource" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" "k8s.io/autoscaler/cluster-autoscaler/config" - "k8s.io/autoscaler/cluster-autoscaler/core/options" + coreoptions "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/autoscaler/cluster-autoscaler/utils/errors" "k8s.io/autoscaler/cluster-autoscaler/utils/gpu" klog "k8s.io/klog/v2" @@ -132,7 +132,7 @@ func (k *kamateraCloudProvider) Refresh() error { // BuildKamatera builds the Kamatera cloud provider. func BuildKamatera( - opts *options.AutoscalerOptions, + opts *coreoptions.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, ) cloudprovider.CloudProvider { diff --git a/cluster-autoscaler/cloudprovider/kubemark/kubemark_linux.go b/cluster-autoscaler/cloudprovider/kubemark/kubemark_linux.go index a38148a1e616..da8ac094a966 100644 --- a/cluster-autoscaler/cloudprovider/kubemark/kubemark_linux.go +++ b/cluster-autoscaler/cloudprovider/kubemark/kubemark_linux.go @@ -32,6 +32,7 @@ import ( "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" "k8s.io/autoscaler/cluster-autoscaler/config" "k8s.io/autoscaler/cluster-autoscaler/config/dynamic" + coreoptions "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/autoscaler/cluster-autoscaler/simulator/framework" "k8s.io/autoscaler/cluster-autoscaler/utils/errors" "k8s.io/autoscaler/cluster-autoscaler/utils/gpu" @@ -342,7 +343,7 @@ func buildNodeGroup(value string, kubemarkController *kubemark.KubemarkControlle } // BuildKubemark builds Kubemark cloud provider. -func BuildKubemark(opts config.AutoscalingOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { +func BuildKubemark(opts *coreoptions.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { externalConfig, err := rest.InClusterConfig() if err != nil { klog.Fatalf("Failed to get kubeclient config for external cluster: %v", err) diff --git a/cluster-autoscaler/cloudprovider/kwok/kwok_provider.go b/cluster-autoscaler/cloudprovider/kwok/kwok_provider.go index 6664cfc1f507..e56b3f05db27 100644 --- a/cluster-autoscaler/cloudprovider/kwok/kwok_provider.go +++ b/cluster-autoscaler/cloudprovider/kwok/kwok_provider.go @@ -23,7 +23,7 @@ import ( "strings" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" - "k8s.io/autoscaler/cluster-autoscaler/core/options" + coreoptions "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/autoscaler/cluster-autoscaler/utils/errors" "k8s.io/autoscaler/cluster-autoscaler/utils/gpu" kube_util "k8s.io/autoscaler/cluster-autoscaler/utils/kubernetes" @@ -171,7 +171,7 @@ func (kwok *KwokCloudProvider) Cleanup() error { } // BuildKwok builds kwok cloud provider. -func BuildKwok(opts *options.AutoscalerOptions, +func BuildKwok(opts *coreoptions.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, informerFactory informers.SharedInformerFactory) cloudprovider.CloudProvider { diff --git a/cluster-autoscaler/cloudprovider/linode/linode_cloud_provider.go b/cluster-autoscaler/cloudprovider/linode/linode_cloud_provider.go index 84e51d8a7f55..e25218700103 100644 --- a/cluster-autoscaler/cloudprovider/linode/linode_cloud_provider.go +++ b/cluster-autoscaler/cloudprovider/linode/linode_cloud_provider.go @@ -24,7 +24,7 @@ import ( apiv1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" - "k8s.io/autoscaler/cluster-autoscaler/core/options" + coreoptions "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/autoscaler/cluster-autoscaler/utils/errors" "k8s.io/autoscaler/cluster-autoscaler/utils/gpu" klog "k8s.io/klog/v2" @@ -121,7 +121,7 @@ func (l *linodeCloudProvider) Cleanup() error { // BuildLinode builds the BuildLinode cloud provider. func BuildLinode( - opts *options.AutoscalerOptions, + opts *coreoptions.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, ) cloudprovider.CloudProvider { diff --git a/cluster-autoscaler/cloudprovider/magnum/magnum_cloud_provider.go b/cluster-autoscaler/cloudprovider/magnum/magnum_cloud_provider.go index 0bef77420e7a..4fa0ff314c98 100644 --- a/cluster-autoscaler/cloudprovider/magnum/magnum_cloud_provider.go +++ b/cluster-autoscaler/cloudprovider/magnum/magnum_cloud_provider.go @@ -29,7 +29,7 @@ import ( "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/magnum/gophercloud/openstack/containerinfra/v1/nodegroups" "k8s.io/autoscaler/cluster-autoscaler/config/dynamic" - "k8s.io/autoscaler/cluster-autoscaler/core/options" + coreoptions "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/autoscaler/cluster-autoscaler/utils/errors" "k8s.io/autoscaler/cluster-autoscaler/utils/gpu" klog "k8s.io/klog/v2" @@ -317,7 +317,7 @@ func (mcp *magnumCloudProvider) refreshNodeGroups() error { // // The magnumManager is created here, and the initial node groups are created // based on the static or auto discovery specs provided via the command line parameters. -func BuildMagnum(opts *options.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { +func BuildMagnum(opts *coreoptions.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { var config io.ReadCloser // Should be loaded with --cloud-config /etc/kubernetes/kube_openstack_config from master node. diff --git a/cluster-autoscaler/cloudprovider/oci/instancepools/oci_cloud_provider.go b/cluster-autoscaler/cloudprovider/oci/instancepools/oci_cloud_provider.go index 01d4ad5346a0..727148aa9442 100644 --- a/cluster-autoscaler/cloudprovider/oci/instancepools/oci_cloud_provider.go +++ b/cluster-autoscaler/cloudprovider/oci/instancepools/oci_cloud_provider.go @@ -15,7 +15,7 @@ import ( "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/oci/nodepools" npconsts "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/oci/nodepools/consts" "k8s.io/autoscaler/cluster-autoscaler/config" - "k8s.io/autoscaler/cluster-autoscaler/core/options" + coreoptions "k8s.io/autoscaler/cluster-autoscaler/core/options" caerrors "k8s.io/autoscaler/cluster-autoscaler/utils/errors" "k8s.io/autoscaler/cluster-autoscaler/utils/gpu" "k8s.io/client-go/kubernetes" @@ -149,7 +149,7 @@ func (ocp *OciCloudProvider) Refresh() error { } // BuildOCI constructs the OciCloudProvider object that implements the could provider interface (InstancePoolManager). -func BuildOCI(opts *options.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { +func BuildOCI(opts *coreoptions.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { ocidType, err := ocicommon.GetAllPoolTypes(opts.NodeGroups) if err != nil { klog.Fatalf("Failed to get pool type: %v", err) diff --git a/cluster-autoscaler/cloudprovider/ovhcloud/ovh_cloud_provider.go b/cluster-autoscaler/cloudprovider/ovhcloud/ovh_cloud_provider.go index f5d73a5c1e70..acd440c8943d 100644 --- a/cluster-autoscaler/cloudprovider/ovhcloud/ovh_cloud_provider.go +++ b/cluster-autoscaler/cloudprovider/ovhcloud/ovh_cloud_provider.go @@ -30,7 +30,7 @@ import ( "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/ovhcloud/sdk" "k8s.io/autoscaler/cluster-autoscaler/config" - "k8s.io/autoscaler/cluster-autoscaler/core/options" + coreoptions "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/autoscaler/cluster-autoscaler/utils/errors" "k8s.io/autoscaler/cluster-autoscaler/utils/gpu" ) @@ -60,7 +60,7 @@ type OVHCloudProvider struct { } // BuildOVHcloud builds the OVHcloud provider. -func BuildOVHcloud(opts *options.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { +func BuildOVHcloud(opts *coreoptions.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { // Open cloud provider folder var configFile io.ReadCloser if opts.CloudConfig != "" { diff --git a/cluster-autoscaler/cloudprovider/rancher/rancher_provider.go b/cluster-autoscaler/cloudprovider/rancher/rancher_provider.go index ab735a5ef4ce..49fbf71d97e5 100644 --- a/cluster-autoscaler/cloudprovider/rancher/rancher_provider.go +++ b/cluster-autoscaler/cloudprovider/rancher/rancher_provider.go @@ -28,7 +28,7 @@ import ( "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" - "k8s.io/autoscaler/cluster-autoscaler/core/options" + coreoptions "k8s.io/autoscaler/cluster-autoscaler/core/options" autoscalererrors "k8s.io/autoscaler/cluster-autoscaler/utils/errors" "k8s.io/autoscaler/cluster-autoscaler/utils/gpu" "k8s.io/client-go/discovery" @@ -64,7 +64,7 @@ type RancherCloudProvider struct { } // BuildRancher builds rancher cloud provider. -func BuildRancher(opts *options.AutoscalerOptions, _ cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { +func BuildRancher(opts *coreoptions.AutoscalerOptions, _ cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { provider, err := newRancherCloudProvider(opts.CloudConfig, rl) if err != nil { klog.Fatalf("failed to create rancher cloud provider: %v", err) diff --git a/cluster-autoscaler/cloudprovider/scaleway/scaleway_cloud_provider.go b/cluster-autoscaler/cloudprovider/scaleway/scaleway_cloud_provider.go index d960c01960ed..d77bf6aa8307 100644 --- a/cluster-autoscaler/cloudprovider/scaleway/scaleway_cloud_provider.go +++ b/cluster-autoscaler/cloudprovider/scaleway/scaleway_cloud_provider.go @@ -30,7 +30,7 @@ import ( "k8s.io/apimachinery/pkg/api/resource" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/scaleway/scalewaygo" - "k8s.io/autoscaler/cluster-autoscaler/core/options" + coreoptions "k8s.io/autoscaler/cluster-autoscaler/core/options" ca_errors "k8s.io/autoscaler/cluster-autoscaler/utils/errors" "k8s.io/autoscaler/cluster-autoscaler/utils/gpu" "k8s.io/klog/v2" @@ -103,7 +103,7 @@ func newScalewayCloudProvider(configFile io.Reader, defaultUserAgent string, rl // BuildScaleway returns CloudProvider implementation for Scaleway. func BuildScaleway( - opts *options.AutoscalerOptions, + opts *coreoptions.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, ) cloudprovider.CloudProvider { diff --git a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud_cloud_provider.go b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud_cloud_provider.go index 699605999cb0..8c29566b6ba3 100644 --- a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud_cloud_provider.go +++ b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud_cloud_provider.go @@ -24,7 +24,7 @@ import ( apiv1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" - "k8s.io/autoscaler/cluster-autoscaler/core/options" + coreoptions "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/autoscaler/cluster-autoscaler/utils/errors" "k8s.io/autoscaler/cluster-autoscaler/utils/gpu" "k8s.io/klog/v2" @@ -174,7 +174,7 @@ func (tencentcloud *tencentCloudProvider) Refresh() error { } // BuildTencentcloud returns tencentcloud provider -func BuildTencentcloud(opts *options.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { +func BuildTencentcloud(opts *coreoptions.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { var config io.ReadCloser if opts.CloudConfig != "" { var err error diff --git a/cluster-autoscaler/cloudprovider/utho/utho_cloud_provider.go b/cluster-autoscaler/cloudprovider/utho/utho_cloud_provider.go index c7f680280273..9e35b1b2c7f5 100644 --- a/cluster-autoscaler/cloudprovider/utho/utho_cloud_provider.go +++ b/cluster-autoscaler/cloudprovider/utho/utho_cloud_provider.go @@ -23,7 +23,7 @@ import ( apiv1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" - "k8s.io/autoscaler/cluster-autoscaler/core/options" + coreoptions "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/autoscaler/cluster-autoscaler/utils/errors" "k8s.io/autoscaler/cluster-autoscaler/utils/gpu" "k8s.io/klog/v2" @@ -164,7 +164,7 @@ func (u *uthoCloudProvider) Refresh() error { // BuildUtho builds the Utho cloud provider. func BuildUtho( - opts *options.AutoscalerOptions, + opts *coreoptions.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter, ) cloudprovider.CloudProvider { diff --git a/cluster-autoscaler/cloudprovider/volcengine/volcengine_cloud_provider.go b/cluster-autoscaler/cloudprovider/volcengine/volcengine_cloud_provider.go index cf8971f4d068..e3c689941f70 100644 --- a/cluster-autoscaler/cloudprovider/volcengine/volcengine_cloud_provider.go +++ b/cluster-autoscaler/cloudprovider/volcengine/volcengine_cloud_provider.go @@ -27,7 +27,7 @@ import ( "k8s.io/apimachinery/pkg/api/resource" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" "k8s.io/autoscaler/cluster-autoscaler/config/dynamic" - "k8s.io/autoscaler/cluster-autoscaler/core/options" + coreoptions "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/autoscaler/cluster-autoscaler/utils/errors" "k8s.io/autoscaler/cluster-autoscaler/utils/gpu" "k8s.io/klog/v2" @@ -160,7 +160,7 @@ func buildScalingGroupFromSpec(manager VolcengineManager, spec string) (*AutoSca } // BuildVolcengine builds CloudProvider implementation for Volcengine -func BuildVolcengine(opts *options.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { +func BuildVolcengine(opts *coreoptions.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { if opts.CloudConfig == "" { klog.Fatalf("The path to the cloud provider configuration file must be set via the --cloud-config command line parameter") } diff --git a/cluster-autoscaler/cloudprovider/vultr/vultr_cloud_provider.go b/cluster-autoscaler/cloudprovider/vultr/vultr_cloud_provider.go index d6b976ef382c..5d097c98ee10 100644 --- a/cluster-autoscaler/cloudprovider/vultr/vultr_cloud_provider.go +++ b/cluster-autoscaler/cloudprovider/vultr/vultr_cloud_provider.go @@ -24,7 +24,7 @@ import ( apiv1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" - "k8s.io/autoscaler/cluster-autoscaler/core/options" + coreoptions "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/autoscaler/cluster-autoscaler/utils/errors" "k8s.io/autoscaler/cluster-autoscaler/utils/gpu" "k8s.io/klog/v2" @@ -151,7 +151,7 @@ func toNodeID(providerID string) string { } // BuildVultr builds the Vultr cloud provider. -func BuildVultr(opts *options.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { +func BuildVultr(opts *coreoptions.AutoscalerOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { if opts.CloudConfig == "" { klog.Fatalf("No config file provided, please specify it via the --cloud-config flag") } diff --git a/cluster-autoscaler/core/autoscaler.go b/cluster-autoscaler/core/autoscaler.go index 3160b22c444b..a71b976b772e 100644 --- a/cluster-autoscaler/core/autoscaler.go +++ b/cluster-autoscaler/core/autoscaler.go @@ -22,7 +22,7 @@ import ( cloudBuilder "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/builder" "k8s.io/autoscaler/cluster-autoscaler/context" - "k8s.io/autoscaler/cluster-autoscaler/core/options" + coreoptions "k8s.io/autoscaler/cluster-autoscaler/core/options" "k8s.io/autoscaler/cluster-autoscaler/core/scaledown/pdb" "k8s.io/autoscaler/cluster-autoscaler/estimator" "k8s.io/autoscaler/cluster-autoscaler/expander/factory" @@ -54,7 +54,7 @@ type Autoscaler interface { } // NewAutoscaler creates an autoscaler of an appropriate type according to the parameters -func NewAutoscaler(opts options.AutoscalerOptions, informerFactory informers.SharedInformerFactory) (Autoscaler, errors.AutoscalerError) { +func NewAutoscaler(opts coreoptions.AutoscalerOptions, informerFactory informers.SharedInformerFactory) (Autoscaler, errors.AutoscalerError) { err := initializeDefaultOptions(&opts, informerFactory) if err != nil { return nil, errors.ToAutoscalerError(errors.InternalError, err) @@ -80,7 +80,7 @@ func NewAutoscaler(opts options.AutoscalerOptions, informerFactory informers.Sha } // Initialize default options if not provided. -func initializeDefaultOptions(opts *options.AutoscalerOptions, informerFactory informers.SharedInformerFactory) error { +func initializeDefaultOptions(opts *coreoptions.AutoscalerOptions, informerFactory informers.SharedInformerFactory) error { if opts.Processors == nil { opts.Processors = ca_processors.DefaultProcessors(opts.AutoscalingOptions) } diff --git a/cluster-autoscaler/core/options/autoscaler.go b/cluster-autoscaler/core/options/autoscaler.go index bfb947298ab7..0fdcb38811bb 100644 --- a/cluster-autoscaler/core/options/autoscaler.go +++ b/cluster-autoscaler/core/options/autoscaler.go @@ -5,7 +5,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, @@ -13,6 +13,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ + package options import ( @@ -60,6 +61,8 @@ type AutoscalerOptions struct { DraProvider *draprovider.Provider } +// RegisterScaleDownNodeProcessor registers a new ScaleDownNodeProcessor with the core autoscaler, +// it will be appended to the list of scale down node processors for use during the scale down process. func (a *AutoscalerOptions) RegisterScaleDownNodeProcessor(np nodes.ScaleDownNodeProcessor) { a.Processors.ScaleDownNodeProcessor.(*scaledowncandidates.CombinedScaleDownCandidatesProcessor).Register(np) } diff --git a/cluster-autoscaler/processors/scaledowncandidates/scale_down_candidates_processor.go b/cluster-autoscaler/processors/scaledowncandidates/scale_down_candidates_processor.go index 042ec9de4d41..8c6eead9dcf8 100644 --- a/cluster-autoscaler/processors/scaledowncandidates/scale_down_candidates_processor.go +++ b/cluster-autoscaler/processors/scaledowncandidates/scale_down_candidates_processor.go @@ -23,6 +23,8 @@ import ( "k8s.io/autoscaler/cluster-autoscaler/utils/errors" ) +// CombinedScaleDownCandidatesProcessor is a structure for containing the individual +// scale down processors that are used by the core autoscaler during its scale down process. type CombinedScaleDownCandidatesProcessor struct { processors []nodes.ScaleDownNodeProcessor } From b82aa40d9cea5ea5e9cfe55e39b78840a4248bf9 Mon Sep 17 00:00:00 2001 From: elmiko Date: Tue, 30 Sep 2025 16:21:10 -0400 Subject: [PATCH 5/5] refactor gpu_processor_test to remove cyclic dependency this change removes the import from the gce module in favor of using the string value directly. --- .../processors/customresources/gpu_processor_test.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/cluster-autoscaler/processors/customresources/gpu_processor_test.go b/cluster-autoscaler/processors/customresources/gpu_processor_test.go index fb96e4d430c7..2df469b4142f 100644 --- a/cluster-autoscaler/processors/customresources/gpu_processor_test.go +++ b/cluster-autoscaler/processors/customresources/gpu_processor_test.go @@ -25,7 +25,6 @@ import ( apiv1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/gce" testprovider "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/test" "k8s.io/autoscaler/cluster-autoscaler/context" "k8s.io/autoscaler/cluster-autoscaler/utils/gpu" @@ -157,7 +156,7 @@ func TestFilterOutNodesWithUnreadyResources(t *testing.T) { ObjectMeta: metav1.ObjectMeta{ Name: "nodeGPUViaDra", Labels: map[string]string{ - gce.DraGPULabel: "true", + "cloud.google.com/gke-gpu-dra-driver": "true", }, CreationTimestamp: metav1.NewTime(start), },