Beispiel #1
0
def create_target_if_needed(session, logger, target, dbdns_env):
    """
    Create FQDNs in restricted domains.

    This is used to allow pointing CNAME and PTR records to DNS domains we
    otherwise don't manage.
    """
    name, dbtarget_domain = parse_fqdn(session, target)

    dbtarget_domain.lock_row()

    q = session.query(Fqdn)
    q = q.filter_by(dns_environment=dbdns_env)
    q = q.filter_by(dns_domain=dbtarget_domain)
    q = q.filter_by(name=name)
    try:
        dbtarget = q.one()
    except NoResultFound:
        if not dbtarget_domain.restricted:
            raise NotFoundException(
                "Target FQDN {0} does not exist in {1:l}.".format(
                    target, dbdns_env))

        dbtarget = Fqdn(name=name,
                        dns_domain=dbtarget_domain,
                        dns_environment=dbdns_env)

        try:
            socket.gethostbyname(dbtarget.fqdn)
        except socket.gaierror, e:
            logger.warning("WARNING: Will create a reference to {0.fqdn!s}, "
                           "but trying to resolve it resulted in an error: "
                           "{1.strerror}.".format(dbtarget, e))

        session.add(dbtarget)
        dbtarget_rec = ReservedName(fqdn=dbtarget)
        session.add(dbtarget_rec)