func getResourceGroups(client *autorest.Client) (*string, error) { var p map[string]interface{} var req *http.Request p = map[string]interface{}{ "subscription-id": subscriptionID, } q := map[string]interface{}{ "api-version": apiVersion, } req, _ = autorest.Prepare(&http.Request{}, autorest.AsGet(), autorest.WithBaseURL(resourceGroupURLTemplate), autorest.WithPathParameters(p), autorest.WithQueryParameters(q)) resp, err := client.Send(req, http.StatusOK) if err != nil { return nil, err } defer resp.Body.Close() contents, err := ioutil.ReadAll(resp.Body) if err != nil { return nil, err } contentsString := string(contents) return &contentsString, nil }
// pollIndefinitelyAsNeeded is a terrible hack which is necessary because the Azure // Storage API (and perhaps others) can have response times way beyond the default // retry timeouts, with no apparent upper bound. This effectively causes the client // to continue polling when it reaches the configured timeout. My investigations // suggest that this is neccesary when deleting and recreating a storage account with // the same name in a short (though undetermined) time period. // // It is possible that this will give Terraform the appearance of being slow in // future: I have attempted to mitigate this by logging whenever this happens. We // may want to revisit this with configurable timeouts in the future as clearly // unbounded wait loops is not ideal. It does seem preferable to the current situation // where our polling loop will time out _with an operation in progress_, but no ID // for the resource - so the state will not know about it, and conflicts will occur // on the next run. func pollIndefinitelyAsNeeded(client autorest.Client, response *http.Response, acceptableCodes ...int) (*http.Response, error) { var resp *http.Response var err error for { resp, err = client.PollAsNeeded(response, acceptableCodes...) if err != nil { if resp.StatusCode != http.StatusAccepted { log.Printf("[DEBUG] Starting new polling loop for %q", response.Request.URL.Path) continue } return resp, err } return resp, nil } }
func setUserAgent(client *autorest.Client) { var version string if terraform.VersionPrerelease != "" { version = fmt.Sprintf("%s-%s", terraform.Version, terraform.VersionPrerelease) } else { version = terraform.Version } client.UserAgent = fmt.Sprintf("HashiCorp-Terraform-v%s", version) }