1
0
Fork 0
mirror of https://github.com/kubernetes-sigs/node-feature-discovery.git synced 2025-03-13 20:30:03 +00:00

pkg/apihelpers: split out loading of kubeconfig to a separate function

Make kubeconfig loading and parsing re-usable for multiple clients.
This commit is contained in:
Markus Lehtonen 2021-06-08 16:17:38 +03:00
parent 5a193fd15a
commit 237c4f7824
3 changed files with 36 additions and 31 deletions

View file

@ -31,24 +31,11 @@ import (
// Implements APIHelpers
type K8sHelpers struct {
Kubeconfig string
Kubeconfig *restclient.Config
}
func (h K8sHelpers) GetClient() (*k8sclient.Clientset, error) {
// Set up an in-cluster K8S client.
var config *restclient.Config
var err error
if h.Kubeconfig == "" {
config, err = restclient.InClusterConfig()
} else {
config, err = clientcmd.BuildConfigFromFlags("", h.Kubeconfig)
}
if err != nil {
return nil, err
}
clientset, err := k8sclient.NewForConfig(config)
clientset, err := k8sclient.NewForConfig(h.Kubeconfig)
if err != nil {
return nil, err
}
@ -56,20 +43,7 @@ func (h K8sHelpers) GetClient() (*k8sclient.Clientset, error) {
}
func (h K8sHelpers) GetTopologyClient() (*topologyclientset.Clientset, error) {
// Set up an in-cluster K8S client.
var config *restclient.Config
var err error
if h.Kubeconfig == "" {
config, err = restclient.InClusterConfig()
} else {
config, err = clientcmd.BuildConfigFromFlags("", h.Kubeconfig)
}
if err != nil {
return nil, err
}
topologyClient, err := topologyclientset.NewForConfig(config)
topologyClient, err := topologyclientset.NewForConfig(h.Kubeconfig)
if err != nil {
return nil, err
}
@ -132,3 +106,10 @@ func (h K8sHelpers) GetPod(cli *k8sclient.Clientset, namespace string, podName s
return pod, nil
}
func GetKubeconfig(path string) (*restclient.Config, error) {
if path == "" {
return restclient.InClusterConfig()
}
return clientcmd.BuildConfigFromFlags("", path)
}

View file

@ -91,7 +91,15 @@ func (w *nfdTopologyUpdater) Run() error {
return fmt.Errorf("failed to get PodResource Client: %w", err)
}
kubeApihelper := apihelper.K8sHelpers{Kubeconfig: w.args.KubeConfigFile}
var kubeApihelper apihelper.K8sHelpers
if !w.args.NoPublish {
kubeconfig, err := apihelper.GetKubeconfig(w.args.KubeConfigFile)
if err != nil {
return err
}
kubeApihelper = apihelper.K8sHelpers{Kubeconfig: kubeconfig}
}
var resScan resourcemonitor.ResourcesScanner
resScan, err = resourcemonitor.NewPodResourcesScanner(w.resourcemonitorArgs.Namespace, podResClient, kubeApihelper)

View file

@ -39,6 +39,7 @@ import (
api "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
restclient "k8s.io/client-go/rest"
"k8s.io/klog/v2"
"sigs.k8s.io/node-feature-discovery/pkg/apihelper"
@ -110,6 +111,7 @@ type nfdMaster struct {
stop chan struct{}
ready chan bool
apihelper apihelper.APIHelpers
kubeconfig *restclient.Config
}
// Create new NfdMaster server instance.
@ -145,7 +147,13 @@ func NewNfdMaster(args *Args) (NfdMaster, error) {
}
// Initialize Kubernetes API helpers
nfd.apihelper = apihelper.K8sHelpers{Kubeconfig: args.Kubeconfig}
if !args.NoPublish {
kubeconfig, err := nfd.getKubeconfig()
if err != nil {
return nfd, err
}
nfd.apihelper = apihelper.K8sHelpers{Kubeconfig: kubeconfig}
}
return nfd, nil
}
@ -519,6 +527,14 @@ func (m *nfdMaster) annotationName(name string) string {
return path.Join(m.annotationNs, name)
}
func (m *nfdMaster) getKubeconfig() (*restclient.Config, error) {
var err error
if m.kubeconfig == nil {
m.kubeconfig, err = apihelper.GetKubeconfig(m.args.Kubeconfig)
}
return m.kubeconfig, err
}
// Remove any labels having the given prefix
func removeLabelsWithPrefix(n *api.Node, search string) []apihelper.JsonPatch {
var p []apihelper.JsonPatch