59 lines
1.8 KiB
Go
59 lines
1.8 KiB
Go
package nodeutil
|
|
|
|
import (
|
|
"os"
|
|
|
|
"github.com/pkg/errors"
|
|
corev1 "k8s.io/api/core/v1"
|
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
"k8s.io/apimachinery/pkg/fields"
|
|
kubeinformers "k8s.io/client-go/informers"
|
|
"k8s.io/client-go/kubernetes"
|
|
"k8s.io/client-go/kubernetes/typed/coordination/v1beta1"
|
|
"k8s.io/client-go/rest"
|
|
"k8s.io/client-go/tools/clientcmd"
|
|
)
|
|
|
|
// ClientsetFromEnv returns a kuberentes client set from:
|
|
// 1. the passed in kubeconfig path
|
|
// 2. If the kubeconfig path is empty or non-existent, then the in-cluster config is used.
|
|
func ClientsetFromEnv(kubeConfigPath string) (*kubernetes.Clientset, error) {
|
|
var (
|
|
config *rest.Config
|
|
err error
|
|
)
|
|
|
|
if kubeConfigPath != "" {
|
|
if _, err := os.Stat(kubeConfigPath); err != nil {
|
|
config, err = rest.InClusterConfig()
|
|
} else {
|
|
config, err = clientcmd.NewNonInteractiveDeferredLoadingClientConfig(
|
|
&clientcmd.ClientConfigLoadingRules{ExplicitPath: kubeConfigPath},
|
|
nil,
|
|
).ClientConfig()
|
|
}
|
|
} else {
|
|
config, err = rest.InClusterConfig()
|
|
}
|
|
|
|
if err != nil {
|
|
return nil, errors.Wrap(err, "error getting rest client config")
|
|
}
|
|
|
|
return kubernetes.NewForConfig(config)
|
|
}
|
|
|
|
// PodInformerFilter is a filter that you should use when creating a pod informer for use with the pod controller.
|
|
func PodInformerFilter(node string) kubeinformers.SharedInformerOption {
|
|
return kubeinformers.WithTweakListOptions(func(options *metav1.ListOptions) {
|
|
options.FieldSelector = fields.OneTermEqualSelector("spec.nodeName", node).String()
|
|
})
|
|
}
|
|
|
|
// NodeLeaseV1Beta1Client creates a v1beta1 Lease client for use with node leases from the passed in client.
|
|
//
|
|
// Use this with node.WithNodeEnableLeaseV1Beta1 when creating a node controller.
|
|
func NodeLeaseV1Beta1Client(client kubernetes.Interface) v1beta1.LeaseInterface {
|
|
return client.CoordinationV1beta1().Leases(corev1.NamespaceNodeLease)
|
|
}
|