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
This commit is contained in:
Daniel Akulenok
2026-01-29 22:03:17 +01:00
parent 5bc1f789d7
commit 152de31edc

View File

@@ -665,7 +665,14 @@ class DNSZoneManager:
# Record exists - check if values differ # Record exists - check if values differ
current = current_records[key] current = current_records[key]
if desired['values'] != current['values'] or desired['ttl'] != current['ttl']: 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: if self.module._verbosity >= 1 or self.module._diff:
before_values = ', '.join(str(v) for v in current['values']) before_values = ', '.join(str(v) for v in current['values'])
after_values = ', '.join(str(v) for v in desired['values']) after_values = ', '.join(str(v) for v in desired['values'])
@@ -846,8 +853,15 @@ class DNSZoneManager:
return result return result
except Exception as e: 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 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 return result
def _format_diff(self, changes: dict) -> dict: def _format_diff(self, changes: dict) -> dict:
@@ -865,12 +879,11 @@ class DNSZoneManager:
record_key = f"{record['name'].to_text()} {record['type']}" record_key = f"{record['name'].to_text()} {record['type']}"
diff_before[record_key] = sorted(str(v) for v in record['values']) 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']: for record in changes['updates']:
record_key = f"{record['name'].to_text()} {record['type']}" record_key = f"{record['name'].to_text()} {record['type']}"
# For updates, we need to show before state from current_records diff_before[record_key] = sorted(str(v) for v in record['old_values'])
# Since we don't have it here, we'll just show after state diff_after[record_key] = sorted(str(v) for v in record['new_values'])
diff_after[record_key] = sorted(str(v) for v in record['values'])
return { return {
'before': diff_before, 'before': diff_before,