in internal/hostgacommunicator/hostgacommunicator.go [45:78]
func (c *HostGACommunicator) GetImmediateVMSettings(ctx *log.Context, eTag string) (*ResponseData, error) {
requestManager, err := c.vmRequestManager.GetVMSettingsRequestManager(ctx)
if err != nil {
return nil, errors.Wrapf(err, "could not create the request manager to get immediate VMsettings")
}
resp, err := requesthelper.WithRetries(ctx, requestManager, requesthelper.ActualSleep, eTag)
if err != nil {
return nil, errors.Wrapf(err, "request to retrieve VMSettings failed with retries.")
}
// If the response is 304 Not Modified or 404 Not Found, return nil VMSettings as there are not new goal states to process
if resp.StatusCode == http.StatusNotModified || resp.StatusCode == http.StatusNotFound {
return &ResponseData{VMSettings: nil, ETag: eTag, Modified: false}, nil
}
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil {
panic(err)
}
var vmSettings VMImmediateExtensionsGoalState
if err := json.Unmarshal(body, &vmSettings); err != nil {
return nil, errors.Wrapf(err, "failed to parse immediate VMSettings json")
}
newETag := resp.Header.Get(constants.ETagHeaderName)
if newETag == "" {
return nil, errors.New("ETag not found in response header when retrieving immediate VMSettings")
}
return &ResponseData{VMSettings: &vmSettings, ETag: newETag, Modified: eTag != newETag}, nil
}