From 5b14150b0910c2b5f069ba0383df05732c6c9550 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20Przychodze=C5=84?= Date: Fri, 16 Oct 2020 11:28:42 +0200 Subject: [PATCH] Add new way to generate leader election lock Kubernetes-commit: 24033c908d8363ea6628b1d1c0b2a48c96a338da --- tools/leaderelection/resourcelock/interface.go | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/tools/leaderelection/resourcelock/interface.go b/tools/leaderelection/resourcelock/interface.go index 74630a31..c5d7ae3c 100644 --- a/tools/leaderelection/resourcelock/interface.go +++ b/tools/leaderelection/resourcelock/interface.go @@ -19,6 +19,9 @@ package resourcelock import ( "context" "fmt" + clientset "k8s.io/client-go/kubernetes" + restclient "k8s.io/client-go/rest" + "time" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" @@ -140,3 +143,16 @@ func New(lockType string, ns string, name string, coreClient corev1.CoreV1Interf return nil, fmt.Errorf("Invalid lock-type %s", lockType) } } + +// NewFromKubeconfig will create a lock of a given type according to the input parameters. +func NewFromKubeconfig(lockType string, ns string, name string, rlc ResourceLockConfig, kubeconfig *restclient.Config, renewDeadline time.Duration) (Interface, error) { + // shallow copy, do not modify the kubeconfig + config := *kubeconfig + timeout := ((renewDeadline / time.Millisecond) / 2) * time.Millisecond + if timeout < time.Second { + timeout = time.Second + } + config.Timeout = timeout + leaderElectionClient := clientset.NewForConfigOrDie(restclient.AddUserAgent(&config, "leader-election")) + return New(lockType, ns, name, leaderElectionClient.CoreV1(), leaderElectionClient.CoordinationV1(), rlc) +}