github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/caas/kubernetes/provider/init.go (about) 1 // Copyright 2018 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package provider 5 6 import ( 7 k8slabels "k8s.io/apimachinery/pkg/labels" 8 "k8s.io/apimachinery/pkg/selection" 9 "k8s.io/klog/v2" 10 11 "github.com/juju/juju/caas" 12 k8s "github.com/juju/juju/caas/kubernetes" 13 "github.com/juju/juju/caas/kubernetes/provider/constants" 14 ) 15 16 var ( 17 k8sCloudCheckers map[string][]k8slabels.Selector 18 19 // lifecycleApplicationRemovalSelector is the label selector for removing global resources for application removal. 20 lifecycleApplicationRemovalSelector k8slabels.Selector 21 22 // LifecycleModelTeardownSelector is the label selector for removing global resources for model teardown. 23 lifecycleModelTeardownSelector k8slabels.Selector 24 ) 25 26 func init() { 27 klog.SetLogger(newKlogAdapter()) 28 29 caas.RegisterContainerProvider(constants.CAASProviderType, providerInstance) 30 31 // k8sCloudCheckers is a collection of k8s node selector requirement definitions 32 // used for detecting cloud provider from node labels. 33 k8sCloudCheckers = compileK8sCloudCheckers() 34 35 lifecycleApplicationRemovalSelector = compileLifecycleApplicationRemovalSelector() 36 lifecycleModelTeardownSelector = compileLifecycleModelTeardownSelector() 37 38 } 39 40 // compileK8sCloudCheckers compiles/validates the collection of 41 // k8s node selector requirement definitions used for detecting 42 // cloud provider from node labels. 43 func compileK8sCloudCheckers() map[string][]k8slabels.Selector { 44 return map[string][]k8slabels.Selector{ 45 k8s.K8sCloudMicrok8s: { 46 newLabelRequirements( 47 requirementParams{"microk8s.io/cluster", selection.Exists, nil}, 48 ), 49 }, 50 k8s.K8sCloudGCE: { 51 // GKE. 52 newLabelRequirements( 53 requirementParams{"cloud.google.com/gke-nodepool", selection.Exists, nil}, 54 requirementParams{"cloud.google.com/gke-os-distribution", selection.Exists, nil}, 55 ), 56 // CDK on GCE. 57 newLabelRequirements( 58 requirementParams{"juju.is/cloud", selection.Equals, []string{"gce"}}, 59 ), 60 }, 61 k8s.K8sCloudEC2: { 62 // EKS. 63 newLabelRequirements( 64 requirementParams{"manufacturer", selection.Equals, []string{"amazon_ec2"}}, 65 ), 66 newLabelRequirements( 67 requirementParams{"eks.amazonaws.com/nodegroup", selection.Exists, nil}, 68 ), 69 // CDK on AWS. 70 newLabelRequirements( 71 requirementParams{"juju.is/cloud", selection.Equals, []string{"ec2"}}, 72 ), 73 }, 74 k8s.K8sCloudAzure: { 75 // AKS. 76 newLabelRequirements( 77 requirementParams{"kubernetes.azure.com/cluster", selection.Exists, nil}, 78 ), 79 // CDK on Azure. 80 newLabelRequirements( 81 requirementParams{"juju.is/cloud", selection.Equals, []string{"azure"}}, 82 ), 83 }, 84 // format - cloudType: requirements. 85 } 86 } 87 88 func compileLifecycleApplicationRemovalSelector() k8slabels.Selector { 89 return newLabelRequirements( 90 requirementParams{ 91 labelResourceLifeCycleKey, selection.NotIn, []string{ 92 labelResourceLifeCycleValueModel, 93 labelResourceLifeCycleValuePersistent, 94 }}, 95 ) 96 } 97 98 func compileLifecycleModelTeardownSelector() k8slabels.Selector { 99 return newLabelRequirements( 100 requirementParams{ 101 labelResourceLifeCycleKey, selection.NotIn, []string{ 102 labelResourceLifeCycleValuePersistent, 103 }}, 104 ) 105 }