in providers/shared/fqdn.go [59:94]
func fqdn(ctx context.Context, hostname string) (string, error) {
var errs error
cname, err := net.DefaultResolver.LookupCNAME(ctx, hostname)
if err != nil {
errs = fmt.Errorf("could not get FQDN, all methods failed: failed looking up CNAME: %w",
err)
}
if cname != "" {
cname = strings.TrimSuffix(cname, ".")
// Go might lowercase the cname "for convenience". Therefore, if cname
// is the same as hostname, return hostname as is.
// See https://github.com/golang/go/blob/go1.22.5/src/net/hosts.go#L38
if strings.ToLower(cname) == strings.ToLower(hostname) {
return hostname, nil
}
return cname, nil
}
ips, err := net.DefaultResolver.LookupIP(ctx, "ip", hostname)
if err != nil {
errs = fmt.Errorf("%s: failed looking up IP: %w", errs, err)
}
for _, ip := range ips {
names, err := net.DefaultResolver.LookupAddr(ctx, ip.String())
if err != nil || len(names) == 0 {
continue
}
return strings.TrimSuffix(names[0], "."), nil
}
return "", errs
}