From 87cb1aa99993c3252a454195ecbad1be32a243d7 Mon Sep 17 00:00:00 2001 From: Alvaro Aleman Date: Sat, 29 Aug 2020 15:23:01 -0400 Subject: [PATCH] =?UTF-8?q?=E2=9A=A0=20Change=20leaderlock=20from=20Config?= =?UTF-8?q?Map=20to=20ConfigMapsLeasesResourceLock?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This commit changes the leaderlock to ConfigMapsLeasesResourceLock, which is intended to transition ppl from the ConfigMap to the more modern Leases. It is breaking because additional RBAC is required. --- pkg/leaderelection/leader_election.go | 2 +- pkg/manager/manager_test.go | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/pkg/leaderelection/leader_election.go b/pkg/leaderelection/leader_election.go index ed9361e8f3..31ca68a42e 100644 --- a/pkg/leaderelection/leader_election.go +++ b/pkg/leaderelection/leader_election.go @@ -81,7 +81,7 @@ func NewResourceLock(config *rest.Config, recorderProvider recorder.Provider, op } // TODO(JoelSpeed): switch to leaderelection object in 1.12 - return resourcelock.New(resourcelock.ConfigMapsResourceLock, + return resourcelock.New(resourcelock.ConfigMapsLeasesResourceLock, options.LeaderElectionNamespace, options.LeaderElectionID, client.CoreV1(), diff --git a/pkg/manager/manager_test.go b/pkg/manager/manager_test.go index 73166cd58a..92c1d1d863 100644 --- a/pkg/manager/manager_test.go +++ b/pkg/manager/manager_test.go @@ -302,6 +302,24 @@ var _ = Describe("manger.Manager", func() { Expect(err).To(HaveOccurred()) Expect(err.Error()).To(ContainSubstring("unable to find leader election namespace: not running in-cluster, please specify LeaderElectionNamespace")) }) + + // We must keep this default until we are sure all controller-runtime users have upgraded from the original default + // ConfigMap lock to a controller-runtime version that has this new default. Many users of controller-runtime skip + // versions, so we should be extremely conservative here. + It("should default to ConfigMapsLeasesResourceLock", func() { + m, err := New(cfg, Options{LeaderElection: true, LeaderElectionID: "controller-runtime", LeaderElectionNamespace: "my-ns"}) + Expect(m).ToNot(BeNil()) + Expect(err).ToNot(HaveOccurred()) + cm, ok := m.(*controllerManager) + Expect(ok).To(BeTrue()) + multilock, isMultiLock := cm.resourceLock.(*resourcelock.MultiLock) + Expect(isMultiLock).To(BeTrue()) + _, primaryIsConfigMapLock := multilock.Primary.(*resourcelock.ConfigMapLock) + Expect(primaryIsConfigMapLock).To(BeTrue()) + _, secondaryIsLeaseLock := multilock.Secondary.(*resourcelock.LeaseLock) + Expect(secondaryIsLeaseLock).To(BeTrue()) + + }) }) It("should create a listener for the metrics if a valid address is provided", func() {