From 51f0fde0ee93d056c0ba6a901bd0d23464379965 Mon Sep 17 00:00:00 2001 From: Alvaro Aleman Date: Sat, 27 Feb 2021 12:39:28 -0500 Subject: [PATCH] :bug: Manager leader election: Don't reset restcfg UserAgent In pkg.LeaderElection.NewResourceLock we call rest.AddUserAgent which resets the restcfgs useragent and sets it to the default one plus a suffix. This resets whatever was originally set as UserAgent and since we do not copy our restcfg before passing it in there, this leads to the UserAgent being set to the leader-election one globally. --- pkg/manager/manager.go | 6 +++--- pkg/manager/manager_test.go | 14 ++++++++++++++ 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/pkg/manager/manager.go b/pkg/manager/manager.go index 686dca1a57..3b59ebb790 100644 --- a/pkg/manager/manager.go +++ b/pkg/manager/manager.go @@ -308,9 +308,9 @@ func New(config *rest.Config, options Options) (Manager, error) { } // Create the resource lock to enable leader election) - leaderConfig := config - if options.LeaderElectionConfig != nil { - leaderConfig = options.LeaderElectionConfig + leaderConfig := options.LeaderElectionConfig + if leaderConfig == nil { + leaderConfig = rest.CopyConfig(config) } resourceLock, err := options.newResourceLock(leaderConfig, recorderProvider, leaderelection.Options{ LeaderElection: options.LeaderElection, diff --git a/pkg/manager/manager_test.go b/pkg/manager/manager_test.go index 8161ad2a70..a494af95d4 100644 --- a/pkg/manager/manager_test.go +++ b/pkg/manager/manager_test.go @@ -592,6 +592,20 @@ var _ = Describe("manger.Manager", func() { close(done) }) + It("should not manipulate the provided config", func() { + originalCfg := rest.CopyConfig(cfg) + // The options object is shared by multiple tests, copy it + // into our scope so we manipulate it for this testcase only + options := options + options.newResourceLock = nil + m, err := New(cfg, options) + Expect(err).NotTo(HaveOccurred()) + for _, cb := range callbacks { + cb(m) + } + Expect(m.GetConfig()).To(Equal(originalCfg)) + }) + It("should stop when context is cancelled", func(done Done) { m, err := New(cfg, options) Expect(err).NotTo(HaveOccurred())