From 763e210bf43f7ce9e3b8dab22b09bab129c4da9f Mon Sep 17 00:00:00 2001 From: Chris Stephens Date: Thu, 4 Apr 2019 19:30:52 +0000 Subject: [PATCH] URL encode GCS file names Signed-off-by: Modular Magician --- google-beta/data_source_google_storage_bucket_object.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/google-beta/data_source_google_storage_bucket_object.go b/google-beta/data_source_google_storage_bucket_object.go index b97de2622ea..b429cd677ba 100644 --- a/google-beta/data_source_google_storage_bucket_object.go +++ b/google-beta/data_source_google_storage_bucket_object.go @@ -2,6 +2,8 @@ package google import ( "fmt" + "net/url" + "strings" "github.com/hashicorp/terraform/helper/schema" ) @@ -24,6 +26,12 @@ func dataSourceGoogleStorageBucketObjectRead(d *schema.ResourceData, meta interf bucket := d.Get("bucket").(string) name := d.Get("name").(string) + // URL encode folder names, but to ensure backward compatibility don't url encode + // them if they were already encoded manually in config. + // see https://github.com/terraform-providers/terraform-provider-google/issues/3176 + if strings.Contains(name, "/") { + name = url.QueryEscape(name) + } // Using REST apis because the storage go client doesn't support folders url := fmt.Sprintf("https://www.googleapis.com/storage/v1/b/%s/o/%s", bucket, name)