def eql?(expected_record)
Route53Wrapper::RRSET_ATTRS_WITH_TYPE.all? do |attribute|
expected = expected_record.public_send(attribute)
expected = Aws::Route53.sort_rrset_values(attribute, expected) if expected.kind_of?(Array)
expected = nil if expected.kind_of?(Array) && expected.empty?
actual = self.public_send(attribute)
actual = Aws::Route53.sort_rrset_values(attribute, actual) if actual.kind_of?(Array)
actual = nil if actual.kind_of?(Array) && actual.empty?
if attribute == :geo_location and actual
actual = Hash[actual.each_pair.select {|k, v| not v.nil? }]
end
if !expected and !actual
true
elsif expected and actual
case attribute
when :health_check
if actual[:alarm_identifier]
actual[:alarm_identifier] = actual[:alarm_identifier].to_h
end
when :dns_name
expected[0] = expected[0].downcase.sub(/\.\z/, '')
actual[0] = actual[0].downcase.sub(/\.\z/, '')
if expected[0] !~ /\Adualstack\./i and actual[0] =~ /\Adualstack\./i
log(:warn, "`dualstack` prefix is used in the actual DNS name", :yellow) do
log_id = [self.name, self.type].join(' ')
rrset_setid = self.set_identifier
rrset_setid ? (log_id + " (#{rrset_setid})") : log_id
end
actual[0].sub!(/\Adualstack\./i, '')
end
when :resource_records
if self.type == 'AAAA'
return expected.map { |v| IPAddr.new(v.value, Socket::AF_INET6) } == actual.map { |v| IPAddr.new(v.value, Socket::AF_INET6) }
end
end
(expected == actual)
else
false
end
end
end