func hasSpecOrStatusOrDataChanged()

in operatortrace-go/pkg/predicates/ignore_trace_annotation_update.go [63:79]


func hasSpecOrStatusOrDataChanged(oldObj, newObj runtime.Object) bool {
	oldUnstructured := objToUnstructured(oldObj)
	newUnstructured := objToUnstructured(newObj)

	// Replace empty structs or slices with nil
	replaceEmptyStructsAndSlicesWithNil(oldUnstructured)
	replaceEmptyStructsAndSlicesWithNil(newUnstructured)

	oldStatus := getFieldExcludingObservedGeneration(oldUnstructured, "status")
	newStatus := getFieldExcludingObservedGeneration(newUnstructured, "status")

	specChanged := hasFieldChanged(oldUnstructured, newUnstructured, "spec")
	statusChanged := !equality.Semantic.DeepEqual(oldStatus, newStatus)
	dataChanged := hasFieldChanged(oldUnstructured, newUnstructured, "data")

	return specChanged || statusChanged || dataChanged
}