github.com/verrazzano/verrazzano@v1.7.1/cluster-operator/internal/capi/client.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 corev1 "k8s.io/api/core/v1" 11 "k8s.io/apimachinery/pkg/runtime" 12 "k8s.io/apimachinery/pkg/types" 13 "k8s.io/client-go/tools/clientcmd" 14 clipkg "sigs.k8s.io/controller-runtime/pkg/client" 15 ) 16 17 // GetClusterClient creates a controller-runtime client for a given CAPI cluster reference, if the kubeconfig for that cluster is available. 18 func GetClusterClient(ctx context.Context, cli clipkg.Client, cluster types.NamespacedName, scheme *runtime.Scheme) (clipkg.Client, error) { 19 kubeconfigSecret := &corev1.Secret{} 20 kubeconfigSecretNSN := types.NamespacedName{ 21 Namespace: cluster.Namespace, 22 Name: fmt.Sprintf("%s-kubeconfig", cluster.Name), 23 } 24 if err := cli.Get(ctx, kubeconfigSecretNSN, kubeconfigSecret); err != nil { 25 return nil, err 26 } 27 kubeconfig, ok := kubeconfigSecret.Data["value"] 28 if !ok { 29 return nil, fmt.Errorf("no kubeconfig found for cluster %s/%s", cluster.Namespace, cluster.Name) 30 } 31 config, err := clientcmd.RESTConfigFromKubeConfig(kubeconfig) 32 if err != nil { 33 return nil, err 34 } 35 return clipkg.New(config, clipkg.Options{ 36 Scheme: scheme, 37 }) 38 }