Merge pull request #8887 from brendandburns/balancer

Add event generation when create/delete of balancers fails.
This commit is contained in:
Rohit Jnagal 2015-05-29 13:32:11 -07:00
commit ae8bc2c47b

View File

@ -27,6 +27,7 @@ import (
"github.com/GoogleCloudPlatform/kubernetes/pkg/api/errors" "github.com/GoogleCloudPlatform/kubernetes/pkg/api/errors"
"github.com/GoogleCloudPlatform/kubernetes/pkg/client" "github.com/GoogleCloudPlatform/kubernetes/pkg/client"
"github.com/GoogleCloudPlatform/kubernetes/pkg/client/cache" "github.com/GoogleCloudPlatform/kubernetes/pkg/client/cache"
"github.com/GoogleCloudPlatform/kubernetes/pkg/client/record"
"github.com/GoogleCloudPlatform/kubernetes/pkg/cloudprovider" "github.com/GoogleCloudPlatform/kubernetes/pkg/cloudprovider"
"github.com/GoogleCloudPlatform/kubernetes/pkg/fields" "github.com/GoogleCloudPlatform/kubernetes/pkg/fields"
"github.com/GoogleCloudPlatform/kubernetes/pkg/labels" "github.com/GoogleCloudPlatform/kubernetes/pkg/labels"
@ -62,22 +63,30 @@ type serviceCache struct {
} }
type ServiceController struct { type ServiceController struct {
cloud cloudprovider.Interface cloud cloudprovider.Interface
kubeClient client.Interface kubeClient client.Interface
clusterName string clusterName string
balancer cloudprovider.TCPLoadBalancer balancer cloudprovider.TCPLoadBalancer
zone cloudprovider.Zone zone cloudprovider.Zone
cache *serviceCache cache *serviceCache
eventBroadcaster record.EventBroadcaster
eventRecorder record.EventRecorder
} }
// New returns a new service controller to keep cloud provider service resources // New returns a new service controller to keep cloud provider service resources
// (like external load balancers) in sync with the registry. // (like external load balancers) in sync with the registry.
func New(cloud cloudprovider.Interface, kubeClient client.Interface, clusterName string) *ServiceController { func New(cloud cloudprovider.Interface, kubeClient client.Interface, clusterName string) *ServiceController {
broadcaster := record.NewBroadcaster()
broadcaster.StartRecordingToSink(kubeClient.Events(""))
recorder := broadcaster.NewRecorder(api.EventSource{Component: "service-controller"})
return &ServiceController{ return &ServiceController{
cloud: cloud, cloud: cloud,
kubeClient: kubeClient, kubeClient: kubeClient,
clusterName: clusterName, clusterName: clusterName,
cache: &serviceCache{serviceMap: make(map[string]*cachedService)}, cache: &serviceCache{serviceMap: make(map[string]*cachedService)},
eventBroadcaster: broadcaster,
eventRecorder: recorder,
} }
} }
@ -206,6 +215,7 @@ func (s *ServiceController) processDelta(delta *cache.Delta) (error, bool) {
case cache.Sync: case cache.Sync:
err, retry := s.createLoadBalancerIfNeeded(namespacedName, service, cachedService.service) err, retry := s.createLoadBalancerIfNeeded(namespacedName, service, cachedService.service)
if err != nil { if err != nil {
s.eventRecorder.Event(service, "creating loadbalancer failed", err.Error())
return err, retry return err, retry
} }
// Always update the cache upon success. // Always update the cache upon success.
@ -217,6 +227,7 @@ func (s *ServiceController) processDelta(delta *cache.Delta) (error, bool) {
case cache.Deleted: case cache.Deleted:
err := s.balancer.EnsureTCPLoadBalancerDeleted(s.loadBalancerName(service), s.zone.Region) err := s.balancer.EnsureTCPLoadBalancerDeleted(s.loadBalancerName(service), s.zone.Region)
if err != nil { if err != nil {
s.eventRecorder.Event(service, "deleting loadbalancer failed", err.Error())
return err, retryable return err, retryable
} }
s.cache.delete(namespacedName.String()) s.cache.delete(namespacedName.String())