k8c.io/api/v3@v3.0.0-20230904060738-b0a93889c0b6/pkg/apis/kubermatic/v1/helper/ipv6.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 kubermaticv1 "k8c.io/api/v3/pkg/apis/kubermatic/v1" 21 ) 22 23 var ( 24 // knownIPv6CloudProviders configures which providers have IPv6 and if it's enabled for all datacenters. 25 knownIPv6CloudProviders = map[kubermaticv1.CloudProvider]struct { 26 ipv6EnabledForAllDatacenters bool 27 }{ 28 kubermaticv1.CloudProviderAWS: { 29 ipv6EnabledForAllDatacenters: true, 30 }, 31 kubermaticv1.CloudProviderAzure: { 32 ipv6EnabledForAllDatacenters: true, 33 }, 34 kubermaticv1.CloudProviderBringYourOwn: { 35 ipv6EnabledForAllDatacenters: true, 36 }, 37 kubermaticv1.CloudProviderDigitalocean: { 38 ipv6EnabledForAllDatacenters: true, 39 }, 40 kubermaticv1.CloudProviderGCP: { 41 ipv6EnabledForAllDatacenters: true, 42 }, 43 kubermaticv1.CloudProviderHetzner: { 44 ipv6EnabledForAllDatacenters: true, 45 }, 46 kubermaticv1.CloudProviderOpenStack: { 47 ipv6EnabledForAllDatacenters: false, 48 }, 49 kubermaticv1.CloudProviderPacket: { 50 ipv6EnabledForAllDatacenters: true, 51 }, 52 kubermaticv1.CloudProviderVSphere: { 53 ipv6EnabledForAllDatacenters: false, 54 }, 55 } 56 ) 57 58 func IsIPv6KnownProvider(provider kubermaticv1.CloudProvider) bool { 59 _, isIPv6KnownProvider := knownIPv6CloudProviders[provider] 60 return isIPv6KnownProvider 61 } 62 63 // IsIPv6EnabledDatacenter returns true if IPv6 is enabled for the datacenter. 64 func IsIPv6EnabledDatacenter(dc *kubermaticv1.Datacenter) bool { 65 provider, err := DatacenterCloudProviderName(&dc.Spec.Provider) 66 if err != nil { 67 return false 68 } 69 70 cloudProviderCfg, exists := knownIPv6CloudProviders[provider] 71 if !exists { 72 return false 73 } 74 75 if cloudProviderCfg.ipv6EnabledForAllDatacenters { 76 return true 77 } 78 79 var flag *bool 80 81 switch provider { 82 case kubermaticv1.CloudProviderOpenStack: 83 flag = dc.Spec.Provider.OpenStack.IPv6Enabled 84 case kubermaticv1.CloudProviderVSphere: 85 flag = dc.Spec.Provider.VSphere.IPv6Enabled 86 } 87 88 return flag != nil && *flag 89 }