func elasticsearchTopologyAutoscalingPayload()

in ec/ecresource/deploymentresource/elasticsearch/v2/elasticsearch_topology.go [368:432]


func elasticsearchTopologyAutoscalingPayload(ctx context.Context, autoObj attr.Value, topologyID string, payload *models.ElasticsearchClusterTopologyElement) diag.Diagnostics {
	var diag diag.Diagnostics

	if autoObj.IsNull() || autoObj.IsUnknown() {
		return nil
	}

	// it should be only one element if any
	var autoscale v1.ElasticsearchTopologyAutoscalingTF

	if diags := tfsdk.ValueAs(ctx, autoObj, &autoscale); diags.HasError() {
		return diags
	}

	if autoscale == (v1.ElasticsearchTopologyAutoscalingTF{}) {
		return nil
	}

	if !autoscale.MinSize.IsNull() && !autoscale.MinSize.IsUnknown() {
		if payload.AutoscalingMin == nil {
			payload.AutoscalingMin = new(models.TopologySize)
		}

		err := expandAutoscalingDimension(autoscale, payload.AutoscalingMin, autoscale.MinSize, autoscale.MinSizeResource)
		if err != nil {
			diag.AddError("fail to parse autoscale min size", err.Error())
			return diag
		}

		if reflect.DeepEqual(payload.AutoscalingMin, new(models.TopologySize)) {
			payload.AutoscalingMin = nil
		}
	}

	if !autoscale.MaxSize.IsNull() && !autoscale.MaxSize.IsUnknown() {
		if payload.AutoscalingMax == nil {
			payload.AutoscalingMax = new(models.TopologySize)
		}

		err := expandAutoscalingDimension(autoscale, payload.AutoscalingMax, autoscale.MaxSize, autoscale.MaxSizeResource)
		if err != nil {
			diag.AddError("fail to parse autoscale max size", err.Error())
			return diag
		}

		if reflect.DeepEqual(payload.AutoscalingMax, new(models.TopologySize)) {
			payload.AutoscalingMax = nil
		}
	}

	if autoscale.PolicyOverrideJson.ValueString() != "" {
		if err := json.Unmarshal([]byte(autoscale.PolicyOverrideJson.ValueString()),
			&payload.AutoscalingPolicyOverrideJSON,
		); err != nil {
			diag.AddError(fmt.Sprintf("elasticsearch topology %s: unable to load policy_override_json", topologyID), err.Error())
			return diag
		}
	}

	if !autoscale.TierAutoscale.IsNull() && !autoscale.TierAutoscale.IsUnknown() {
		payload.AutoscalingTierOverride = autoscale.TierAutoscale.ValueBoolPointer()
	}

	return diag
}