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