Skip to content

Commit

Permalink
GCE: Add Alpha functions for forwarding rules and IP addresses
Browse files Browse the repository at this point in the history
Also update the metrics recording to include a version label.
  • Loading branch information
yujuhong committed Aug 9, 2017
1 parent fddc7f3 commit 7d58ea2
Show file tree
Hide file tree
Showing 4 changed files with 54 additions and 2 deletions.
5 changes: 5 additions & 0 deletions pkg/cloudprovider/providers/gce/gce.go
Expand Up @@ -78,6 +78,11 @@ const (
gceHcUnhealthyThreshold = int64(5)

gceComputeAPIEndpoint = "https://www.googleapis.com/compute/v1/"

// Version strings for recording metrics.
computeV1Version = "v1"
computeAlphaVersion = "alpha"
computeBetaVersion = "beta"
)

// GCECloud is an implementation of Interface, LoadBalancer and Instances for Google Compute Engine.
Expand Down
24 changes: 23 additions & 1 deletion pkg/cloudprovider/providers/gce/gce_addresses.go
Expand Up @@ -19,13 +19,18 @@ package gce
import (
"time"

computealpha "google.golang.org/api/compute/v0.alpha"
compute "google.golang.org/api/compute/v1"
)

func newAddressMetricContext(request, region string) *metricContext {
return newAddressMetricContextWithVersion(request, region, computeV1Version)
}

func newAddressMetricContextWithVersion(request, region, version string) *metricContext {
return &metricContext{
start: time.Now(),
attributes: []string{"address_" + request, region, unusedMetricLabel},
attributes: []string{"address_" + request, region, unusedMetricLabel, version},
}
}

Expand Down Expand Up @@ -69,6 +74,16 @@ func (gce *GCECloud) ReserveRegionAddress(addr *compute.Address, region string)
return gce.waitForRegionOp(op, region, mc)
}

// ReserveAlphaRegionAddress creates a region address using the Alpha API.
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)
}

// DeleteRegionAddress deletes a region address by name.
func (gce *GCECloud) DeleteRegionAddress(name, region string) error {
mc := newAddressMetricContext("delete", region)
Expand All @@ -85,3 +100,10 @@ func (gce *GCECloud) GetRegionAddress(name, region string) (*compute.Address, er
v, err := gce.service.Addresses.Get(gce.projectID, region, name).Do()
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()
return v, mc.Observe(err)
}
26 changes: 25 additions & 1 deletion pkg/cloudprovider/providers/gce/gce_forwardingrule.go
Expand Up @@ -19,13 +19,18 @@ package gce
import (
"time"

computealpha "google.golang.org/api/compute/v0.alpha"
compute "google.golang.org/api/compute/v1"
)

func newForwardingRuleMetricContext(request, region string) *metricContext {
return newForwardingRuleMetricContextWithVersion(request, region, computeV1Version)
}

func newForwardingRuleMetricContextWithVersion(request, region, version string) *metricContext {
return &metricContext{
start: time.Now(),
attributes: []string{"forwardingrule_" + request, region, unusedMetricLabel},
attributes: []string{"forwardingrule_" + request, region, unusedMetricLabel, version},
}
}

Expand Down Expand Up @@ -85,6 +90,13 @@ func (gce *GCECloud) GetRegionForwardingRule(name, region string) (*compute.Forw
return v, mc.Observe(err)
}

// GetAlphaRegionForwardingRule returns the Alpha regional ForwardingRule by name & region.
func (gce *GCECloud) GetAlphaRegionForwardingRule(name, region string) (*computealpha.ForwardingRule, error) {
mc := newForwardingRuleMetricContextWithVersion("get", region, computeAlphaVersion)
v, err := gce.serviceAlpha.ForwardingRules.Get(gce.projectID, region, name).Do()
return v, mc.Observe(err)
}

// ListRegionForwardingRules lists all RegionalForwardingRules in the project & region.
func (gce *GCECloud) ListRegionForwardingRules(region string) (*compute.ForwardingRuleList, error) {
mc := newForwardingRuleMetricContext("list", region)
Expand All @@ -105,6 +117,18 @@ func (gce *GCECloud) CreateRegionForwardingRule(rule *compute.ForwardingRule, re
return gce.waitForRegionOp(op, region, mc)
}

// CreateAlphaRegionForwardingRule creates and returns an Alpha, Regional
// ForwardingRule that points to the given BackendService.
func (gce *GCECloud) CreateAlphaRegionForwardingRule(rule *computealpha.ForwardingRule, region string) error {
mc := newForwardingRuleMetricContextWithVersion("create", region, computeAlphaVersion)
op, err := gce.serviceAlpha.ForwardingRules.Insert(gce.projectID, region, rule).Do()
if err != nil {
return mc.Observe(err)
}

return gce.waitForAlphaRegionOp(op, region, mc)
}

// DeleteRegionForwardingRule deletes the RegionalForwardingRule by name & region.
func (gce *GCECloud) DeleteRegionForwardingRule(name, region string) error {
mc := newForwardingRuleMetricContext("delete", region)
Expand Down
1 change: 1 addition & 0 deletions pkg/cloudprovider/providers/gce/metrics.go
Expand Up @@ -32,6 +32,7 @@ var (
"request", // API function that is begin invoked.
"region", // region (optional).
"zone", // zone (optional).
"version", // API version useed for the call (optional).
)
)

Expand Down

0 comments on commit 7d58ea2

Please sign in to comment.