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:
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user