15
									
								
								vendor/cloud.google.com/go/AUTHORS
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										15
									
								
								vendor/cloud.google.com/go/AUTHORS
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,15 +0,0 @@ | ||||
| # This is the official list of cloud authors for copyright purposes. | ||||
| # This file is distinct from the CONTRIBUTORS files. | ||||
| # See the latter for an explanation. | ||||
|  | ||||
| # Names should be added to this file as: | ||||
| # Name or Organization <email address> | ||||
| # The email address is not required for organizations. | ||||
|  | ||||
| Filippo Valsorda <hi@filippo.io> | ||||
| Google Inc. | ||||
| Ingo Oeser <nightlyone@googlemail.com> | ||||
| Palm Stone Games, Inc. | ||||
| Paweł Knap <pawelknap88@gmail.com> | ||||
| Péter Szilágyi <peterke@gmail.com> | ||||
| Tyler Treat <ttreat31@gmail.com> | ||||
							
								
								
									
										40
									
								
								vendor/cloud.google.com/go/CONTRIBUTORS
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										40
									
								
								vendor/cloud.google.com/go/CONTRIBUTORS
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,40 +0,0 @@ | ||||
| # People who have agreed to one of the CLAs and can contribute patches. | ||||
| # The AUTHORS file lists the copyright holders; this file | ||||
| # lists people.  For example, Google employees are listed here | ||||
| # but not in AUTHORS, because Google holds the copyright. | ||||
| # | ||||
| # https://developers.google.com/open-source/cla/individual | ||||
| # https://developers.google.com/open-source/cla/corporate | ||||
| # | ||||
| # Names should be added to this file as: | ||||
| #     Name <email address> | ||||
|  | ||||
| # Keep the list alphabetically sorted. | ||||
|  | ||||
| Alexis Hunt <lexer@google.com> | ||||
| Andreas Litt <andreas.litt@gmail.com> | ||||
| Andrew Gerrand <adg@golang.org> | ||||
| Brad Fitzpatrick <bradfitz@golang.org> | ||||
| Burcu Dogan <jbd@google.com> | ||||
| Dave Day <djd@golang.org> | ||||
| David Sansome <me@davidsansome.com> | ||||
| David Symonds <dsymonds@golang.org> | ||||
| Filippo Valsorda <hi@filippo.io> | ||||
| Glenn Lewis <gmlewis@google.com> | ||||
| Ingo Oeser <nightlyone@googlemail.com> | ||||
| James Hall <james.hall@shopify.com> | ||||
| Johan Euphrosine <proppy@google.com> | ||||
| Jonathan Amsterdam <jba@google.com> | ||||
| Kunpei Sakai <namusyaka@gmail.com> | ||||
| Luna Duclos <luna.duclos@palmstonegames.com> | ||||
| Magnus Hiie <magnus.hiie@gmail.com> | ||||
| Mario Castro <mariocaster@gmail.com> | ||||
| Michael McGreevy <mcgreevy@golang.org> | ||||
| Omar Jarjur <ojarjur@google.com> | ||||
| Paweł Knap <pawelknap88@gmail.com> | ||||
| Péter Szilágyi <peterke@gmail.com> | ||||
| Sarah Adams <shadams@google.com> | ||||
| Thanatat Tamtan <acoshift@gmail.com> | ||||
| Toby Burress <kurin@google.com> | ||||
| Tuo Shan <shantuo@google.com> | ||||
| Tyler Treat <ttreat31@gmail.com> | ||||
							
								
								
									
										90
									
								
								vendor/cloud.google.com/go/compute/metadata/metadata.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										90
									
								
								vendor/cloud.google.com/go/compute/metadata/metadata.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -61,25 +61,14 @@ var ( | ||||
| 	instID  = &cachedValue{k: "instance/id", trim: true} | ||||
| ) | ||||
|  | ||||
| var ( | ||||
| 	defaultClient = &Client{hc: &http.Client{ | ||||
| 		Transport: &http.Transport{ | ||||
| 			Dial: (&net.Dialer{ | ||||
| 				Timeout:   2 * time.Second, | ||||
| 				KeepAlive: 30 * time.Second, | ||||
| 			}).Dial, | ||||
| 			ResponseHeaderTimeout: 2 * time.Second, | ||||
| 		}, | ||||
| 	}} | ||||
| 	subscribeClient = &Client{hc: &http.Client{ | ||||
| 		Transport: &http.Transport{ | ||||
| 			Dial: (&net.Dialer{ | ||||
| 				Timeout:   2 * time.Second, | ||||
| 				KeepAlive: 30 * time.Second, | ||||
| 			}).Dial, | ||||
| 		}, | ||||
| 	}} | ||||
| ) | ||||
| var defaultClient = &Client{hc: &http.Client{ | ||||
| 	Transport: &http.Transport{ | ||||
| 		Dial: (&net.Dialer{ | ||||
| 			Timeout:   2 * time.Second, | ||||
| 			KeepAlive: 30 * time.Second, | ||||
| 		}).Dial, | ||||
| 	}, | ||||
| }} | ||||
|  | ||||
| // NotDefinedError is returned when requested metadata is not defined. | ||||
| // | ||||
| @ -137,7 +126,7 @@ func testOnGCE() bool { | ||||
| 	resc := make(chan bool, 2) | ||||
|  | ||||
| 	// Try two strategies in parallel. | ||||
| 	// See https://github.com/GoogleCloudPlatform/google-cloud-go/issues/194 | ||||
| 	// See https://github.com/googleapis/google-cloud-go/issues/194 | ||||
| 	go func() { | ||||
| 		req, _ := http.NewRequest("GET", "http://"+metadataIP, nil) | ||||
| 		req.Header.Set("User-Agent", userAgent) | ||||
| @ -151,7 +140,7 @@ func testOnGCE() bool { | ||||
| 	}() | ||||
|  | ||||
| 	go func() { | ||||
| 		addrs, err := net.LookupHost("metadata.google.internal") | ||||
| 		addrs, err := net.DefaultResolver.LookupHost(ctx, "metadata.google.internal") | ||||
| 		if err != nil || len(addrs) == 0 { | ||||
| 			resc <- false | ||||
| 			return | ||||
| @ -206,10 +195,9 @@ func systemInfoSuggestsGCE() bool { | ||||
| 	return name == "Google" || name == "Google Compute Engine" | ||||
| } | ||||
|  | ||||
| // Subscribe calls Client.Subscribe on a client designed for subscribing (one with no | ||||
| // ResponseHeaderTimeout). | ||||
| // Subscribe calls Client.Subscribe on the default client. | ||||
| func Subscribe(suffix string, fn func(v string, ok bool) error) error { | ||||
| 	return subscribeClient.Subscribe(suffix, fn) | ||||
| 	return defaultClient.Subscribe(suffix, fn) | ||||
| } | ||||
|  | ||||
| // Get calls Client.Get on the default client. | ||||
| @ -227,6 +215,9 @@ func InternalIP() (string, error) { return defaultClient.InternalIP() } | ||||
| // ExternalIP returns the instance's primary external (public) IP address. | ||||
| func ExternalIP() (string, error) { return defaultClient.ExternalIP() } | ||||
|  | ||||
| // Email calls Client.Email on the default client. | ||||
| func Email(serviceAccount string) (string, error) { return defaultClient.Email(serviceAccount) } | ||||
|  | ||||
| // Hostname returns the instance's hostname. This will be of the form | ||||
| // "<instanceID>.c.<projID>.internal". | ||||
| func Hostname() (string, error) { return defaultClient.Hostname() } | ||||
| @ -277,9 +268,14 @@ type Client struct { | ||||
| 	hc *http.Client | ||||
| } | ||||
|  | ||||
| // NewClient returns a Client that can be used to fetch metadata. All HTTP requests | ||||
| // will use the given http.Client instead of the default client. | ||||
| // NewClient returns a Client that can be used to fetch metadata. | ||||
| // Returns the client that uses the specified http.Client for HTTP requests. | ||||
| // If nil is specified, returns the default client. | ||||
| func NewClient(c *http.Client) *Client { | ||||
| 	if c == nil { | ||||
| 		return defaultClient | ||||
| 	} | ||||
|  | ||||
| 	return &Client{hc: c} | ||||
| } | ||||
|  | ||||
| @ -300,8 +296,12 @@ func (c *Client) getETag(suffix string) (value, etag string, err error) { | ||||
| 		// being stable anyway. | ||||
| 		host = metadataIP | ||||
| 	} | ||||
| 	url := "http://" + host + "/computeMetadata/v1/" + suffix | ||||
| 	req, _ := http.NewRequest("GET", url, nil) | ||||
| 	suffix = strings.TrimLeft(suffix, "/") | ||||
| 	u := "http://" + host + "/computeMetadata/v1/" + suffix | ||||
| 	req, err := http.NewRequest("GET", u, nil) | ||||
| 	if err != nil { | ||||
| 		return "", "", err | ||||
| 	} | ||||
| 	req.Header.Set("Metadata-Flavor", "Google") | ||||
| 	req.Header.Set("User-Agent", userAgent) | ||||
| 	res, err := c.hc.Do(req) | ||||
| @ -312,13 +312,13 @@ func (c *Client) getETag(suffix string) (value, etag string, err error) { | ||||
| 	if res.StatusCode == http.StatusNotFound { | ||||
| 		return "", "", NotDefinedError(suffix) | ||||
| 	} | ||||
| 	if res.StatusCode != 200 { | ||||
| 		return "", "", fmt.Errorf("status code %d trying to fetch %s", res.StatusCode, url) | ||||
| 	} | ||||
| 	all, err := ioutil.ReadAll(res.Body) | ||||
| 	if err != nil { | ||||
| 		return "", "", err | ||||
| 	} | ||||
| 	if res.StatusCode != 200 { | ||||
| 		return "", "", &Error{Code: res.StatusCode, Message: string(all)} | ||||
| 	} | ||||
| 	return string(all), res.Header.Get("Etag"), nil | ||||
| } | ||||
|  | ||||
| @ -367,6 +367,16 @@ func (c *Client) InternalIP() (string, error) { | ||||
| 	return c.getTrimmed("instance/network-interfaces/0/ip") | ||||
| } | ||||
|  | ||||
| // Email returns the email address associated with the service account. | ||||
| // The account may be empty or the string "default" to use the instance's | ||||
| // main account. | ||||
| func (c *Client) Email(serviceAccount string) (string, error) { | ||||
| 	if serviceAccount == "" { | ||||
| 		serviceAccount = "default" | ||||
| 	} | ||||
| 	return c.getTrimmed("instance/service-accounts/" + serviceAccount + "/email") | ||||
| } | ||||
|  | ||||
| // ExternalIP returns the instance's primary external (public) IP address. | ||||
| func (c *Client) ExternalIP() (string, error) { | ||||
| 	return c.getTrimmed("instance/network-interfaces/0/access-configs/0/external-ip") | ||||
| @ -394,11 +404,7 @@ func (c *Client) InstanceTags() ([]string, error) { | ||||
|  | ||||
| // InstanceName returns the current VM's instance ID string. | ||||
| func (c *Client) InstanceName() (string, error) { | ||||
| 	host, err := c.Hostname() | ||||
| 	if err != nil { | ||||
| 		return "", err | ||||
| 	} | ||||
| 	return strings.Split(host, ".")[0], nil | ||||
| 	return c.getTrimmed("instance/name") | ||||
| } | ||||
|  | ||||
| // Zone returns the current VM's zone, such as "us-central1-b". | ||||
| @ -499,3 +505,15 @@ func (c *Client) Subscribe(suffix string, fn func(v string, ok bool) error) erro | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // Error contains an error response from the server. | ||||
| type Error struct { | ||||
| 	// Code is the HTTP response status code. | ||||
| 	Code int | ||||
| 	// Message is the server response message. | ||||
| 	Message string | ||||
| } | ||||
|  | ||||
| func (e *Error) Error() string { | ||||
| 	return fmt.Sprintf("compute: Received %d `%s`", e.Code, e.Message) | ||||
| } | ||||
|  | ||||
		Reference in New Issue
	
	Block a user