in sdk/auth/credentials/providers/instance_metadata.go [92:139]
func (p *InstanceMetadataProvider) GetRoleName() (roleName string, err error) {
// Instances can have only one role name that never changes,
// so attempt to populate it.
// If this call is executed in an environment that doesn't support instance metadata,
// it will time out after 30 seconds and return an err.
httpRequest, err := hookNewRequest(http.NewRequest)("GET", securityCredURL, strings.NewReader(""))
if err != nil {
err = fmt.Errorf("get role name failed: %s", err.Error())
return
}
metadataToken, err := p.getMetadataToken()
if err != nil {
return
}
if metadataToken != "" {
httpRequest.Header.Set("X-aliyun-ecs-metadata-token", metadataToken)
}
httpClient := &http.Client{}
httpResponse, err := hookDo(httpClient.Do)(httpRequest)
if err != nil {
err = fmt.Errorf("get role name failed: %s", err.Error())
return
}
defer httpResponse.Body.Close()
responseBody, err := ioutil.ReadAll(httpResponse.Body)
if err != nil {
return
}
roleName = strings.TrimSpace(string(responseBody))
if httpResponse.StatusCode != http.StatusOK {
err = fmt.Errorf("received %d getting role name: %s", httpResponse.StatusCode, roleName)
return
}
if roleName == "" {
err = fmt.Errorf("unable to retrieve role name, it may be unset")
return
}
return
}