From 93bb60e07fbe58dc5b0270d9c6656f193cef32aa Mon Sep 17 00:00:00 2001 From: Bowei Du Date: Wed, 17 Jan 2018 21:56:47 -0800 Subject: [PATCH] Update Addresses to use generated code --- .../providers/gce/gce_addresses.go | 101 ++++++++---------- 1 file changed, 43 insertions(+), 58 deletions(-) diff --git a/pkg/cloudprovider/providers/gce/gce_addresses.go b/pkg/cloudprovider/providers/gce/gce_addresses.go index 254c08a3b8e..af91fb14174 100644 --- a/pkg/cloudprovider/providers/gce/gce_addresses.go +++ b/pkg/cloudprovider/providers/gce/gce_addresses.go @@ -17,6 +17,7 @@ limitations under the License. package gce import ( + "context" "fmt" "github.com/golang/glog" @@ -24,6 +25,9 @@ import ( computealpha "google.golang.org/api/compute/v0.alpha" computebeta "google.golang.org/api/compute/v0.beta" compute "google.golang.org/api/compute/v1" + + "k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud/filter" + "k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud/meta" ) func newAddressMetricContext(request, region string) *metricContext { @@ -40,110 +44,81 @@ func newAddressMetricContextWithVersion(request, region, version string) *metric // ephemeral IP associated with a global forwarding rule. func (gce *GCECloud) ReserveGlobalAddress(addr *compute.Address) error { mc := newAddressMetricContext("reserve", "") - op, err := gce.service.GlobalAddresses.Insert(gce.projectID, addr).Do() - if err != nil { - return mc.Observe(err) - } - return gce.waitForGlobalOp(op, mc) + return mc.Observe(gce.c.GlobalAddresses().Insert(context.Background(), meta.GlobalKey(addr.Name), addr)) } // DeleteGlobalAddress deletes a global address by name. func (gce *GCECloud) DeleteGlobalAddress(name string) error { mc := newAddressMetricContext("delete", "") - op, err := gce.service.GlobalAddresses.Delete(gce.projectID, name).Do() - if err != nil { - return mc.Observe(err) - } - return gce.waitForGlobalOp(op, mc) + return mc.Observe(gce.c.GlobalAddresses().Delete(context.Background(), meta.GlobalKey(name))) } // GetGlobalAddress returns the global address by name. func (gce *GCECloud) GetGlobalAddress(name string) (*compute.Address, error) { mc := newAddressMetricContext("get", "") - v, err := gce.service.GlobalAddresses.Get(gce.projectID, name).Do() + v, err := gce.c.GlobalAddresses().Get(context.Background(), meta.GlobalKey(name)) return v, mc.Observe(err) } // ReserveRegionAddress creates a region address func (gce *GCECloud) ReserveRegionAddress(addr *compute.Address, region string) error { mc := newAddressMetricContext("reserve", region) - op, err := gce.service.Addresses.Insert(gce.projectID, region, addr).Do() - if err != nil { - return mc.Observe(err) - } - return gce.waitForRegionOp(op, region, mc) + return mc.Observe(gce.c.Addresses().Insert(context.Background(), meta.RegionalKey(addr.Name, region), addr)) } // ReserveAlphaRegionAddress creates an Alpha, regional address. func (gce *GCECloud) ReserveAlphaRegionAddress(addr *computealpha.Address, region string) error { - mc := newAddressMetricContextWithVersion("reserve", region, computeAlphaVersion) - op, err := gce.serviceAlpha.Addresses.Insert(gce.projectID, region, addr).Do() - if err != nil { - return mc.Observe(err) - } - return gce.waitForRegionOp(op, region, mc) + mc := newAddressMetricContext("reserve", region) + return mc.Observe(gce.c.AlphaAddresses().Insert(context.Background(), meta.RegionalKey(addr.Name, region), addr)) } // ReserveBetaRegionAddress creates a beta region address func (gce *GCECloud) ReserveBetaRegionAddress(addr *computebeta.Address, region string) error { - mc := newAddressMetricContextWithVersion("reserve", region, computeBetaVersion) - op, err := gce.serviceBeta.Addresses.Insert(gce.projectID, region, addr).Do() - if err != nil { - return mc.Observe(err) - } - return gce.waitForRegionOp(op, region, mc) + mc := newAddressMetricContext("reserve", region) + return mc.Observe(gce.c.BetaAddresses().Insert(context.Background(), meta.RegionalKey(addr.Name, region), addr)) } // DeleteRegionAddress deletes a region address by name. func (gce *GCECloud) DeleteRegionAddress(name, region string) error { mc := newAddressMetricContext("delete", region) - op, err := gce.service.Addresses.Delete(gce.projectID, region, name).Do() - if err != nil { - return mc.Observe(err) - } - return gce.waitForRegionOp(op, region, mc) + return mc.Observe(gce.c.Addresses().Delete(context.Background(), meta.RegionalKey(name, region))) } // GetRegionAddress returns the region address by name func (gce *GCECloud) GetRegionAddress(name, region string) (*compute.Address, error) { mc := newAddressMetricContext("get", region) - v, err := gce.service.Addresses.Get(gce.projectID, region, name).Do() + v, err := gce.c.Addresses().Get(context.Background(), meta.RegionalKey(name, region)) return v, mc.Observe(err) } // GetAlphaRegionAddress returns the Alpha, regional address by name. func (gce *GCECloud) GetAlphaRegionAddress(name, region string) (*computealpha.Address, error) { - mc := newAddressMetricContextWithVersion("get", region, computeAlphaVersion) - v, err := gce.serviceAlpha.Addresses.Get(gce.projectID, region, name).Do() + mc := newAddressMetricContext("get", region) + v, err := gce.c.AlphaAddresses().Get(context.Background(), meta.RegionalKey(name, region)) return v, mc.Observe(err) } // GetBetaRegionAddress returns the beta region address by name func (gce *GCECloud) GetBetaRegionAddress(name, region string) (*computebeta.Address, error) { - mc := newAddressMetricContextWithVersion("get", region, computeBetaVersion) - v, err := gce.serviceBeta.Addresses.Get(gce.projectID, region, name).Do() + mc := newAddressMetricContext("get", region) + v, err := gce.c.BetaAddresses().Get(context.Background(), meta.RegionalKey(name, region)) return v, mc.Observe(err) } // GetRegionAddressByIP returns the regional address matching the given IP address. func (gce *GCECloud) GetRegionAddressByIP(region, ipAddress string) (*compute.Address, error) { mc := newAddressMetricContext("list", region) - addrs, err := gce.service.Addresses.List(gce.projectID, region).Filter("address eq " + ipAddress).Do() - // Record the metrics for the call. + addrs, err := gce.c.Addresses().List(context.Background(), region, filter.Regexp("address", ipAddress)) + mc.Observe(err) if err != nil { return nil, err } - if len(addrs.Items) > 1 { - // We don't expect more than one match. - addrsToPrint := []compute.Address{} - for _, addr := range addrs.Items { - addrsToPrint = append(addrsToPrint, *addr) - } - glog.Errorf("More than one addresses matching the IP %q: %+v", ipAddress, addrsToPrint) + if len(addrs) > 1 { + glog.Warningf("More than one addresses matching the IP %q: %v", ipAddress, addrNames(addrs)) } - for _, addr := range addrs.Items { + for _, addr := range addrs { if addr.Address == ipAddress { return addr, nil } @@ -154,22 +129,17 @@ func (gce *GCECloud) GetRegionAddressByIP(region, ipAddress string) (*compute.Ad // GetBetaRegionAddressByIP returns the beta regional address matching the given IP address. func (gce *GCECloud) GetBetaRegionAddressByIP(region, ipAddress string) (*computebeta.Address, error) { mc := newAddressMetricContext("list", region) - addrs, err := gce.serviceBeta.Addresses.List(gce.projectID, region).Filter("address eq " + ipAddress).Do() - // Record the metrics for the call. + addrs, err := gce.c.BetaAddresses().List(context.Background(), region, filter.Regexp("address", ipAddress)) + mc.Observe(err) if err != nil { return nil, err } - if len(addrs.Items) > 1 { - // We don't expect more than one match. - addrsToPrint := []computebeta.Address{} - for _, addr := range addrs.Items { - addrsToPrint = append(addrsToPrint, *addr) - } - glog.Errorf("More than one addresses matching the IP %q: %+v", ipAddress, addrsToPrint) + if len(addrs) > 1 { + glog.Warningf("More than one addresses matching the IP %q: %v", ipAddress, addrNames(addrs)) } - for _, addr := range addrs.Items { + for _, addr := range addrs { if addr.Address == ipAddress { return addr, nil } @@ -188,3 +158,18 @@ func (gce *GCECloud) getNetworkTierFromAddress(name, region string) (string, err } return addr.NetworkTier, nil } + +func addrNames(items interface{}) []string { + var ret []string + switch items := items.(type) { + case []compute.Address: + for _, a := range items { + ret = append(ret, a.Name) + } + case []computebeta.Address: + for _, a := range items { + ret = append(ret, a.Name) + } + } + return ret +}