in internal/cloudsql/resolver.go [100:135]
func (r *DNSInstanceConnectionNameResolver) queryDNS(ctx context.Context, domainName string) (instance.ConnName, error) {
// Attempt to query the TXT records.
// This could return a partial error where both err != nil && len(records) > 0.
records, err := r.dnsResolver.LookupTXT(ctx, domainName)
// If resolve failed and no records were found, return the error.
if err != nil {
return instance.ConnName{}, fmt.Errorf("unable to resolve TXT record for %q: %v", domainName, err)
}
// Process the records returning the first valid TXT record.
// Sort the TXT record values alphabetically by instance name
sort.Slice(records, func(i, j int) bool {
return records[i] < records[j]
})
var perr error
// Attempt to parse records, returning the first valid record.
for _, record := range records {
// Parse the target as a CN
cn, parseErr := instance.ParseConnNameWithDomainName(record, domainName)
if parseErr != nil {
perr = fmt.Errorf("unable to parse TXT for %q -> %q : %v", domainName, record, parseErr)
continue
}
return cn, nil
}
// If all the records failed to parse, return one of the parse errors
if perr != nil {
return instance.ConnName{}, perr
}
// No records were found, return an error.
return instance.ConnName{}, fmt.Errorf("no valid TXT records found for %q", domainName)
}