@@ -16,13 +16,13 @@ import (
1616)
1717
1818type ConfigMapWatcher struct {
19- clients [ ]kubernetes.Interface
19+ clients map [ string ]kubernetes.Interface
2020 namespace string
2121 selector fields.Selector
2222 configs chan provider.EgressConfig
2323}
2424
25- func NewConfigMapWatcher (clients [ ]kubernetes.Interface , namespace , selectorStr string , configs chan provider.EgressConfig ) (* ConfigMapWatcher , error ) {
25+ func NewConfigMapWatcher (clients map [ string ]kubernetes.Interface , namespace , selectorStr string , configs chan provider.EgressConfig ) (* ConfigMapWatcher , error ) {
2626 selector , err := fields .ParseSelector (selectorStr )
2727 if err != nil {
2828 return nil , err
@@ -37,12 +37,12 @@ func NewConfigMapWatcher(clients []kubernetes.Interface, namespace, selectorStr
3737}
3838
3939func (c * ConfigMapWatcher ) Run (ctx context.Context ) {
40- for _ , client := range c .clients {
41- c .runForClient (ctx , client )
40+ for cluster , client := range c .clients {
41+ c .runForClient (ctx , client , cluster )
4242 }
4343}
4444
45- func (c * ConfigMapWatcher ) runForClient (ctx context.Context , client kubernetes.Interface ) {
45+ func (c * ConfigMapWatcher ) runForClient (ctx context.Context , client kubernetes.Interface , cluster string ) {
4646 informer := cache .NewSharedIndexInformer (
4747 & cache.ListWatch {
4848 ListFunc : func (options metav1.ListOptions ) (runtime.Object , error ) {
@@ -60,9 +60,9 @@ func (c *ConfigMapWatcher) runForClient(ctx context.Context, client kubernetes.I
6060 )
6161
6262 informer .AddEventHandler (cache.ResourceEventHandlerFuncs {
63- AddFunc : c .add ,
64- UpdateFunc : c .update ,
65- DeleteFunc : c .del ,
63+ AddFunc : c .add ( cluster ) ,
64+ UpdateFunc : c .update ( cluster ) ,
65+ DeleteFunc : c .del ( cluster ) ,
6666 })
6767
6868 go informer .Run (ctx .Done ())
@@ -75,45 +75,52 @@ func (c *ConfigMapWatcher) runForClient(ctx context.Context, client kubernetes.I
7575 log .Info ("Synced ConfigMap watcher" )
7676}
7777
78- func (c * ConfigMapWatcher ) add (obj interface {}) {
79- cm , ok := obj .(* v1.ConfigMap )
80- if ! ok {
81- log .Errorf ("Failed to get ConfigMap object" )
82- return
83- }
78+ func (c * ConfigMapWatcher ) add (cluster string ) func (obj interface {}) {
79+ return func (obj interface {}) {
80+ cm , ok := obj .(* v1.ConfigMap )
81+ if ! ok {
82+ log .Errorf ("Failed to get ConfigMap object" )
83+ return
84+ }
8485
85- c .configs <- configMapToEgressConfig (cm )
86+ c .configs <- configMapToEgressConfig (cm , cluster )
87+ }
8688}
8789
88- func (c * ConfigMapWatcher ) update (oldObj , newObj interface {}) {
89- newCM , ok := newObj .(* v1.ConfigMap )
90- if ! ok {
91- log .Errorf ("Failed to get new ConfigMap object" )
92- return
93- }
90+ func (c * ConfigMapWatcher ) update (cluster string ) func (oldObj , newObj interface {}) {
91+ return func (oldObj , newObj interface {}) {
92+ newCM , ok := newObj .(* v1.ConfigMap )
93+ if ! ok {
94+ log .Errorf ("Failed to get new ConfigMap object" )
95+ return
96+ }
9497
95- c .configs <- configMapToEgressConfig (newCM )
98+ c .configs <- configMapToEgressConfig (newCM , cluster )
99+ }
96100}
97101
98- func (c * ConfigMapWatcher ) del (obj interface {}) {
99- cm , ok := obj .(* v1.ConfigMap )
100- if ! ok {
101- log .Errorf ("Failed to get ConfigMap object" )
102- return
103- }
102+ func (c * ConfigMapWatcher ) del (cluster string ) func (obj interface {}) {
103+ return func (obj interface {}) {
104+ cm , ok := obj .(* v1.ConfigMap )
105+ if ! ok {
106+ log .Errorf ("Failed to get ConfigMap object" )
107+ return
108+ }
104109
105- c .configs <- provider.EgressConfig {
106- Resource : provider.Resource {
107- Name : cm .Name ,
108- Namespace : cm .Namespace ,
109- },
110+ c .configs <- provider.EgressConfig {
111+ Resource : provider.Resource {
112+ Name : cm .Name ,
113+ Namespace : cm .Namespace ,
114+ Cluster : cluster ,
115+ },
116+ }
110117 }
111118}
112119
113120func (c * ConfigMapWatcher ) ListConfigs (ctx context.Context ) ([]provider.EgressConfig , error ) {
114121 egressConfigs := []provider.EgressConfig {}
115- for _ , client := range c .clients {
116- configs , err := c .listConfigsForClient (ctx , client )
122+ for cluster , client := range c .clients {
123+ configs , err := c .listConfigsForClient (ctx , client , cluster )
117124 if err != nil {
118125 return nil , err
119126 }
@@ -122,7 +129,7 @@ func (c *ConfigMapWatcher) ListConfigs(ctx context.Context) ([]provider.EgressCo
122129 return egressConfigs , nil
123130}
124131
125- func (c * ConfigMapWatcher ) listConfigsForClient (ctx context.Context , client kubernetes.Interface ) ([]provider.EgressConfig , error ) {
132+ func (c * ConfigMapWatcher ) listConfigsForClient (ctx context.Context , client kubernetes.Interface , cluster string ) ([]provider.EgressConfig , error ) {
126133 opts := metav1.ListOptions {
127134 LabelSelector : c .selector .String (),
128135 }
@@ -134,7 +141,7 @@ func (c *ConfigMapWatcher) listConfigsForClient(ctx context.Context, client kube
134141
135142 configs := make ([]provider.EgressConfig , 0 , len (configMaps .Items ))
136143 for _ , cm := range configMaps .Items {
137- configs = append (configs , configMapToEgressConfig (& cm ))
144+ configs = append (configs , configMapToEgressConfig (& cm , cluster ))
138145 }
139146 return configs , nil
140147}
@@ -143,7 +150,7 @@ func (c *ConfigMapWatcher) Config() <-chan provider.EgressConfig {
143150 return c .configs
144151}
145152
146- func configMapToEgressConfig (cm * v1.ConfigMap ) provider.EgressConfig {
153+ func configMapToEgressConfig (cm * v1.ConfigMap , cluster string ) provider.EgressConfig {
147154 ipAddresses := make (map [string ]* net.IPNet )
148155 for key , cidr := range cm .Data {
149156 _ , ipnet , err := net .ParseCIDR (cidr )
@@ -158,6 +165,7 @@ func configMapToEgressConfig(cm *v1.ConfigMap) provider.EgressConfig {
158165 Resource : provider.Resource {
159166 Name : cm .Name ,
160167 Namespace : cm .Namespace ,
168+ Cluster : cluster ,
161169 },
162170 IPAddresses : ipAddresses ,
163171 }
0 commit comments