From cd40a4ede83983a91310eaa8d6ea4b95ed9527b1 Mon Sep 17 00:00:00 2001 From: Daniel Akulenok Date: Thu, 29 Jan 2026 22:18:28 +0100 Subject: [PATCH] Fix diff output to use lists instead of joined strings - Return diff as lists of lines instead of joined strings - Ansible's diff display properly handles list format - Eliminates escaped newline characters in output - Before/after shown as separate lists for proper diff formatting - Each record appears on its own line in the diff output --- plugins/modules/nsupdate_zone.py | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/plugins/modules/nsupdate_zone.py b/plugins/modules/nsupdate_zone.py index c80471e..03b9c76 100644 --- a/plugins/modules/nsupdate_zone.py +++ b/plugins/modules/nsupdate_zone.py @@ -873,25 +873,26 @@ class DNSZoneManager: def _format_diff(self, changes: dict) -> dict: """Format changes as a diff structure for diff mode using zone file format.""" - diff_lines = [] + before_lines = [] + after_lines = [] - # Process deletes - records being removed + # Process deletes - records being removed (appear in before) for record in sorted(changes['deletes'], key=lambda r: (r['name'].to_text(), r['type'])): record_name = record['name'].to_text().rstrip('.') record_type = record['type'] ttl = record.get('ttl', self.soa_minimum_ttl) values = sorted(str(v) for v in record['values']) for value in values: - diff_lines.append(f"-{record_name:<35} {ttl:<10} {record_type:<10} {value}") + before_lines.append(f"{record_name:<35} {ttl:<10} {record_type:<10} {value}") - # Process adds - records being added + # Process adds - records being added (appear in after) for record in sorted(changes['adds'], key=lambda r: (r['name'].to_text(), r['type'])): record_name = record['name'].to_text().rstrip('.') record_type = record['type'] ttl = record.get('ttl', self.soa_minimum_ttl) values = sorted(str(v) for v in record['values']) for value in values: - diff_lines.append(f"+{record_name:<35} {ttl:<10} {record_type:<10} {value}") + after_lines.append(f"{record_name:<35} {ttl:<10} {record_type:<10} {value}") # Process updates - records being changed for record in sorted(changes['updates'], key=lambda r: (r['name'].to_text(), r['type'])): @@ -902,18 +903,17 @@ class DNSZoneManager: old_values = sorted(str(v) for v in record['old_values']) new_values = sorted(str(v) for v in record['new_values']) - # Show old values with - + # Show old values in before for value in old_values: - diff_lines.append(f"-{record_name:<35} {old_ttl:<10} {record_type:<10} {value}") - # Show new values with + + before_lines.append(f"{record_name:<35} {old_ttl:<10} {record_type:<10} {value}") + # Show new values in after for value in new_values: - diff_lines.append(f"+{record_name:<35} {new_ttl:<10} {record_type:<10} {value}") + after_lines.append(f"{record_name:<35} {new_ttl:<10} {record_type:<10} {value}") - # Return diff with content - using actual line breaks, not escaped strings - diff_output = '\n'.join(diff_lines) if diff_lines else 'No changes' + # Return diff with before/after as lists - Ansible will display these properly return { - 'before': diff_output, - 'after': diff_output + 'before': before_lines if before_lines else ['No changes'], + 'after': after_lines if after_lines else ['No changes'] }