def locate_domain_controllers()

in ad-joining/register-computer/ad/domain.py [0:0]


    def locate_domain_controllers(domain_name, site_name):
        query = "_ldap._tcp"

        # Use site-awareness if site was provided
        if not site_name is None and len(site_name) > 0:
            query += f".{site_name}._sites"
            logging.info(f"Using site-awareness to select closest DC for site '{site_name}'")

        query += f".dc._msdcs.{domain_name}"

        records = dns.resolver.query(query, "SRV")
        if len(records) == 0:
            raise DomainControllerLookupException("No SRV records found for %s" % domain_name)

        records_sorted = sorted(records, key=lambda r: (-r.priority, r.weight, r.target))
        return [str(record.target)[:-1] if str(record.target).endswith(".") else str(record.target) for record in records_sorted]