pkg/webhook/k8s_config.go (54 lines of code) (raw):
// Copyright (c) 2021, 2023, Oracle and/or its affiliates.
//
// Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/
package webhook
import (
"flag"
k8s "k8s.io/client-go/kubernetes"
restclient "k8s.io/client-go/rest"
"k8s.io/client-go/tools/clientcmd"
klog "k8s.io/klog/v2"
)
// command line arguments related to k8s
var config struct {
// K8s service
serviceName string
// K8s config for out of cluster run
masterURL, kubeconfig string
}
func mandatoryParam(param string, value string) {
if len(value) == 0 {
flag.Usage()
klog.Fatalf("Required parameter '-%s' is missing", param)
}
}
func validateCommandLineArgs() {
// Check required arguments
mandatoryParam("service", config.serviceName)
}
func init() {
// klog arguments
klog.InitFlags(nil)
// argument to get the k8s service name
flag.StringVar(&config.serviceName, "service", "",
"Name of the K8s service that will be mapped to the webhook server (Required)")
// out-of-cluster kubeconfig/masterURL arguments
flag.StringVar(&config.masterURL, "master", "",
"The address of the Kubernetes API server. "+
"Overrides any value in kubeconfig. Only required if out-of-cluster.")
flag.StringVar(&config.kubeconfig, "kubeconfig", "",
"Path to a kubeconfig. Only required if out-of-cluster.")
}
// The clientset to the k8s cluster. Do not use this directly,
// rather use getK8sClientset to ensure that this is created properly
var _clientset *k8s.Clientset
// getK8sClientset creates a clientset using the given config
func getK8sClientset() *k8s.Clientset {
if _clientset != nil {
return _clientset
}
// Create the clientset and return
var cfg *restclient.Config
var err error
if len(config.masterURL) == 0 && len(config.kubeconfig) == 0 {
cfg, err = restclient.InClusterConfig()
} else {
cfg, err = clientcmd.BuildConfigFromFlags(config.masterURL, config.kubeconfig)
}
if err != nil {
klog.Error("Error building kubeconfig: ", err)
return nil
}
_clientset, err = k8s.NewForConfig(cfg)
if err != nil {
klog.Error("Error building kubernetes clientset: ", err)
return nil
}
return _clientset
}