func()

in cfn/callback/callback.go [71:114]


func (c *CloudFormationCallbackAdapter) reportProgress(errCode string, operationStatus Status, currentOperationStatus Status, resourceModel []byte, statusMessage string) error {

	in := cloudformation.RecordHandlerProgressInput{
		BearerToken:     aws.String(c.bearerToken),
		OperationStatus: aws.String(TranslateOperationStatus(operationStatus)),
	}

	if len(statusMessage) != 0 {
		in.SetStatusMessage(statusMessage)
	}

	if len(resourceModel) != 0 {
		in.SetResourceModel(string(resourceModel))
	}

	if len(errCode) != 0 {
		in.SetErrorCode(TranslateErrorCode(errCode))
	}

	if len(currentOperationStatus) != 0 {
		in.SetCurrentOperationStatus(TranslateOperationStatus(currentOperationStatus))
	}

	// Do retries and emit logs.
	rerr := retry.Do(
		func() error {
			_, err := c.client.RecordHandlerProgress(&in)
			if err != nil {
				return err
			}
			return nil
		}, retry.OnRetry(func(n uint, err error) {
			s := fmt.Sprintf("Failed to record progress: try:#%d: %s\n ", n+1, err)
			c.logger.Println(s)

		}), retry.Attempts(MaxRetries),
	)

	if rerr != nil {
		return cfnerr.New(ServiceInternalError, "Callback ReportProgress Error", rerr)
	}

	return nil
}