k8c.io/api/v3@v3.0.0-20230904060738-b0a93889c0b6/pkg/apis/kubermatic/v1/helper/provider.go (about)

     1  /*
     2  Copyright 2023 The Kubermatic Kubernetes Platform contributors.
     3  
     4  Licensed under the Apache License, Version 2.0 (the "License");
     5  you may not use this file except in compliance with the License.
     6  You may obtain a copy of the License at
     7  
     8      http://www.apache.org/licenses/LICENSE-2.0
     9  
    10  Unless required by applicable law or agreed to in writing, software
    11  distributed under the License is distributed on an "AS IS" BASIS,
    12  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13  See the License for the specific language governing permissions and
    14  limitations under the License.
    15  */
    16  
    17  package helper
    18  
    19  import (
    20  	"fmt"
    21  
    22  	kubermaticv1 "k8c.io/api/v3/pkg/apis/kubermatic/v1"
    23  )
    24  
    25  // ExternalClusterCloudProviderName returns the provider name for the given ExternalClusterCloudSpec.
    26  func ExternalClusterCloudProviderName(spec kubermaticv1.ExternalClusterCloudSpec) (kubermaticv1.ExternalClusterProvider, error) {
    27  	var providers []kubermaticv1.ExternalClusterProvider
    28  	if spec.AKS != nil {
    29  		providers = append(providers, kubermaticv1.ExternalClusterProviderAKS)
    30  	}
    31  	if spec.EKS != nil {
    32  		providers = append(providers, kubermaticv1.ExternalClusterProviderEKS)
    33  	}
    34  	if spec.GKE != nil {
    35  		providers = append(providers, kubermaticv1.ExternalClusterProviderGKE)
    36  	}
    37  	if spec.KubeOne != nil {
    38  		providers = append(providers, kubermaticv1.ExternalClusterProviderKubeOne)
    39  	}
    40  	if spec.BringYourOwn != nil {
    41  		providers = append(providers, kubermaticv1.ExternalClusterProviderBringYourOwn)
    42  	}
    43  	if len(providers) == 0 {
    44  		return "", nil
    45  	}
    46  	if len(providers) != 1 {
    47  		return "", fmt.Errorf("only one cloud provider can be set in ExternalClusterCloudSpec, but found the following providers: %v", providers)
    48  	}
    49  	return providers[0], nil
    50  }
    51  
    52  // ClusterCloudProviderName returns the provider name for the given CloudSpec.
    53  func ClusterCloudProviderName(spec kubermaticv1.CloudSpec) (kubermaticv1.CloudProvider, error) {
    54  	var providers []kubermaticv1.CloudProvider
    55  	if spec.AWS != nil {
    56  		providers = append(providers, kubermaticv1.CloudProviderAWS)
    57  	}
    58  	if spec.Alibaba != nil {
    59  		providers = append(providers, kubermaticv1.CloudProviderAlibaba)
    60  	}
    61  	if spec.Anexia != nil {
    62  		providers = append(providers, kubermaticv1.CloudProviderAnexia)
    63  	}
    64  	if spec.Azure != nil {
    65  		providers = append(providers, kubermaticv1.CloudProviderAzure)
    66  	}
    67  	if spec.BringYourOwn != nil {
    68  		providers = append(providers, kubermaticv1.CloudProviderBringYourOwn)
    69  	}
    70  	if spec.Digitalocean != nil {
    71  		providers = append(providers, kubermaticv1.CloudProviderDigitalocean)
    72  	}
    73  	if spec.Fake != nil {
    74  		providers = append(providers, kubermaticv1.CloudProviderFake)
    75  	}
    76  	if spec.GCP != nil {
    77  		providers = append(providers, kubermaticv1.CloudProviderGCP)
    78  	}
    79  	if spec.Hetzner != nil {
    80  		providers = append(providers, kubermaticv1.CloudProviderHetzner)
    81  	}
    82  	if spec.KubeVirt != nil {
    83  		providers = append(providers, kubermaticv1.CloudProviderKubeVirt)
    84  	}
    85  	if spec.OpenStack != nil {
    86  		providers = append(providers, kubermaticv1.CloudProviderOpenStack)
    87  	}
    88  	if spec.Packet != nil {
    89  		providers = append(providers, kubermaticv1.CloudProviderPacket)
    90  	}
    91  	if spec.VSphere != nil {
    92  		providers = append(providers, kubermaticv1.CloudProviderVSphere)
    93  	}
    94  	if spec.Nutanix != nil {
    95  		providers = append(providers, kubermaticv1.CloudProviderNutanix)
    96  	}
    97  	if spec.VMwareCloudDirector != nil {
    98  		providers = append(providers, kubermaticv1.CloudProviderVMwareCloudDirector)
    99  	}
   100  	if len(providers) == 0 {
   101  		return "", nil
   102  	}
   103  	if len(providers) != 1 {
   104  		return "", fmt.Errorf("only one cloud provider can be set in CloudSpec, but found the following providers: %v", providers)
   105  	}
   106  	return providers[0], nil
   107  }
   108  
   109  // DatacenterCloudProviderName returns the provider name for the given Datacenter.
   110  func DatacenterCloudProviderName(spec *kubermaticv1.DatacenterProviderSpec) (kubermaticv1.CloudProvider, error) {
   111  	if spec == nil {
   112  		return "", nil
   113  	}
   114  	var providers []kubermaticv1.CloudProvider
   115  	if spec.BringYourOwn != nil {
   116  		providers = append(providers, kubermaticv1.CloudProviderBringYourOwn)
   117  	}
   118  	if spec.Digitalocean != nil {
   119  		providers = append(providers, kubermaticv1.CloudProviderDigitalocean)
   120  	}
   121  	if spec.AWS != nil {
   122  		providers = append(providers, kubermaticv1.CloudProviderAWS)
   123  	}
   124  	if spec.OpenStack != nil {
   125  		providers = append(providers, kubermaticv1.CloudProviderOpenStack)
   126  	}
   127  	if spec.Packet != nil {
   128  		providers = append(providers, kubermaticv1.CloudProviderPacket)
   129  	}
   130  	if spec.Hetzner != nil {
   131  		providers = append(providers, kubermaticv1.CloudProviderHetzner)
   132  	}
   133  	if spec.VSphere != nil {
   134  		providers = append(providers, kubermaticv1.CloudProviderVSphere)
   135  	}
   136  	if spec.Azure != nil {
   137  		providers = append(providers, kubermaticv1.CloudProviderAzure)
   138  	}
   139  	if spec.GCP != nil {
   140  		providers = append(providers, kubermaticv1.CloudProviderGCP)
   141  	}
   142  	if spec.Fake != nil {
   143  		providers = append(providers, kubermaticv1.CloudProviderFake)
   144  	}
   145  	if spec.KubeVirt != nil {
   146  		providers = append(providers, kubermaticv1.CloudProviderKubeVirt)
   147  	}
   148  	if spec.Alibaba != nil {
   149  		providers = append(providers, kubermaticv1.CloudProviderAlibaba)
   150  	}
   151  	if spec.Anexia != nil {
   152  		providers = append(providers, kubermaticv1.CloudProviderAnexia)
   153  	}
   154  	if spec.Nutanix != nil {
   155  		providers = append(providers, kubermaticv1.CloudProviderNutanix)
   156  	}
   157  	if spec.VMwareCloudDirector != nil {
   158  		providers = append(providers, kubermaticv1.CloudProviderVMwareCloudDirector)
   159  	}
   160  	if len(providers) == 0 {
   161  		return "", nil
   162  	}
   163  	if len(providers) != 1 {
   164  		return "", fmt.Errorf("only one cloud provider can be set in the Datacenter, but the following were set: %+v", spec)
   165  	}
   166  	return providers[0], nil
   167  }