Skip to content

Instantly share code, notes, and snippets.

@jsnouffer
Last active August 9, 2020 20:08
Show Gist options
  • Save jsnouffer/e1a88621a1a207390bd458e54fa233c1 to your computer and use it in GitHub Desktop.
Save jsnouffer/e1a88621a1a207390bd458e54fa233c1 to your computer and use it in GitHub Desktop.
Writing a Kubernetes CLI in Go
package client
import (
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/rest"
"k8s.io/client-go/tools/clientcmd"
clientcmdapi "k8s.io/client-go/tools/clientcmd/api"
)
// GetLocal reads a user's KUBECONFIG file and returns a Client interface, a REST interface, and current namespace
func GetLocal() (*kubernetes.Clientset, *rest.Config, string, error) {
var err error
clientConfig := clientcmd.NewNonInteractiveDeferredLoadingClientConfig(
clientcmd.NewDefaultClientConfigLoadingRules(),
&clientcmd.ConfigOverrides{ClusterInfo: clientcmdapi.Cluster{Server: ""}})
namespace, _, err := clientConfig.Namespace()
if err != nil {
return nil, nil, "", err
}
config, err := clientConfig.ClientConfig()
if err != nil {
return nil, nil, "", err
}
client, err := kubernetes.NewForConfig(config)
if err != nil {
return nil, nil, "", err
}
return client, config, namespace, nil
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment