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