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 }