From 152de31edc84c3a23c62e6a87b5a2b58f2ba7a04 Mon Sep 17 00:00:00 2001 From: Daniel Akulenok Date: Thu, 29 Jan 2026 22:03:17 +0100 Subject: [PATCH] Improve error reporting and diff output for updates - Store both old and new values in updates for proper diff reporting - Show before/after states for updated records in diff mode - Improve exception handling with better error messages and traceback logging - Include full exception type if string representation is empty - Add debug-level traceback output for troubleshooting --- plugins/modules/nsupdate_zone.py | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/plugins/modules/nsupdate_zone.py b/plugins/modules/nsupdate_zone.py index d983ff4..92b9130 100644 --- a/plugins/modules/nsupdate_zone.py +++ b/plugins/modules/nsupdate_zone.py @@ -665,7 +665,14 @@ class DNSZoneManager: # Record exists - check if values differ current = current_records[key] if desired['values'] != current['values'] or desired['ttl'] != current['ttl']: - changes['updates'].append(desired) + changes['updates'].append({ + 'name': desired['name'], + 'type': desired['type'], + 'old_values': current['values'], + 'new_values': desired['values'], + 'old_ttl': current['ttl'], + 'new_ttl': desired['ttl'] + }) if self.module._verbosity >= 1 or self.module._diff: before_values = ', '.join(str(v) for v in current['values']) after_values = ', '.join(str(v) for v in desired['values']) @@ -846,8 +853,15 @@ class DNSZoneManager: return result except Exception as e: - result['error'] = str(e) + import traceback + error_msg = str(e) + if not error_msg or error_msg == "": + error_msg = f"{type(e).__name__}: {e}" + result['error'] = error_msg result['failed'] = True + # Include traceback in debug output for troubleshooting + if self.module._verbosity >= 2: + self.module.debug(f"[{self.zone_name_str}] Exception traceback: {traceback.format_exc()}") return result def _format_diff(self, changes: dict) -> dict: @@ -865,12 +879,11 @@ class DNSZoneManager: record_key = f"{record['name'].to_text()} {record['type']}" diff_before[record_key] = sorted(str(v) for v in record['values']) - # Process updates + # Process updates - show both before and after for record in changes['updates']: record_key = f"{record['name'].to_text()} {record['type']}" - # For updates, we need to show before state from current_records - # Since we don't have it here, we'll just show after state - diff_after[record_key] = sorted(str(v) for v in record['values']) + diff_before[record_key] = sorted(str(v) for v in record['old_values']) + diff_after[record_key] = sorted(str(v) for v in record['new_values']) return { 'before': diff_before,