github.com/nais/knorten@v0.0.0-20240104110906-55926958e361/pkg/k8s/k8s.go (about)

     1  package k8s
     2  
     3  import (
     4  	"fmt"
     5  	"os"
     6  	"path/filepath"
     7  	"strings"
     8  
     9  	"k8s.io/client-go/dynamic"
    10  	"k8s.io/client-go/kubernetes"
    11  	_ "k8s.io/client-go/plugin/pkg/client/auth/gcp"
    12  	"k8s.io/client-go/rest"
    13  	"k8s.io/client-go/tools/clientcmd"
    14  	"k8s.io/client-go/util/homedir"
    15  	gateway "sigs.k8s.io/gateway-api/pkg/client/clientset/versioned"
    16  )
    17  
    18  func CreateClientset(dryRun, inCluster bool) (*kubernetes.Clientset, error) {
    19  	if dryRun {
    20  		return nil, nil
    21  	}
    22  
    23  	config, err := createKubeConfig(inCluster)
    24  	if err != nil {
    25  		return nil, err
    26  	}
    27  
    28  	return kubernetes.NewForConfig(config)
    29  }
    30  
    31  func CreateGatewayClientset(dryRun, inCluster bool) (*gateway.Clientset, error) {
    32  	if dryRun {
    33  		return nil, nil
    34  	}
    35  
    36  	config, err := createKubeConfig(inCluster)
    37  	if err != nil {
    38  		return nil, err
    39  	}
    40  
    41  	return gateway.NewForConfig(config)
    42  }
    43  
    44  func CreateDynamicClient(dryRun, inCluster bool) (*dynamic.DynamicClient, error) {
    45  	if dryRun {
    46  		return nil, nil
    47  	}
    48  
    49  	config, err := createKubeConfig(inCluster)
    50  	if err != nil {
    51  		return nil, err
    52  	}
    53  
    54  	return dynamic.NewForConfig(config)
    55  }
    56  
    57  func createKubeConfig(inCluster bool) (*rest.Config, error) {
    58  	if inCluster {
    59  		return rest.InClusterConfig()
    60  	}
    61  
    62  	kubeconfig := os.Getenv("KUBECONFIG")
    63  	if kubeconfig == "" {
    64  		kubeconfig = filepath.Join(homedir.HomeDir(), ".kube", "config")
    65  	}
    66  
    67  	configLoadingRules := &clientcmd.ClientConfigLoadingRules{ExplicitPath: kubeconfig}
    68  	// TODO: Virker ikke som at man får satt context på denne måten
    69  	configOverrides := &clientcmd.ConfigOverrides{CurrentContext: "minikube"}
    70  
    71  	return clientcmd.NewNonInteractiveDeferredLoadingClientConfig(configLoadingRules, configOverrides).ClientConfig()
    72  }
    73  
    74  // TeamIDToNamespace prefix team- to a team ID. If the ID already has in as a prefix, will add a - after the word team.
    75  //
    76  // hello-1234 => team-hello-1234
    77  //
    78  // teamhello-1234 => team-hello-1234
    79  //
    80  // helloteam-1234 => team-helloteam-1234
    81  func TeamIDToNamespace(name string) string {
    82  	if strings.HasPrefix(name, "team-") {
    83  		return name
    84  	} else if strings.HasPrefix(name, "team") {
    85  		return strings.Replace(name, "team", "team-", 1)
    86  	} else {
    87  		return fmt.Sprintf("team-%v", name)
    88  	}
    89  }