Skip to content

Instantly share code, notes, and snippets.

@ep4sh
Last active May 25, 2024 17:38
Show Gist options
  • Save ep4sh/6e3149b431b94eb3c5ed157e19b5418a to your computer and use it in GitHub Desktop.
Save ep4sh/6e3149b431b94eb3c5ed157e19b5418a to your computer and use it in GitHub Desktop.
Kubernetes cluster ID
package main
import (
"context"
"fmt"
"log"
"os"
"path/filepath"
"github.com/google/uuid"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/rest"
"k8s.io/client-go/tools/clientcmd"
)
const (
LABEL = "kube-system"
)
func main() {
kubeConfig, err := SetConfig()
if err != nil {
log.Fatalf("error getting Kubernetes kubeConfig: %v\n", err)
}
clientset, err := NewClientset(kubeConfig)
if err != nil {
log.Fatalf("error init Kubernetes clientset: %v\n", err)
}
id, err := GetKubernetesClusterID(clientset)
if err != nil {
log.Fatalf("Can't fetch Kubernetes cluster id: %s", err)
}
fmt.Printf("%#v \n", id)
}
func SetConfig() (*rest.Config, error) {
env := getEnv("ENV", "develop")
var kubeConfig *rest.Config
if env == "develop" {
userHomeDir, err := os.UserHomeDir()
if err != nil {
return &rest.Config{}, err
}
kubeConfigPath := filepath.Join(userHomeDir, ".kube", "config")
kubeConfig, err = clientcmd.BuildConfigFromFlags("", kubeConfigPath)
if err != nil {
return &rest.Config{}, err
}
} else {
var err error
kubeConfig, err = rest.InClusterConfig()
if err != nil {
return &rest.Config{}, err
}
}
return kubeConfig, nil
}
func getEnv(key, def string) string {
value, exists := os.LookupEnv(key)
if !exists {
value = def
}
return value
}
func NewClientset(kConfig *rest.Config) (*kubernetes.Clientset, error) {
clientset, err := kubernetes.NewForConfig(kConfig)
if err != nil {
return &kubernetes.Clientset{}, err
}
return clientset, nil
}
func GetKubernetesClusterID(clientset *kubernetes.Clientset) (uuid.UUID, error) {
var id uuid.UUID
listOptions := metav1.ListOptions{
LabelSelector: fmt.Sprintf("kubernetes.io/metadata.name=%s", LABEL),
}
namespaces, err := clientset.CoreV1().Namespaces().List(context.Background(), listOptions)
if err != nil {
return uuid.UUID{}, err
}
id, err = uuid.Parse(string(namespaces.Items[0].GetUID()))
if err != nil {
return uuid.UUID{}, err
}
return id, nil
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment