diff --git a/cluster-autoscaler/cloudprovider/builder/builder_all.go b/cluster-autoscaler/cloudprovider/builder/builder_all.go new file mode 100644 index 0000000000..e64834b304 --- /dev/null +++ b/cluster-autoscaler/cloudprovider/builder/builder_all.go @@ -0,0 +1,58 @@ +// +build !gce,!aws,!azure,!kubemark + +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +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 builder + +import ( + "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" + "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/aws" + "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/azure" + "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/gce" + "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/gke" + "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/kubemark" + "k8s.io/autoscaler/cluster-autoscaler/config" +) + +// AvailableCloudProviders supported by the cloud provider builder. +var AvailableCloudProviders = []string{ + aws.ProviderName, + azure.ProviderName, + gce.ProviderNameGCE, + gke.ProviderNameGKE, + kubemark.ProviderName, +} + +// DefaultCloudProvider is GCE. +const DefaultCloudProvider = gce.ProviderNameGCE + +func buildCloudProvider(opts config.AutoscalingOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { + switch opts.CloudProviderName { + case gce.ProviderNameGCE: + return gce.BuildGCE(opts, do, rl) + case gke.ProviderNameGKE: + return gke.BuildGKE(opts, do, rl) + case aws.ProviderName: + return aws.BuildAWS(opts, do, rl) + case azure.ProviderName: + return azure.BuildAzure(opts, do, rl) + case kubemark.ProviderName: + return kubemark.BuildKubemark(opts, do, rl) + } + + return nil +} diff --git a/cluster-autoscaler/cloudprovider/builder/builder_aws.go b/cluster-autoscaler/cloudprovider/builder/builder_aws.go new file mode 100644 index 0000000000..5c9c3fb4d8 --- /dev/null +++ b/cluster-autoscaler/cloudprovider/builder/builder_aws.go @@ -0,0 +1,42 @@ +// +build aws + +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +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 builder + +import ( + "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" + "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/aws" + "k8s.io/autoscaler/cluster-autoscaler/config" +) + +// AvailableCloudProviders supported by the cloud provider builder. +var AvailableCloudProviders = []string{ + aws.ProviderName, +} + +// DefaultCloudProvider for AWS-only build is AWS. +const DefaultCloudProvider = aws.ProviderName + +func buildCloudProvider(opts config.AutoscalingOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { + switch opts.CloudProviderName { + case aws.ProviderName: + return aws.BuildAWS(opts, do, rl) + } + + return nil +} diff --git a/cluster-autoscaler/cloudprovider/builder/builder_azure.go b/cluster-autoscaler/cloudprovider/builder/builder_azure.go new file mode 100644 index 0000000000..358786433f --- /dev/null +++ b/cluster-autoscaler/cloudprovider/builder/builder_azure.go @@ -0,0 +1,42 @@ +// +build azure + +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +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 builder + +import ( + "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" + "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/azure" + "k8s.io/autoscaler/cluster-autoscaler/config" +) + +// AvailableCloudProviders supported by the cloud provider builder. +var AvailableCloudProviders = []string{ + azure.ProviderName, +} + +// DefaultCloudProvider on Azure-only build is Azure. +const DefaultCloudProvider = azure.ProviderName + +func buildCloudProvider(opts config.AutoscalingOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { + switch opts.CloudProviderName { + case azure.ProviderName: + return azure.BuildAzure(opts, do, rl) + } + + return nil +} diff --git a/cluster-autoscaler/cloudprovider/builder/builder_gce.go b/cluster-autoscaler/cloudprovider/builder/builder_gce.go new file mode 100644 index 0000000000..9307043f10 --- /dev/null +++ b/cluster-autoscaler/cloudprovider/builder/builder_gce.go @@ -0,0 +1,46 @@ +// +build gce + +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +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 builder + +import ( + "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" + "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/gce" + "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/gke" + "k8s.io/autoscaler/cluster-autoscaler/config" +) + +// AvailableCloudProviders supported by the cloud provider builder. +var AvailableCloudProviders = []string{ + gce.ProviderNameGCE, + gke.ProviderNameGKE, +} + +// DefaultCloudProvider is GCE. +const DefaultCloudProvider = gce.ProviderNameGCE + +func buildCloudProvider(opts config.AutoscalingOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { + switch opts.CloudProviderName { + case gce.ProviderNameGCE: + return gce.BuildGCE(opts, do, rl) + case gke.ProviderNameGKE: + return gke.BuildGKE(opts, do, rl) + } + + return nil +} diff --git a/cluster-autoscaler/cloudprovider/builder/builder_kubemark.go b/cluster-autoscaler/cloudprovider/builder/builder_kubemark.go new file mode 100644 index 0000000000..0f0dca8faf --- /dev/null +++ b/cluster-autoscaler/cloudprovider/builder/builder_kubemark.go @@ -0,0 +1,42 @@ +// +build kubemark + +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +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 builder + +import ( + "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" + "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/kubemark" + "k8s.io/autoscaler/cluster-autoscaler/config" +) + +// AvailableCloudProviders supported by the cloud provider builder. +var AvailableCloudProviders = []string{ + kubemark.ProviderName, +} + +// DefaultCloudProvider for Kubemark-only build is Kubemark. +const DefaultCloudProvider = kubemark.ProviderName + +func buildCloudProvider(opts config.AutoscalingOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { + switch opts.CloudProviderName { + case kubemark.ProviderName: + return kubemark.BuildKubemark(opts, do, rl) + } + + return nil +} diff --git a/cluster-autoscaler/cloudprovider/builder/cloud_provider_builder.go b/cluster-autoscaler/cloudprovider/builder/cloud_provider_builder.go index a8e08e04c0..b616f0865f 100644 --- a/cluster-autoscaler/cloudprovider/builder/cloud_provider_builder.go +++ b/cluster-autoscaler/cloudprovider/builder/cloud_provider_builder.go @@ -18,29 +18,12 @@ package builder import ( "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" - "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/aws" - "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/azure" - "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/gce" - "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/gke" - "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/kubemark" "k8s.io/autoscaler/cluster-autoscaler/config" "k8s.io/autoscaler/cluster-autoscaler/context" "github.com/golang/glog" ) -// AvailableCloudProviders supported by the cloud provider builder. -var AvailableCloudProviders = []string{ - aws.ProviderName, - azure.ProviderName, - gce.ProviderNameGCE, - gke.ProviderNameGKE, - kubemark.ProviderName, -} - -// DefaultCloudProvider is GCE. -const DefaultCloudProvider = gce.ProviderNameGCE - // NewCloudProvider builds a cloud provider from provided parameters. func NewCloudProvider(opts config.AutoscalingOptions) cloudprovider.CloudProvider { glog.V(1).Infof("Building %s cloud provider.", opts.CloudProviderName) @@ -49,26 +32,21 @@ func NewCloudProvider(opts config.AutoscalingOptions) cloudprovider.CloudProvide NodeGroupSpecs: opts.NodeGroups, NodeGroupAutoDiscoverySpecs: opts.NodeGroupAutoDiscovery, } + rl := context.NewResourceLimiterFromAutoscalingOptions(opts) - switch opts.CloudProviderName { - case gce.ProviderNameGCE: - return gce.BuildGCE(opts, do, rl) - case gke.ProviderNameGKE: - return gke.BuildGKE(opts, do, rl) - case aws.ProviderName: - return aws.BuildAWS(opts, do, rl) - case azure.ProviderName: - return azure.BuildAzure(opts, do, rl) - case kubemark.ProviderName: - return kubemark.BuildKubemark(opts, do, rl) - case "": + if opts.CloudProviderName == "" { // Ideally this would be an error, but several unit tests of the // StaticAutoscaler depend on this behaviour. glog.Warning("Returning a nil cloud provider") return nil } + provider := buildCloudProvider(opts, do, rl) + if provider != nil { + return provider + } + glog.Fatalf("Unknown cloud provider: %s", opts.CloudProviderName) return nil // This will never happen because the Fatalf will os.Exit }