func()

in pkg/infrastructure/authorizationCheckers/ARMTemplateWhatIf/armTemplateWhatIfAuthorizationChecker.go [264:322]


func (a *armWhatIfConfig) GetWhatIfResp(whatIfRespLoc string, bearerToken string) (string, error) {

	client := &http.Client{}

	req, err := http.NewRequest("GET", whatIfRespLoc, nil)
	if err != nil {
		return "", err
	}

	req.Header.Set("Content-Type", "application/json")
	req.Header.Set("Accept", "application/json")
	req.Header.Set("User-Agent", "Go HTTP Client")

	// add bearer token to header
	req.Header.Add("Authorization", "Bearer "+bearerToken)

	var respBody string
	maxRetries := 50
	retryCount := 0
	for {
		// make request
		resp, err := client.Do(req)
		if err != nil {
			return "", err
		}
		defer resp.Body.Close()

		// read response body
		body, err := io.ReadAll(resp.Body)
		if err != nil {
			return "", err
		}

		respBody = string(body)

		// If response body is not empty, break out of loop
		if respBody != "" {
			log.Infoln("Whatif Results Response Received..")
			break
		}

		retryCount++
		if retryCount == maxRetries {
			log.Warnf("Whatif Results Response Body is empty after %d retries, returning empty response body", maxRetries)
			return "", fmt.Errorf("Whatif Results Response Body is empty after %d retries", maxRetries)
		}

		log.Infoln("Whatif Results Response Body is empty, retrying in a bit...")
		// Sleep for 500 milli seconds and try again
		time.Sleep(500 * time.Millisecond)

	}

	log.Debugln("Whatif Results Response Body:")
	log.Debugln(respBody)

	return respBody, nil

}