@@ -2,6 +2,7 @@ package externaldns
22
33import (
44 "context"
5+ "errors"
56 "fmt"
67 "sync"
78 "time"
@@ -58,7 +59,7 @@ type ExtDNSOpts struct {
5859}
5960
6061// NewController takes external dns config and return a new External DNS Controller.
61- func NewController (opts * ExtDNSOpts ) * ExtDNSController {
62+ func NewController (opts * ExtDNSOpts ) ( * ExtDNSController , error ) {
6263 ig := make (map [string ]* namespacedInformer )
6364 c := & ExtDNSController {
6465 ctx : opts .context ,
@@ -74,35 +75,44 @@ func NewController(opts *ExtDNSOpts) *ExtDNSController {
7475 // no initial namespaces with watched label - skip creating informers for now
7576 break
7677 }
77- c .newNamespacedInformer (ns )
78+ _ , err := c .newNamespacedInformer (ns )
79+ if err != nil {
80+ return nil , err
81+ }
7882 }
7983
8084 c .sync = SyncFnFor (c .recorder , c .client , c .informerGroup )
81- return c
85+ return c , nil
8286}
8387
84- func (c * ExtDNSController ) newNamespacedInformer (ns string ) * namespacedInformer {
88+ func (c * ExtDNSController ) newNamespacedInformer (ns string ) ( * namespacedInformer , error ) {
8589 nsi := & namespacedInformer {sharedInformerFactory : k8s_nginx_informers .NewSharedInformerFactoryWithOptions (c .client , c .resync , k8s_nginx_informers .WithNamespace (ns ))}
8690 nsi .stopCh = make (chan struct {})
8791 nsi .vsLister = nsi .sharedInformerFactory .K8s ().V1 ().VirtualServers ().Lister ()
8892 nsi .extdnslister = nsi .sharedInformerFactory .Externaldns ().V1 ().DNSEndpoints ().Lister ()
8993
90- nsi .sharedInformerFactory .K8s ().V1 ().VirtualServers ().Informer ().AddEventHandler (
94+ vsInformer := nsi .sharedInformerFactory .K8s ().V1 ().VirtualServers ().Informer ()
95+ vsHandlerReg , err := vsInformer .AddEventHandler (
9196 & QueuingEventHandler {
9297 Queue : c .queue ,
9398 },
9499 )
95-
96- nsi .sharedInformerFactory .Externaldns ().V1 ().DNSEndpoints ().Informer ().AddEventHandler (& BlockingEventHandler {
100+ if err != nil {
101+ return nil , err
102+ }
103+ dnsInformer := nsi .sharedInformerFactory .Externaldns ().V1 ().DNSEndpoints ().Informer ()
104+ dnsHandlerReg , err := dnsInformer .AddEventHandler (& BlockingEventHandler {
97105 WorkFunc : externalDNSHandler (c .queue ),
98106 })
99-
107+ if err != nil {
108+ return nil , err
109+ }
100110 nsi .mustSync = append (nsi .mustSync ,
101- nsi . sharedInformerFactory . K8s (). V1 (). VirtualServers (). Informer () .HasSynced ,
102- nsi . sharedInformerFactory . Externaldns (). V1 (). DNSEndpoints (). Informer () .HasSynced ,
111+ vsHandlerReg .HasSynced ,
112+ dnsHandlerReg .HasSynced ,
103113 )
104114 c .informerGroup [ns ] = nsi
105- return nsi
115+ return nsi , nil
106116}
107117
108118// Run sets up the event handlers for types we are interested in, as well
@@ -254,16 +264,20 @@ func getNamespacedInformer(ns string, ig map[string]*namespacedInformer) *namesp
254264}
255265
256266// AddNewNamespacedInformer adds watchers for a new namespace
257- func (c * ExtDNSController ) AddNewNamespacedInformer (ns string ) {
267+ func (c * ExtDNSController ) AddNewNamespacedInformer (ns string ) error {
258268 glog .V (3 ).Infof ("Adding or Updating cert-manager Watchers for Namespace: %v" , ns )
259269 nsi := getNamespacedInformer (ns , c .informerGroup )
260270 if nsi == nil {
261- nsi = c .newNamespacedInformer (ns )
271+ nsi , err := c .newNamespacedInformer (ns )
272+ if err != nil {
273+ return err
274+ }
262275 nsi .start ()
263276 }
264277 if ! cache .WaitForCacheSync (nsi .stopCh , nsi .mustSync ... ) {
265- return
278+ return errors . New ( "failed to sync the cache" )
266279 }
280+ return nil
267281}
268282
269283// RemoveNamespacedInformer removes watchers for a namespace we are no longer watching
0 commit comments