github.com/verrazzano/verrazzano@v1.7.1/cluster-operator/internal/capi/cluster.go (about)

     1  // Copyright (c) 2023, Oracle and/or its affiliates.
     2  // Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl.
     3  
     4  package capi
     5  
     6  import (
     7  	"context"
     8  	"fmt"
     9  
    10  	"k8s.io/apimachinery/pkg/runtime/schema"
    11  	"k8s.io/apimachinery/pkg/types"
    12  	"sigs.k8s.io/cluster-api/api/v1beta1"
    13  	clipkg "sigs.k8s.io/controller-runtime/pkg/client"
    14  )
    15  
    16  const (
    17  	OCNEControlPlaneProvider   = "OCNEControlPlane"
    18  	OCNEInfrastructureProvider = "OCICluster"
    19  	OKEControlPlaneProvider    = "OCIManagedControlPlane"
    20  	OKEInfrastructureProvider  = "OCIManagedCluster"
    21  )
    22  
    23  var GVKCAPICluster = schema.GroupVersionKind{
    24  	Group:   "cluster.x-k8s.io",
    25  	Version: "v1beta1",
    26  	Kind:    "Cluster",
    27  }
    28  
    29  // GetClusterClassFromCluster returns the ClusterClass associated with the provided CAPI Cluster.
    30  func GetClusterClassFromCluster(ctx context.Context, cli clipkg.Client, cluster *v1beta1.Cluster) (*v1beta1.ClusterClass, error) {
    31  	// get the ClusterClass name, avoiding nil pointer exceptions
    32  	if cluster == nil {
    33  		return nil, fmt.Errorf("cannot get ClusterClass from a nil Cluster")
    34  	}
    35  	var clusterClassName string
    36  	if cluster.Spec.Topology != nil {
    37  		clusterClassName = cluster.Spec.Topology.Class
    38  	}
    39  	if clusterClassName == "" {
    40  		return nil, fmt.Errorf("CAPI Cluster %s/%s does not reference a ClusterClass", cluster.Namespace, cluster.Name)
    41  	}
    42  
    43  	// Retrieve the ClusterClass
    44  	clusterClassNamespacedName := types.NamespacedName{
    45  		Name:      clusterClassName,
    46  		Namespace: cluster.GetNamespace(),
    47  	}
    48  	clusterClass := &v1beta1.ClusterClass{}
    49  	if err := cli.Get(ctx, clusterClassNamespacedName, clusterClass); err != nil {
    50  		return nil, err
    51  	}
    52  	return clusterClass, nil
    53  }