func HandleCredentialFetchingError()

in pkg/errors/errors.go [61:107]


func HandleCredentialFetchingError(ctx context.Context, err error) (string, int) {
	log := logger.FromContext(ctx)
	defer func() {
		log.Errorf("Error fetching credentials: %v", err)
	}()

	// first try to get validation errors, if there is one short-circuit and return
	var hcpe HttpCodeProvidingError
	if errors.As(err, &hcpe) {
		return err.Error(), hcpe.HttpStatus()
	}

	// grab some metadata about the service failure if there is any
	var oe *smithy.OperationError
	if errors.As(err, &oe) {
		log = log.WithFields(logrus.Fields{
			"service":   oe.Service(),
			"operation": oe.Operation(),
		})
	}

	var errMsg []string
	httpCode := http.StatusInternalServerError

	var re *awshttp.ResponseError
	if errors.As(err, &re) {
		log = log.WithFields(logrus.Fields{
			"request-id": re.ServiceRequestID(),
		})
		// response error does not necessarily imply that there was an HTTP code response
		if re.HTTPStatusCode() != 0 {
			httpCode = re.HTTPStatusCode()
		}
		errMsg = append(errMsg, "["+re.RequestID+"]")
	}

	var ae smithy.APIError
	if errors.As(err, &ae) {
		errMsg = append(errMsg, fmt.Sprintf("(%s): %s, fault: %s", ae.ErrorCode(), ae.ErrorMessage(), ae.ErrorFault().String()))
	}

	if len(errMsg) == 0 {
		return err.Error(), httpCode
	} else {
		return strings.Join(errMsg, ": "), httpCode
	}
}