in sdk/auth/credentials/providers/instance_metadata.go [50:90]
func (p *InstanceMetadataProvider) getMetadataToken() (metadataToken string, err error) {
// PUT http://100.100.100.200/latest/api/token
httpRequest, _err := hookNewRequest(http.NewRequest)("PUT", tokenURL, strings.NewReader(""))
if _err != nil {
if p.DisableIMDSv1 {
err = fmt.Errorf("get metadata token failed: %s", _err.Error())
}
return
}
httpRequest.Header.Set("X-aliyun-ecs-metadata-token-ttl-seconds", strconv.Itoa(defaultMetadataTokenDuration))
httpClient := &http.Client{}
httpResponse, _err := hookDo(httpClient.Do)(httpRequest)
if _err != nil {
if p.DisableIMDSv1 {
err = fmt.Errorf("get metadata token failed: %s", _err.Error())
}
return
}
defer httpResponse.Body.Close()
responseBody, _err := ioutil.ReadAll(httpResponse.Body)
if _err != nil {
if p.DisableIMDSv1 {
err = fmt.Errorf("get metadata token failed: %s", _err.Error())
}
return
}
if httpResponse.StatusCode != http.StatusOK {
if p.DisableIMDSv1 {
err = fmt.Errorf("received %d getting metadata token: %s", httpResponse.StatusCode, string(responseBody))
}
return
}
metadataToken = strings.TrimSpace(string(responseBody))
return
}