func()

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
}