diff --git a/go.mod b/go.mod index 945f913..04500e6 100644 --- a/go.mod +++ b/go.mod @@ -2,4 +2,7 @@ module github.com/googlecloudplatform/cloud-run-hello go 1.14 -require github.com/cloudevents/sdk-go/v2 v2.15.2 +require ( + cloud.google.com/go/compute/metadata v0.5.0 // indirect + github.com/cloudevents/sdk-go/v2 v2.15.2 +) diff --git a/go.sum b/go.sum index bda6282..d701717 100644 --- a/go.sum +++ b/go.sum @@ -1,3 +1,5 @@ +cloud.google.com/go/compute/metadata v0.5.0 h1:Zr0eK8JbFv6+Wi4ilXAR8FJ3wyNdpxHKJNPos6LTZOY= +cloud.google.com/go/compute/metadata v0.5.0/go.mod h1:aHnloV2TPI38yx4s9+wAZhHykWvVCfu7hQbF+9CWoiY= github.com/cloudevents/sdk-go/v2 v2.15.2 h1:54+I5xQEnI73RBhWHxbI1XJcqOFOVJN85vb41+8mHUc= github.com/cloudevents/sdk-go/v2 v2.15.2/go.mod h1:lL7kSWAE/V8VI4Wh0jbL2v/jvqsm6tjmaQBSvxcv4uE= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= @@ -40,6 +42,8 @@ go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/ go.uber.org/zap v1.10.0 h1:ORx85nbTijNz8ljznvCMR1ZBIPKFn3jQrag10X2AsuM= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI= +golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac h1:7zkz7BUtwNFFqcowJ+RIgu2MaV/MapERkDIy+mwPyjs= golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= diff --git a/hello.go b/hello.go index 5bad02d..48eff84 100644 --- a/hello.go +++ b/hello.go @@ -20,12 +20,11 @@ import ( "encoding/json" "fmt" "html/template" - "io/ioutil" "log" "net/http" "os" - "regexp" + "cloud.google.com/go/compute/metadata" cloudevents "github.com/cloudevents/sdk-go/v2" cloudeventsClient "github.com/cloudevents/sdk-go/v2/client" ) @@ -34,7 +33,7 @@ type Data struct { Service string Revision string Project string - Region string + Zone string AuthenticatedEmail string Color string } @@ -97,56 +96,15 @@ func getEventsHandler() *cloudeventsClient.EventReceiver { } func main() { + ctx := context.Background() + tmpl := template.Must(template.ParseFiles("index.html")) // Get project ID from metadata server - project := "" - client := &http.Client{} - req, _ := http.NewRequest("GET", "http://metadata.google.internal/computeMetadata/v1/project/project-id", nil) - req.Header.Set("Metadata-Flavor", "Google") - res, err := client.Do(req) - if err == nil { - defer res.Body.Close() - if res.StatusCode == 200 { - responseBody, err := ioutil.ReadAll(res.Body) - if err != nil { - log.Fatal(err) - } - project = string(responseBody) - } - } + project, _ := metadata.ProjectIDWithContext(ctx) - // Get region from metadata server - region := "" - req, _ = http.NewRequest("GET", "http://metadata.google.internal/computeMetadata/v1/instance/region", nil) - req.Header.Set("Metadata-Flavor", "Google") - res, err = client.Do(req) - if err == nil { - defer res.Body.Close() - if res.StatusCode == 200 { - responseBody, err := ioutil.ReadAll(res.Body) - if err != nil { - log.Fatal(err) - } - region = regexp.MustCompile(`projects/[^/]*/regions/`).ReplaceAllString(string(responseBody), "") - } - } - if region == "" { - // Fallback: get "zone" from metadata server (running on VM e.g. Cloud Run for Anthos) - req, _ = http.NewRequest("GET", "http://metadata.google.internal/computeMetadata/v1/instance/zone", nil) - req.Header.Set("Metadata-Flavor", "Google") - res, err = client.Do(req) - if err == nil { - defer res.Body.Close() - if res.StatusCode == 200 { - responseBody, err := ioutil.ReadAll(res.Body) - if err != nil { - log.Fatal(err) - } - region = regexp.MustCompile(`projects/[^/]*/zones/`).ReplaceAllString(string(responseBody), "") - } - } - } + // Get zone from metadata server + zone, _ := metadata.ZoneWithContext(ctx) service := os.Getenv("K_SERVICE") revision := os.Getenv("K_REVISION") @@ -157,7 +115,7 @@ func main() { Service: service, Revision: revision, Project: project, - Region: region, + Zone: zone, Color: color, }