From eeae81619b1fde9b23b3abf04bae73861eec986f Mon Sep 17 00:00:00 2001 From: Minhan Xia Date: Wed, 24 Jan 2018 15:29:21 -0800 Subject: [PATCH] fix url parsing for staging/dev endpoint --- pkg/cloudprovider/providers/gce/cloud/utils.go | 17 ++++------------- .../providers/gce/cloud/utils_test.go | 13 ++++++++++++- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/pkg/cloudprovider/providers/gce/cloud/utils.go b/pkg/cloudprovider/providers/gce/cloud/utils.go index cbba6862e0e..fb258866fbb 100644 --- a/pkg/cloudprovider/providers/gce/cloud/utils.go +++ b/pkg/cloudprovider/providers/gce/cloud/utils.go @@ -30,10 +30,6 @@ const ( betaPrefix = "https://www.googleapis.com/compute/beta/" ) -var ( - allPrefixes = []string{gaPrefix, alphaPrefix, betaPrefix} -) - // ResourceID identifies a GCE resource as parsed from compute resource URL. type ResourceID struct { ProjectID string @@ -66,15 +62,10 @@ func (r *ResourceID) Equal(other *ResourceID) bool { func ParseResourceURL(url string) (*ResourceID, error) { errNotValid := fmt.Errorf("%q is not a valid resource URL", url) - // Remove the "https://..." prefix if present - for _, prefix := range allPrefixes { - if strings.HasPrefix(url, prefix) { - if len(url) < len(prefix) { - return nil, errNotValid - } - url = url[len(prefix):] - break - } + // Remove the prefix up to ...projects/ + projectsIndex := strings.Index(url, "/projects/") + if projectsIndex >= 0 { + url = url[projectsIndex+1:] } parts := strings.Split(url, "/") diff --git a/pkg/cloudprovider/providers/gce/cloud/utils_test.go b/pkg/cloudprovider/providers/gce/cloud/utils_test.go index 4879ebbe33a..9d2ee045190 100644 --- a/pkg/cloudprovider/providers/gce/cloud/utils_test.go +++ b/pkg/cloudprovider/providers/gce/cloud/utils_test.go @@ -54,6 +54,18 @@ func TestParseResourceURL(t *testing.T) { "https://www.googleapis.com/compute/v1/projects/some-gce-project/zones/us-central1-c/instances/instance-1", &ResourceID{"some-gce-project", "instances", meta.ZonalKey("instance-1", "us-central1-c")}, }, + { + "http://localhost:3990/compute/beta/projects/some-gce-project/global/operations/operation-1513289952196-56054460af5a0-b1dae0c3-9bbf9dbf", + &ResourceID{"some-gce-project", "operations", meta.GlobalKey("operation-1513289952196-56054460af5a0-b1dae0c3-9bbf9dbf")}, + }, + { + "http://localhost:3990/compute/alpha/projects/some-gce-project/regions/dev-central1/addresses/my-address", + &ResourceID{"some-gce-project", "addresses", meta.RegionalKey("my-address", "dev-central1")}, + }, + { + "http://localhost:3990/compute/v1/projects/some-gce-project/zones/dev-central1-std/instances/instance-1", + &ResourceID{"some-gce-project", "instances", meta.ZonalKey("instance-1", "dev-central1-std")}, + }, { "projects/some-gce-project", &ResourceID{"some-gce-project", "projects", nil}, @@ -103,7 +115,6 @@ func TestParseResourceURL(t *testing.T) { "projects/some-gce-project/global/foo/bar/baz", "projects/some-gce-project/zones/us-central1-c/res", "projects/some-gce-project/zones/us-central1-c/res/name/extra", - "https://www.googleapis.com/compute/gamma/projects/some-gce-project/global/addresses/name", } { r, err := ParseResourceURL(tc) if err == nil {