diff --git a/pkg/backends/backends.go b/pkg/backends/backends.go index 4a00e62760..3534d57fbd 100644 --- a/pkg/backends/backends.go +++ b/pkg/backends/backends.go @@ -129,6 +129,25 @@ func (b *Backends) Update(be *composite.BackendService) error { return nil } +// Patch implements Pool. +func (b *Backends) Patch(be *composite.BackendService) error { + // Ensure the backend service has the proper version before updating. + be.Version = features.VersionFromDescription(be.Description) + scope, err := composite.ScopeFromSelfLink(be.SelfLink) + if err != nil { + return err + } + + key, err := composite.CreateKey(b.cloud, be.Name, scope) + if err != nil { + return err + } + if err := composite.PatchBackendService(b.cloud, key, be); err != nil { + return err + } + return nil +} + // Get implements Pool. func (b *Backends) Get(name string, version meta.Version, scope meta.KeyType) (*composite.BackendService, error) { key, err := composite.CreateKey(b.cloud, name, scope) diff --git a/pkg/backends/interfaces.go b/pkg/backends/interfaces.go index f8f20ab2f0..57826bc5bf 100644 --- a/pkg/backends/interfaces.go +++ b/pkg/backends/interfaces.go @@ -39,6 +39,8 @@ type Pool interface { Create(sp utils.ServicePort, hcLink string) (*composite.BackendService, error) // Update a BackendService given the composite type. Update(be *composite.BackendService) error + // Patch a BackendService given the composite type. + Patch(be *composite.BackendService) error // Delete a BackendService given its name. Delete(name string, version meta.Version, scope meta.KeyType) error // Get the health of a BackendService given its name. diff --git a/pkg/backends/syncer.go b/pkg/backends/syncer.go index dcfee12318..4913446373 100644 --- a/pkg/backends/syncer.go +++ b/pkg/backends/syncer.go @@ -113,7 +113,7 @@ func (s *backendSyncer) ensureBackendService(sp utils.ServicePort) error { } if needUpdate { - if err := s.backendPool.Update(be); err != nil { + if err := s.backendPool.Patch(be); err != nil { return err } } diff --git a/pkg/backends/syncer_test.go b/pkg/backends/syncer_test.go index 88432dbc24..be4f6e11a3 100644 --- a/pkg/backends/syncer_test.go +++ b/pkg/backends/syncer_test.go @@ -154,6 +154,9 @@ func newTestSyncer(fakeGCE *gce.Cloud) *backendSyncer { (fakeGCE.Compute().(*cloud.MockGCE)).MockAlphaBackendServices.UpdateHook = mock.UpdateAlphaBackendServiceHook (fakeGCE.Compute().(*cloud.MockGCE)).MockBetaBackendServices.UpdateHook = mock.UpdateBetaBackendServiceHook (fakeGCE.Compute().(*cloud.MockGCE)).MockBackendServices.UpdateHook = mock.UpdateBackendServiceHook + (fakeGCE.Compute().(*cloud.MockGCE)).MockAlphaBackendServices.PatchHook = mock.UpdateAlphaBackendServiceHook + (fakeGCE.Compute().(*cloud.MockGCE)).MockBetaBackendServices.PatchHook = mock.UpdateBetaBackendServiceHook + (fakeGCE.Compute().(*cloud.MockGCE)).MockBackendServices.PatchHook = mock.UpdateBackendServiceHook (fakeGCE.Compute().(*cloud.MockGCE)).MockHealthChecks.UpdateHook = mock.UpdateHealthCheckHook (fakeGCE.Compute().(*cloud.MockGCE)).MockAlphaHealthChecks.UpdateHook = mock.UpdateAlphaHealthCheckHook (fakeGCE.Compute().(*cloud.MockGCE)).MockAlphaRegionHealthChecks.UpdateHook = mock.UpdateAlphaRegionHealthCheckHook