def verify(hosts, config, region, ignore_subnet_check=False): """ Check DNS entries and IP availability for hosts""" passed = True conn = get_aws_connection(region) for host in hosts: fqdn = "%s.%s" % (host, config["domain"]) log.info("Checking name conflicts for %s", host) if not name_available(conn, host): log.error("%s has been already taken", host) passed = False continue log.debug("Getting IP for %s", fqdn) ip = get_ip(fqdn) if not ip: log.error("%s has no DNS entry", fqdn) passed = False else: log.debug("Getting PTR for %s", fqdn) ptr = get_ptr(ip) if ptr != fqdn: log.error("Bad PTR for %s", host) passed = False log.debug("Checking %s availablility", ip) if not ip_available(region, ip): log.error("IP %s reserved for %s, but not available", ip, host) passed = False if not ignore_subnet_check: vpc = get_vpc(region) s_id = get_subnet_id(vpc, ip) if s_id not in config['subnet_ids']: log.error("IP %s does not belong to assigned subnets", ip) passed = False if not passed: raise RuntimeError("Sanity check failed")
def check_PTR(args): fqdn, ip = args log.debug("Checking PTR %s %s", fqdn, ip) ptr = get_ptr(ip) if ptr != fqdn: log.error("%s PTR entry %s doesn't match real ip %s", fqdn, ptr, ip) else: log.debug("%s PTR entry %s matches real ip %s", fqdn, ptr, ip)
def test_get_ptr_error(m): m.side_effect = socket.herror assert get_ptr("h1") is None
def test_get_ptr(m): m.return_value = ["a1"] assert get_ptr("h1") == "a1"