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{}) }