in client/internal/imds/imds.go [72:103]
func (c *client) callIMDS(ctx context.Context, url string, queryParameters map[string]string, responseObject interface{}) error {
req, err := http.NewRequestWithContext(ctx, http.MethodGet, url, nil)
if err != nil {
return fmt.Errorf("failed to construct new HTTP request to IMDS: %w", err)
}
req.Header.Add(metadataHeaderKey, "True")
query := req.URL.Query()
for key := range queryParameters {
query.Add(key, queryParameters[key])
}
req.URL.RawQuery = query.Encode()
resp, err := c.httpClient.Do(req)
if err != nil {
return fmt.Errorf("failed to do HTTP request to IMDS: %w", err)
}
if resp != nil && resp.Body != nil {
defer resp.Body.Close()
}
body, err := io.ReadAll(resp.Body)
if err != nil {
return fmt.Errorf("failed to read IMDS response body: %w", err)
}
if err := json.Unmarshal(body, responseObject); err != nil {
return fmt.Errorf("failed to unmarshal IMDS data: %w", err)
}
return nil
}