in ec/ecdatasource/deploymentdatasource/flatteners_elasticsearch.go [94:181]
func flattenElasticsearchTopology(ctx context.Context, plan *models.ElasticsearchClusterPlan) (types.List, diag.Diagnostics) {
var diags diag.Diagnostics
var result = make([]elasticsearchTopologyModelV0, 0, len(plan.ClusterTopology))
for _, topology := range plan.ClusterTopology {
model := elasticsearchTopologyModelV0{
NodeRoles: types.SetNull(types.StringType),
Autoscaling: types.ListNull(elasticsearchAutoscalingElemType()),
}
if isElasticsearchSizePopulated(topology) && *topology.Size.Value == 0 {
continue
}
model.InstanceConfigurationID = types.StringValue(topology.InstanceConfigurationID)
if isElasticsearchSizePopulated(topology) {
model.Size = types.StringValue(util.MemoryToState(*topology.Size.Value))
model.SizeResource = types.StringValue(*topology.Size.Resource)
}
model.ZoneCount = types.Int64Value(int64(topology.ZoneCount))
if topology.NodeType != nil {
if topology.NodeType.Data != nil {
model.NodeTypeData = types.BoolValue(*topology.NodeType.Data)
}
if topology.NodeType.Ingest != nil {
model.NodeTypeIngest = types.BoolValue(*topology.NodeType.Ingest)
}
if topology.NodeType.Master != nil {
model.NodeTypeMaster = types.BoolValue(*topology.NodeType.Master)
}
if topology.NodeType.Ml != nil {
model.NodeTypeMl = types.BoolValue(*topology.NodeType.Ml)
}
}
if len(topology.NodeRoles) > 0 {
var d diag.Diagnostics
model.NodeRoles, d = types.SetValueFrom(ctx, types.StringType, topology.NodeRoles)
diags.Append(d...)
}
var autoscaling elasticsearchAutoscalingModel
var hasAutoscalingModel = false
if limit := topology.AutoscalingMax; limit != nil {
autoscaling.MaxSizeResource = types.StringValue(*limit.Resource)
autoscaling.MaxSize = types.StringValue(util.MemoryToState(*limit.Value))
hasAutoscalingModel = true
}
if limit := topology.AutoscalingMin; limit != nil {
autoscaling.MinSizeResource = types.StringValue(*limit.Resource)
autoscaling.MinSize = types.StringValue(util.MemoryToState(*limit.Value))
hasAutoscalingModel = true
}
if topology.AutoscalingPolicyOverrideJSON != nil {
b, err := json.Marshal(topology.AutoscalingPolicyOverrideJSON)
if err != nil {
diags.AddError(
"Invalid elasticsearch topology policy_override_json",
fmt.Sprintf("elasticsearch topology %s: unable to persist policy_override_json: %v", topology.ID, err),
)
} else {
autoscaling.PolicyOverrideJson = types.StringValue(string(b))
hasAutoscalingModel = true
}
}
if hasAutoscalingModel {
var d diag.Diagnostics
model.Autoscaling, d = types.ListValueFrom(ctx, elasticsearchAutoscalingElemType(), []elasticsearchAutoscalingModel{autoscaling})
diags.Append(d...)
}
result = append(result, model)
}
var d diag.Diagnostics
target, d := types.ListValueFrom(ctx, types.ObjectType{AttrTypes: elasticsearchTopologyAttrTypes()}, result)
diags.Append(d...)
return target, diags
}