Merge pull request #776 from nyaxt/respectzone

ServiceRegistryStorage.Delete should respect zone.
This commit is contained in:
Tim Hockin 2014-08-04 14:29:46 -07:00
commit 7f0d470979
2 changed files with 33 additions and 14 deletions

View File

@ -118,25 +118,44 @@ func (sr *ServiceRegistryStorage) Get(id string) (interface{}, error) {
return service, err return service, err
} }
func (sr *ServiceRegistryStorage) deleteExternalLoadBalancer(service *api.Service) error {
if !service.CreateExternalLoadBalancer || sr.cloud == nil {
return nil
}
zones, ok := sr.cloud.Zones()
if !ok {
// We failed to get zone enumerator.
// As this should have failed when we tried in "create" too,
// assume external load balancer was never created.
return nil
}
balancer, ok := sr.cloud.TCPLoadBalancer()
if !ok {
// See comment above.
return nil
}
zone, err := zones.GetZone()
if err != nil {
return err
}
if err := balancer.DeleteTCPLoadBalancer(service.JSONBase.ID, zone); err != nil {
return err
}
return nil
}
func (sr *ServiceRegistryStorage) Delete(id string) (<-chan interface{}, error) { func (sr *ServiceRegistryStorage) Delete(id string) (<-chan interface{}, error) {
service, err := sr.registry.GetService(id) service, err := sr.registry.GetService(id)
if err != nil { if err != nil {
return nil, err return nil, err
} }
return apiserver.MakeAsync(func() (interface{}, error) { return apiserver.MakeAsync(func() (interface{}, error) {
if service.CreateExternalLoadBalancer { sr.deleteExternalLoadBalancer(service)
var balancer cloudprovider.TCPLoadBalancer
var ok bool
if sr.cloud != nil {
balancer, ok = sr.cloud.TCPLoadBalancer()
}
if ok && balancer != nil {
err = balancer.DeleteTCPLoadBalancer(id, "us-central1")
if err != nil {
return nil, err
}
}
}
return api.Status{Status: api.StatusSuccess}, sr.registry.DeleteService(id) return api.Status{Status: api.StatusSuccess}, sr.registry.DeleteService(id)
}), nil }), nil
} }

View File

@ -211,7 +211,7 @@ func TestServiceRegistryDeleteExternal(t *testing.T) {
c, _ := storage.Delete(svc.ID) c, _ := storage.Delete(svc.ID)
<-c <-c
if len(fakeCloud.Calls) != 1 || fakeCloud.Calls[0] != "delete" { if len(fakeCloud.Calls) != 2 || fakeCloud.Calls[0] != "get-zone" || fakeCloud.Calls[1] != "delete" {
t.Errorf("Unexpected call(s): %#v", fakeCloud.Calls) t.Errorf("Unexpected call(s): %#v", fakeCloud.Calls)
} }
srv, err := memory.GetService(svc.ID) srv, err := memory.GetService(svc.ID)