func()

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
}