in tf/utils.go [58:112]
func NewDiffReport(plan *tfjson.Plan, logs []paltypes.RequestTrace) types.DiffReport {
out := types.DiffReport{
Diffs: make([]types.Diff, 0),
Logs: logs,
}
if plan == nil {
return out
}
for _, resourceChange := range plan.ResourceChanges {
if resourceChange == nil || resourceChange.Change == nil || resourceChange.Change.Before == nil || resourceChange.Change.After == nil {
continue
}
if !strings.HasPrefix(resourceChange.Address, "azapi_") {
continue
}
if len(resourceChange.Change.Actions) == 1 && resourceChange.Change.Actions[0] == tfjson.ActionNoop {
continue
}
beforeMap, beforeMapOk := resourceChange.Change.Before.(map[string]interface{})
afterMap, afterMapOk := resourceChange.Change.After.(map[string]interface{})
if !beforeMapOk || !afterMapOk {
continue
}
if afterMap["id"] == nil {
logrus.Errorf("resource %s has no id", resourceChange.Address)
continue
}
var change types.Change
if _, ok := beforeMap["body"].(string); ok {
change = types.Change{
Before: beforeMap["body"].(string),
After: afterMap["body"].(string),
}
} else {
payloadBefore, _ := json.Marshal(beforeMap["body"])
payloadAfter, _ := json.Marshal(afterMap["body"])
change = types.Change{
Before: string(payloadBefore),
After: string(payloadAfter),
}
}
out.Diffs = append(out.Diffs, types.Diff{
Id: afterMap["id"].(string),
Type: afterMap["type"].(string),
Address: resourceChange.Address,
Change: change,
})
}
return out
}