def test_get_dns_server_address_logs_warning_if_ip_is_localhost(self): logger = self.patch(zonegenerator, 'logger') self.patch(zonegenerator, 'get_maas_facing_server_addresses', Mock(return_value=[IPAddress('127.0.0.1')])) get_dns_server_address() self.assertEqual(call(WARNING_MESSAGE % '127.0.0.1'), logger.warning.call_args)
def test_get_dns_server_address_passes_on_IPv4_IPv6_selection(self): ipv4 = factory.pick_bool() ipv6 = factory.pick_bool() patch = self.patch(zonegenerator, 'get_maas_facing_server_addresses') patch.return_value = [IPAddress(factory.make_ipv4_address())] get_dns_server_address(ipv4=ipv4, ipv6=ipv6) self.assertThat(patch, MockCalledOnceWith(ANY, ipv4=ipv4, ipv6=ipv6))
def test_get_dns_server_address_passes_on_IPv4_IPv6_selection(self): ipv4 = factory.pick_bool() ipv6 = factory.pick_bool() patch = self.patch(zonegenerator, "get_maas_facing_server_addresses") patch.return_value = [IPAddress(factory.make_ipv4_address())] get_dns_server_address(ipv4=ipv4, ipv6=ipv6) self.assertThat( patch, MockCalledOnceWith( ANY, include_alternates=False, ipv4=ipv4, ipv6=ipv6, default_region_ip=None, ), )
def test_get_dns_server_address_ignores_unallowed_dns(self): # Regression test for LP:1847537 subnet = factory.make_Subnet(cidr="10.0.0.0/24", allow_dns=False) ip = factory.make_StaticIPAddress(subnet=subnet) resolver = self.patch(server_address, "resolve_hostname") resolver.return_value = {IPAddress(ip.ip)} rack_controller = factory.make_RackController(subnet=subnet, url="http://%s" % ip.ip) self.assertIsNone(get_dns_server_address(rack_controller))
def test_get_dns_server_address_uses_rack_controller_url(self): ip = factory.make_ipv4_address() resolver = self.patch(server_address, "resolve_hostname") resolver.return_value = {IPAddress(ip)} hostname = factory.make_hostname() maas_url = "http://%s" % hostname rack_controller = factory.make_RackController(url=maas_url) result = get_dns_server_address(rack_controller) self.expectThat(ip, Equals(result)) self.expectThat(resolver, MockAnyCall(hostname, 0))
def test_get_dns_server_address_resolves_hostname(self): url = maastesting_factory.make_simple_http_url() self.useFixture(RegionConfigurationFixture(maas_url=url)) ip = factory.make_ipv4_address() resolver = self.patch(server_address, "resolve_hostname") resolver.return_value = {IPAddress(ip)} hostname = urlparse(url).hostname result = get_dns_server_address() self.assertEqual(ip, result) self.expectThat(resolver, MockAnyCall(hostname, 0))
def get_dhcp_configure_for(ip_version: int, rack_controller, vlan, subnets: list, ntp_servers: Union[list, dict], domain, dhcp_snippets: Iterable = None): """Get the DHCP configuration for `ip_version`.""" try: maas_dns_server = get_dns_server_address(rack_controller, ipv4=(ip_version == 4), ipv6=(ip_version == 6)) except UnresolvableHost: maas_dns_server = None # Select the best interface for this VLAN. This is an interface that # at least has an IP address. interfaces = get_interfaces_with_ip_on_vlan(rack_controller, vlan, ip_version) interface = get_best_interface(interfaces) # Generate the failover peer for this VLAN. if vlan.secondary_rack_id is not None: peer_name, peer_config = make_failover_peer_config( vlan, rack_controller) else: peer_name, peer_config = None, None if dhcp_snippets is None: dhcp_snippets = [] subnets_dhcp_snippets = [ dhcp_snippet for dhcp_snippet in dhcp_snippets if dhcp_snippet.subnet is not None ] nodes_dhcp_snippets = [ dhcp_snippet for dhcp_snippet in dhcp_snippets if dhcp_snippet.node is not None ] # Generate the shared network configurations. subnet_configs = [] hosts = [] for subnet in subnets: subnet_configs.append( make_subnet_config(rack_controller, subnet, maas_dns_server, ntp_servers, domain, peer_name, subnets_dhcp_snippets)) # Generate the hosts for all subnets. hosts = make_hosts_for_subnets(subnets, nodes_dhcp_snippets) return (peer_config, sorted(subnet_configs, key=itemgetter("subnet")), hosts, None if interface is None else interface.name)