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  }