func fqdn()

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
}