Actions
Bug #17007
closedStarting or canceling the build of a host fails if an ipv6 address is configured
Description
If I try to start or cancel the build of a host it fails with the following error:
Failed to save: Conflict IPv6 DNS record <fqdn>/<ipv6 address> already exists
The configured IPv6 address and the conflicting address are the same, but they use different case for the hex letters (configured IPv6 address uses lower case, conflicting address in error message uses upper case.
The source of the error is in the conflicts method in lib/net/dns/forward_record.rb:
@conflicts ||= [dns_lookup(hostname)].delete_if { |c| c == self }.compact
The IPv6 addresses returned by dns_lookup have upper case hex letters which causes c == self to be always false.
Forcing the lookup method in lib/net/dns.rb to return lower case IPv6 addresses solved this particular problem for me:
ip = resolver.getresource(query, Resolv::DNS::Resource::IN::AAAA).address.to_s.downcase
There might be other places which could have similar problems when comparing IPv6 addresses.
Actions