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())