aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/google.golang.org/appengine/internal/metadata.go
diff options
context:
space:
mode:
authorMichael Muré <batolettre@gmail.com>2018-09-24 19:22:32 +0200
committerMichael Muré <batolettre@gmail.com>2018-09-24 19:22:32 +0200
commitc4a207622a894ba9839f1a3c47c9d78beff9b861 (patch)
tree009d80b363b5392e6eba4bec85b0ae74b3942995 /vendor/google.golang.org/appengine/internal/metadata.go
parentc86e7231b223d532e26ab5449715c65b6b4e3fde (diff)
downloadgit-bug-c4a207622a894ba9839f1a3c47c9d78beff9b861.tar.gz
github: query most of the data
Diffstat (limited to 'vendor/google.golang.org/appengine/internal/metadata.go')
-rw-r--r--vendor/google.golang.org/appengine/internal/metadata.go60
1 files changed, 60 insertions, 0 deletions
diff --git a/vendor/google.golang.org/appengine/internal/metadata.go b/vendor/google.golang.org/appengine/internal/metadata.go
new file mode 100644
index 00000000..c4ba63bb
--- /dev/null
+++ b/vendor/google.golang.org/appengine/internal/metadata.go
@@ -0,0 +1,60 @@
+// Copyright 2014 Google Inc. All rights reserved.
+// Use of this source code is governed by the Apache 2.0
+// license that can be found in the LICENSE file.
+
+package internal
+
+// This file has code for accessing metadata.
+//
+// References:
+// https://cloud.google.com/compute/docs/metadata
+
+import (
+ "fmt"
+ "io/ioutil"
+ "net/http"
+ "net/url"
+)
+
+const (
+ metadataHost = "metadata"
+ metadataPath = "/computeMetadata/v1/"
+)
+
+var (
+ metadataRequestHeaders = http.Header{
+ "Metadata-Flavor": []string{"Google"},
+ }
+)
+
+// TODO(dsymonds): Do we need to support default values, like Python?
+func mustGetMetadata(key string) []byte {
+ b, err := getMetadata(key)
+ if err != nil {
+ panic(fmt.Sprintf("Metadata fetch failed for '%s': %v", key, err))
+ }
+ return b
+}
+
+func getMetadata(key string) ([]byte, error) {
+ // TODO(dsymonds): May need to use url.Parse to support keys with query args.
+ req := &http.Request{
+ Method: "GET",
+ URL: &url.URL{
+ Scheme: "http",
+ Host: metadataHost,
+ Path: metadataPath + key,
+ },
+ Header: metadataRequestHeaders,
+ Host: metadataHost,
+ }
+ resp, err := http.DefaultClient.Do(req)
+ if err != nil {
+ return nil, err
+ }
+ defer resp.Body.Close()
+ if resp.StatusCode != 200 {
+ return nil, fmt.Errorf("metadata server returned HTTP %d", resp.StatusCode)
+ }
+ return ioutil.ReadAll(resp.Body)
+}