in internal/services/azapi_data_plane_resource.go [291:353]
func (r *DataPlaneResource) ModifyPlan(ctx context.Context, request resource.ModifyPlanRequest, response *resource.ModifyPlanResponse) {
var config, plan, state *DataPlaneResourceModel
response.Diagnostics.Append(request.Config.Get(ctx, &config)...)
response.Diagnostics.Append(request.Plan.Get(ctx, &plan)...)
response.Diagnostics.Append(request.State.Get(ctx, &state)...)
if response.Diagnostics.HasError() {
return
}
// destroy doesn't need to modify plan
if config == nil {
return
}
if state == nil || !plan.ResponseExportValues.Equal(state.ResponseExportValues) || !dynamic.SemanticallyEqual(plan.Body, state.Body) {
plan.Output = basetypes.NewDynamicUnknown()
} else {
plan.Output = state.Output
}
response.Diagnostics.Append(response.Plan.Set(ctx, plan)...)
// Check if any paths in replace_triggers_refs have changed
if state != nil && plan != nil && !plan.ReplaceTriggersRefs.IsNull() {
refPaths := make(map[string]string)
for pathIndex, refPath := range AsStringList(plan.ReplaceTriggersRefs) {
refPaths[fmt.Sprintf("%d", pathIndex)] = refPath
}
// read previous values from state
stateData, err := dynamic.ToJSON(state.Body)
if err != nil {
response.Diagnostics.AddError("Invalid state body configuration", err.Error())
return
}
var stateModel interface{}
err = json.Unmarshal(stateData, &stateModel)
if err != nil {
response.Diagnostics.AddError("Invalid state body configuration", err.Error())
return
}
previousValues := flattenOutputJMES(stateModel, refPaths)
// read current values from plan
planData, err := dynamic.ToJSON(plan.Body)
if err != nil {
response.Diagnostics.AddError("Invalid plan body configuration", err.Error())
return
}
var planModel interface{}
err = json.Unmarshal(planData, &planModel)
if err != nil {
response.Diagnostics.AddError("Invalid plan body configuration", err.Error())
return
}
currentValues := flattenOutputJMES(planModel, refPaths)
// compare previous and current values
if !reflect.DeepEqual(previousValues, currentValues) {
response.RequiresReplace.Append(path.Root("body"))
}
}
}