From c516a35d4d0cb2cbe0b4e977a6d355ecfa23ae2b Mon Sep 17 00:00:00 2001 From: Zihong Zheng Date: Tue, 5 Jun 2018 15:18:13 -0700 Subject: [PATCH 1/2] [gce provider] Wrapper for beta backend servvice create/update --- .../providers/gce/cloud/meta/meta.go | 1 + .../providers/gce/gce_backendservice.go | 23 +++++++++++++++++-- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/pkg/cloudprovider/providers/gce/cloud/meta/meta.go b/pkg/cloudprovider/providers/gce/cloud/meta/meta.go index e9ff33d43da..321290e52a1 100644 --- a/pkg/cloudprovider/providers/gce/cloud/meta/meta.go +++ b/pkg/cloudprovider/providers/gce/cloud/meta/meta.go @@ -115,6 +115,7 @@ var AllServices = []*ServiceInfo{ keyType: Global, serviceType: reflect.TypeOf(&beta.BackendServicesService{}), additionalMethods: []string{ + "Update", "SetSecurityPolicy", }, }, diff --git a/pkg/cloudprovider/providers/gce/gce_backendservice.go b/pkg/cloudprovider/providers/gce/gce_backendservice.go index 4b330a49ede..23dc3bf1cb3 100644 --- a/pkg/cloudprovider/providers/gce/gce_backendservice.go +++ b/pkg/cloudprovider/providers/gce/gce_backendservice.go @@ -74,13 +74,23 @@ func (gce *GCECloud) UpdateGlobalBackendService(bg *compute.BackendService) erro return mc.Observe(gce.c.BackendServices().Update(ctx, meta.GlobalKey(bg.Name), bg)) } +// UpdateBetaGlobalBackendService applies the given beta BackendService as an +// update to an existing service. +func (gce *GCECloud) UpdateBetaGlobalBackendService(bg *computebeta.BackendService) error { + ctx, cancel := cloud.ContextWithCallTimeout() + defer cancel() + + mc := newBackendServiceMetricContextWithVersion("update", "", computeBetaVersion) + return mc.Observe(gce.c.BetaBackendServices().Update(ctx, meta.GlobalKey(bg.Name), bg)) +} + // UpdateAlphaGlobalBackendService applies the given alpha BackendService as an // update to an existing service. func (gce *GCECloud) UpdateAlphaGlobalBackendService(bg *computealpha.BackendService) error { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() - mc := newBackendServiceMetricContext("update", "") + mc := newBackendServiceMetricContextWithVersion("update", "", computeAlphaVersion) return mc.Observe(gce.c.AlphaBackendServices().Update(ctx, meta.GlobalKey(bg.Name), bg)) } @@ -102,12 +112,21 @@ func (gce *GCECloud) CreateGlobalBackendService(bg *compute.BackendService) erro return mc.Observe(gce.c.BackendServices().Insert(ctx, meta.GlobalKey(bg.Name), bg)) } +// CreateBetaGlobalBackendService creates the given beta BackendService. +func (gce *GCECloud) CreateBetaGlobalBackendService(bg *computebeta.BackendService) error { + ctx, cancel := cloud.ContextWithCallTimeout() + defer cancel() + + mc := newBackendServiceMetricContextWithVersion("create", "", computeBetaVersion) + return mc.Observe(gce.c.BetaBackendServices().Insert(ctx, meta.GlobalKey(bg.Name), bg)) +} + // CreateAlphaGlobalBackendService creates the given alpha BackendService. func (gce *GCECloud) CreateAlphaGlobalBackendService(bg *computealpha.BackendService) error { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() - mc := newBackendServiceMetricContext("create", "") + mc := newBackendServiceMetricContextWithVersion("create", "", computeAlphaVersion) return mc.Observe(gce.c.AlphaBackendServices().Insert(ctx, meta.GlobalKey(bg.Name), bg)) } From 5d02573e5654efe8c054f6f3035400ac0fcee476 Mon Sep 17 00:00:00 2001 From: Zihong Zheng Date: Tue, 5 Jun 2018 15:19:06 -0700 Subject: [PATCH 2/2] [gce provider] Ran hack/update-cloudprovider-gce.sh --- pkg/cloudprovider/providers/gce/cloud/gen.go | 43 ++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/pkg/cloudprovider/providers/gce/cloud/gen.go b/pkg/cloudprovider/providers/gce/cloud/gen.go index 2b6e24583d1..3130f44ffea 100644 --- a/pkg/cloudprovider/providers/gce/cloud/gen.go +++ b/pkg/cloudprovider/providers/gce/cloud/gen.go @@ -3018,6 +3018,7 @@ type BetaBackendServices interface { Insert(ctx context.Context, key *meta.Key, obj *beta.BackendService) error Delete(ctx context.Context, key *meta.Key) error SetSecurityPolicy(context.Context, *meta.Key, *beta.SecurityPolicyReference) error + Update(context.Context, *meta.Key, *beta.BackendService) error } // NewMockBetaBackendServices returns a new mock for BackendServices. @@ -3058,6 +3059,7 @@ type MockBetaBackendServices struct { InsertHook func(ctx context.Context, key *meta.Key, obj *beta.BackendService, m *MockBetaBackendServices) (bool, error) DeleteHook func(ctx context.Context, key *meta.Key, m *MockBetaBackendServices) (bool, error) SetSecurityPolicyHook func(context.Context, *meta.Key, *beta.SecurityPolicyReference, *MockBetaBackendServices) error + UpdateHook func(context.Context, *meta.Key, *beta.BackendService, *MockBetaBackendServices) error // X is extra state that can be used as part of the mock. Generated code // will not use this field. @@ -3211,6 +3213,14 @@ func (m *MockBetaBackendServices) SetSecurityPolicy(ctx context.Context, key *me return nil } +// Update is a mock for the corresponding method. +func (m *MockBetaBackendServices) Update(ctx context.Context, key *meta.Key, arg0 *beta.BackendService) error { + if m.UpdateHook != nil { + return m.UpdateHook(ctx, key, arg0, m) + } + return nil +} + // GCEBetaBackendServices is a simplifying adapter for the GCE BackendServices. type GCEBetaBackendServices struct { s *Service @@ -3386,6 +3396,39 @@ func (g *GCEBetaBackendServices) SetSecurityPolicy(ctx context.Context, key *met return err } +// Update is a method on GCEBetaBackendServices. +func (g *GCEBetaBackendServices) Update(ctx context.Context, key *meta.Key, arg0 *beta.BackendService) error { + glog.V(5).Infof("GCEBetaBackendServices.Update(%v, %v, ...): called", ctx, key) + + if !key.Valid() { + glog.V(2).Infof("GCEBetaBackendServices.Update(%v, %v, ...): key is invalid (%#v)", ctx, key, key) + return fmt.Errorf("invalid GCE key (%+v)", key) + } + projectID := g.s.ProjectRouter.ProjectID(ctx, "beta", "BackendServices") + rk := &RateLimitKey{ + ProjectID: projectID, + Operation: "Update", + Version: meta.Version("beta"), + Service: "BackendServices", + } + glog.V(5).Infof("GCEBetaBackendServices.Update(%v, %v, ...): projectID = %v, rk = %+v", ctx, key, projectID, rk) + + if err := g.s.RateLimiter.Accept(ctx, rk); err != nil { + glog.V(4).Infof("GCEBetaBackendServices.Update(%v, %v, ...): RateLimiter error: %v", ctx, key, err) + return err + } + call := g.s.Beta.BackendServices.Update(projectID, key.Name, arg0) + call.Context(ctx) + op, err := call.Do() + if err != nil { + glog.V(4).Infof("GCEBetaBackendServices.Update(%v, %v, ...) = %+v", ctx, key, err) + return err + } + err = g.s.WaitForCompletion(ctx, op) + glog.V(4).Infof("GCEBetaBackendServices.Update(%v, %v, ...) = %+v", ctx, key, err) + return err +} + // AlphaBackendServices is an interface that allows for mocking of BackendServices. type AlphaBackendServices interface { Get(ctx context.Context, key *meta.Key) (*alpha.BackendService, error)