From b92aa47b47d918720a70fb7ab07ae6a93d934f32 Mon Sep 17 00:00:00 2001 From: Alexei Znamensky Date: Sun, 31 May 2026 14:05:46 +1200 Subject: [PATCH] fix(udm_dns_record): normalize IPv6 addresses before comparison UCS stores IPv6 addresses in expanded form; providing a shortened address causes obj.diff() to always detect a difference and report changed=True. Normalize IPv6 values in the data dict to exploded form before updating the Univention object. Fixes #317 --- plugins/modules/udm_dns_record.py | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/plugins/modules/udm_dns_record.py b/plugins/modules/udm_dns_record.py index a2629a939e..d449dbda52 100644 --- a/plugins/modules/udm_dns_record.py +++ b/plugins/modules/udm_dns_record.py @@ -114,6 +114,28 @@ with deps.declare("ipaddress"): import ipaddress +def _normalize_ip(value: str) -> str: + try: + addr = ipaddress.ip_address(value) + if isinstance(addr, ipaddress.IPv6Address): + return addr.exploded + except ValueError: + pass + return value + + +def _normalize_data_ips(data: dict) -> dict: + result = {} + for key, value in data.items(): + if isinstance(value, list): + result[key] = [_normalize_ip(v) if isinstance(v, str) else v for v in value] + elif isinstance(value, str): + result[key] = _normalize_ip(value) + else: + result[key] = value + return result + + def main(): module = AnsibleModule( argument_spec=dict( @@ -185,7 +207,7 @@ def main(): else: obj["name"] = name - obj.update(data) + obj.update(_normalize_data_ips(data)) diff = obj.diff() changed = obj.diff() != [] if not module.check_mode: