func getDeploymentType()

in deployment_info.go [35:66]


func getDeploymentType() (deploymentType, error) {
	parsedURL, err := url.Parse("http://metadata.google.internal")
	if err != nil {
		return deploymentTypeUnknown, err
	}
	client := &http.Client{Timeout: 5 * time.Second}
	req := &http.Request{
		Method: "GET",
		URL:    parsedURL,
		Header: http.Header{"Metadata-Flavor": {"Google"}},
	}
	resp, err := client.Do(req)
	if err != nil {
		return deploymentTypeUnknown, err
	}
	resp.Body.Close()

	// Read the "Server" header to determine the deployment type.
	vals := resp.Header.Values("Server")
	for _, val := range vals {
		switch val {
		case "GKE Metadata Server":
			return deploymentTypeGKE, nil
		case "Metadata Server for VM":
			return deploymentTypeGCE, nil
		default:
			return deploymentTypeUnknown, fmt.Errorf("unknown Server type: %s", val)
		}
	}

	return deploymentTypeUnknown, fmt.Errorf("no values in response header for key: %q", "Server")
}