refactor: use Ansible standard logging instead of verbose result dict

- Replace verbose_actions in result dict with module.log() calls
- Log per-record actions directly when verbosity >= 1:
  - Added, Removed, Changed actions logged with -v
  - Skipped (unchanged) records logged with -vv
- Remove verbose key from result['changes'] dict
- Simplify _format_diff() to work directly with changes dict
- Follows Ansible conventions for verbose output
- Output now goes to Ansible's logging system instead of result payload
This commit is contained in:
Daniel Akulenok
2026-01-29 20:50:32 +01:00
parent d37d09b631
commit 23fd133bc0

View File

@@ -621,23 +621,17 @@ class DNSZoneManager:
return filtered return filtered
def _compute_changes(self, desired_records, current_records): def _compute_changes(self, desired_records, current_records):
"""Compute adds, deletes, and updates needed with verbose action tracking.""" """Compute adds, deletes, and updates needed."""
changes = { changes = {
'adds': [], 'adds': [],
'deletes': [], 'deletes': [],
'updates': [], 'updates': []
'skipped': [],
'ignored': []
} }
# Track verbose actions per record
verbose_actions = []
# Find adds, updates, and unchanged records # Find adds, updates, and unchanged records
for key, desired in desired_records.items(): for key, desired in desired_records.items():
name_str = desired['name'].to_text() name_str = desired['name'].to_text()
record_type = desired['type'] record_type = desired['type']
record_key = f"{name_str} {record_type}"
if desired['state'] == 'absent': if desired['state'] == 'absent':
# Handle explicit absents # Handle explicit absents
@@ -647,42 +641,29 @@ class DNSZoneManager:
'type': desired['type'], 'type': desired['type'],
'values': desired['values'] 'values': desired['values']
}) })
verbose_actions.append({ if self.module._verbosity >= 1:
'record': record_key, self.module.log(f"[{self.zone_name_str}] Removed: {name_str} {record_type}")
'action': 'Removed',
'before': current_records[key]['values'],
'after': set()
})
else: else:
# State is 'present' # State is 'present'
if key not in current_records: if key not in current_records:
# Record doesn't exist - add it # Record doesn't exist - add it
changes['adds'].append(desired) changes['adds'].append(desired)
verbose_actions.append({ if self.module._verbosity >= 1:
'record': record_key, values_str = ', '.join(str(v) for v in desired['values'])
'action': 'Added', self.module.log(f"[{self.zone_name_str}] Added: {name_str} {record_type} {values_str}")
'before': set(),
'after': desired['values']
})
else: else:
# 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(desired)
verbose_actions.append({ if self.module._verbosity >= 1:
'record': record_key, before_values = ', '.join(str(v) for v in current['values'])
'action': 'Changed', after_values = ', '.join(str(v) for v in desired['values'])
'before': current['values'], self.module.log(f"[{self.zone_name_str}] Changed: {name_str} {record_type} ({before_values} -> {after_values})")
'after': desired['values']
})
else: else:
# Record unchanged # Record unchanged
verbose_actions.append({ if self.module._verbosity >= 2:
'record': record_key, self.module.log(f"[{self.zone_name_str}] Skipped: {name_str} {record_type} (unchanged)")
'action': 'Skipped',
'before': current['values'],
'after': desired['values']
})
# Find deletes (records in current but not in desired, unless ignored) # Find deletes (records in current but not in desired, unless ignored)
for key, current in current_records.items(): for key, current in current_records.items():
@@ -690,21 +671,15 @@ class DNSZoneManager:
# Not in desired state - delete it # Not in desired state - delete it
name_str = current['name'].to_text() name_str = current['name'].to_text()
record_type = current['type'] record_type = current['type']
record_key = f"{name_str} {record_type}"
changes['deletes'].append({ changes['deletes'].append({
'name': current['name'], 'name': current['name'],
'type': current['type'], 'type': current['type'],
'values': current['values'] 'values': current['values']
}) })
verbose_actions.append({ if self.module._verbosity >= 1:
'record': record_key, self.module.log(f"[{self.zone_name_str}] Removed: {name_str} {record_type}")
'action': 'Removed',
'before': current['values'],
'after': set()
})
changes['verbose_actions'] = verbose_actions
return changes return changes
def _validate_cname_conflicts(self, desired_records): def _validate_cname_conflicts(self, desired_records):
@@ -840,9 +815,6 @@ class DNSZoneManager:
if total_changes == 0: if total_changes == 0:
result['changed'] = False result['changed'] = False
if self.module._verbosity >= 1:
# Include verbose output even if no changes
result['changes']['verbose'] = changes.get('verbose_actions', [])
return result return result
result['changed'] = True result['changed'] = True
@@ -850,10 +822,6 @@ class DNSZoneManager:
result['changes']['deletes'] = len(changes['deletes']) result['changes']['deletes'] = len(changes['deletes'])
result['changes']['updates'] = len(changes['updates']) result['changes']['updates'] = len(changes['updates'])
# Add verbose output if verbosity enabled
if self.module._verbosity >= 1:
result['changes']['verbose'] = changes.get('verbose_actions', [])
# Add diff output if enabled # Add diff output if enabled
if self.module.diff: if self.module.diff:
result['diff'] = self._format_diff(changes) result['diff'] = self._format_diff(changes)
@@ -877,19 +845,22 @@ class DNSZoneManager:
diff_before = {} diff_before = {}
diff_after = {} diff_after = {}
# Process all changes # Process adds
for action_info in changes.get('verbose_actions', []): for record in changes['adds']:
record_key = action_info['record'] record_key = f"{record['name'].to_text()} {record['type']}"
action = action_info['action'] diff_after[record_key] = sorted(str(v) for v in record['values'])
if action == 'Added': # Process deletes
diff_after[record_key] = list(action_info['after']) for record in changes['deletes']:
elif action == 'Removed': record_key = f"{record['name'].to_text()} {record['type']}"
diff_before[record_key] = list(action_info['before']) diff_before[record_key] = sorted(str(v) for v in record['values'])
elif action == 'Changed':
diff_before[record_key] = list(action_info['before']) # Process updates
diff_after[record_key] = list(action_info['after']) for record in changes['updates']:
# Skipped records are not included in diff 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'])
return { return {
'before': diff_before, 'before': diff_before,