func/pkg/k8s/client.go

54 lines
1.3 KiB
Go

package k8s
import (
"fmt"
"k8s.io/client-go/dynamic"
"k8s.io/client-go/kubernetes"
_ "k8s.io/client-go/plugin/pkg/client/auth"
"k8s.io/client-go/tools/clientcmd"
)
func NewClientAndResolvedNamespace(ns string) (*kubernetes.Clientset, string, error) {
var err error
if ns == "" {
ns, err = GetDefaultNamespace()
if err != nil {
return nil, ns, err
}
}
client, err := NewKubernetesClientset()
return client, ns, err
}
func NewKubernetesClientset() (*kubernetes.Clientset, error) {
restConfig, err := GetClientConfig().ClientConfig()
if err != nil {
return nil, fmt.Errorf("failed to create new kubernetes client: %w", err)
}
return kubernetes.NewForConfig(restConfig)
}
func NewDynamicClient() (dynamic.Interface, error) {
restConfig, err := GetClientConfig().ClientConfig()
if err != nil {
return nil, fmt.Errorf("failed to create new kubernetes client: %w", err)
}
return dynamic.NewForConfig(restConfig)
}
// GetDefaultNamespace returns default namespace
func GetDefaultNamespace() (namespace string, err error) {
namespace, _, err = GetClientConfig().Namespace()
return
}
func GetClientConfig() clientcmd.ClientConfig {
return clientcmd.NewNonInteractiveDeferredLoadingClientConfig(
clientcmd.NewDefaultClientConfigLoadingRules(),
&clientcmd.ConfigOverrides{})
}