1
0
Fork 0
mirror of https://github.com/ansible-collections/community.general.git synced 2026-07-01 16:18:55 +00:00

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
This commit is contained in:
Alexei Znamensky 2026-05-31 14:05:46 +12:00
parent a794ccf127
commit b92aa47b47

View file

@ -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: