func getMetadataValue()

in image/resources/knfsd-agent/metadata.go [32:65]


func getMetadataValue(URI string, delimit bool) (string, error) {
	client := &http.Client{
		Timeout: 2 * time.Second,
	}

	req, err := http.NewRequest("GET", fmt.Sprintf("%s/%s?alt=text", metadataServerURL, URI), nil)
	if err != nil {
		return "", err
	}

	// As per https://cloud.google.com/compute/docs/metadata/overview#parts-of-a-request
	// all metadata queries need to include "Metadata-Flavor: Google" in the
	// HTTP headers.
	req.Header.Set("Metadata-Flavor", "Google")
	resp, err := client.Do(req)
	if err != nil {
		return "", err
	}

	if resp.StatusCode != http.StatusOK {
		return "", fmt.Errorf("received invalid HTTP response code, got %d, wanted 200", resp.StatusCode)
	}

	body, err := io.ReadAll(resp.Body)
	if err != nil {
		return "", err
	}

	if delimit {
		return lastAfterDelimiter(string(body), "/"), nil
	} else {
		return string(body), nil
	}
}