@@ -27,6 +27,7 @@ import (
27
27
"github.com/GoogleCloudPlatform/kubernetes/pkg/api/errors"
28
28
"github.com/GoogleCloudPlatform/kubernetes/pkg/client"
29
29
"github.com/GoogleCloudPlatform/kubernetes/pkg/client/cache"
30
+ "github.com/GoogleCloudPlatform/kubernetes/pkg/client/record"
30
31
"github.com/GoogleCloudPlatform/kubernetes/pkg/cloudprovider"
31
32
"github.com/GoogleCloudPlatform/kubernetes/pkg/fields"
32
33
"github.com/GoogleCloudPlatform/kubernetes/pkg/labels"
@@ -62,22 +63,30 @@ type serviceCache struct {
62
63
}
63
64
64
65
type ServiceController struct {
65
- cloud cloudprovider.Interface
66
- kubeClient client.Interface
67
- clusterName string
68
- balancer cloudprovider.TCPLoadBalancer
69
- zone cloudprovider.Zone
70
- cache * serviceCache
66
+ cloud cloudprovider.Interface
67
+ kubeClient client.Interface
68
+ clusterName string
69
+ balancer cloudprovider.TCPLoadBalancer
70
+ zone cloudprovider.Zone
71
+ cache * serviceCache
72
+ eventBroadcaster record.EventBroadcaster
73
+ eventRecorder record.EventRecorder
71
74
}
72
75
73
76
// New returns a new service controller to keep cloud provider service resources
74
77
// (like external load balancers) in sync with the registry.
75
78
func New (cloud cloudprovider.Interface , kubeClient client.Interface , clusterName string ) * ServiceController {
79
+ broadcaster := record .NewBroadcaster ()
80
+ broadcaster .StartRecordingToSink (kubeClient .Events ("" ))
81
+ recorder := broadcaster .NewRecorder (api.EventSource {Component : "service-controller" })
82
+
76
83
return & ServiceController {
77
- cloud : cloud ,
78
- kubeClient : kubeClient ,
79
- clusterName : clusterName ,
80
- cache : & serviceCache {serviceMap : make (map [string ]* cachedService )},
84
+ cloud : cloud ,
85
+ kubeClient : kubeClient ,
86
+ clusterName : clusterName ,
87
+ cache : & serviceCache {serviceMap : make (map [string ]* cachedService )},
88
+ eventBroadcaster : broadcaster ,
89
+ eventRecorder : recorder ,
81
90
}
82
91
}
83
92
@@ -206,6 +215,7 @@ func (s *ServiceController) processDelta(delta *cache.Delta) (error, bool) {
206
215
case cache .Sync :
207
216
err , retry := s .createLoadBalancerIfNeeded (namespacedName , service , cachedService .service )
208
217
if err != nil {
218
+ s .eventRecorder .Event (service , "creating loadbalancer failed" , err .Error ())
209
219
return err , retry
210
220
}
211
221
// Always update the cache upon success.
@@ -217,6 +227,7 @@ func (s *ServiceController) processDelta(delta *cache.Delta) (error, bool) {
217
227
case cache .Deleted :
218
228
err := s .balancer .EnsureTCPLoadBalancerDeleted (s .loadBalancerName (service ), s .zone .Region )
219
229
if err != nil {
230
+ s .eventRecorder .Event (service , "deleting loadbalancer failed" , err .Error ())
220
231
return err , retryable
221
232
}
222
233
s .cache .delete (namespacedName .String ())
0 commit comments