1 // Copyright 2014 Google Inc. All rights reserved.
2 // Use of this source code is governed by the Apache 2.0
3 // license that can be found in the LICENSE file.
7 // This file has code for accessing metadata.
10 // https://cloud.google.com/compute/docs/metadata
20 metadataHost = "metadata"
21 metadataPath = "/computeMetadata/v1/"
25 metadataRequestHeaders = http.Header{
26 "Metadata-Flavor": []string{"Google"},
30 // TODO(dsymonds): Do we need to support default values, like Python?
31 func mustGetMetadata(key string) []byte {
32 b, err := getMetadata(key)
34 panic(fmt.Sprintf("Metadata fetch failed for '%s': %v", key, err))
39 func getMetadata(key string) ([]byte, error) {
40 // TODO(dsymonds): May need to use url.Parse to support keys with query args.
46 Path: metadataPath + key,
48 Header: metadataRequestHeaders,
51 resp, err := http.DefaultClient.Do(req)
55 defer resp.Body.Close()
56 if resp.StatusCode != 200 {
57 return nil, fmt.Errorf("metadata server returned HTTP %d", resp.StatusCode)
59 return ioutil.ReadAll(resp.Body)