예제 #1
0
 def test_round_trips_ipv6_address(self):
     network = factory.make_ipv6_network()
     encoded = self.argument.toString(network)
     self.assertThat(encoded, IsInstance(bytes))
     self.assertThat(encoded, HasLength(17))
     decoded = self.argument.fromString(encoded)
     self.assertThat(decoded, Equals(network))
예제 #2
0
 def test_ignores_generate_directives_for_v6_dynamic_ranges(self):
     patch_dns_config_path(self)
     domain = factory.make_string()
     network = factory.make_ipv4_network()
     ipv4_hostname = factory.make_name("host")
     ipv4_ip = factory.pick_ip_in_network(network)
     ipv6_hostname = factory.make_name("host")
     ipv6_ip = factory.make_ipv6_address()
     ipv6_network = factory.make_ipv6_network()
     dynamic_range = IPRange(ipv6_network.first, ipv6_network.last)
     ttl = random.randint(10, 300)
     mapping = {
         ipv4_hostname: HostnameIPMapping(None, ttl, {ipv4_ip}),
         ipv6_hostname: HostnameIPMapping(None, ttl, {ipv6_ip}),
     }
     dns_zone_config = DNSForwardZoneConfig(
         domain,
         serial=random.randint(1, 100),
         mapping=mapping,
         default_ttl=ttl,
         dynamic_ranges=[dynamic_range],
     )
     get_generate_directives = self.patch(dns_zone_config,
                                          "get_GENERATE_directives")
     dns_zone_config.write_config()
     self.assertThat(get_generate_directives, MockNotCalled())
예제 #3
0
 def make_cidrs(self):
     return frozenset(
         {
             str(factory.make_ipv4_network()),
             str(factory.make_ipv6_network()),
         }
     )
예제 #4
0
 def test_bind_write_configuration_writes_file(self):
     domain = factory.make_string()
     zones = [
         DNSReverseZoneConfig(domain,
                              serial=random.randint(1, 100),
                              network=factory.make_ipv4_network()),
         DNSReverseZoneConfig(domain,
                              serial=random.randint(1, 100),
                              network=factory.make_ipv6_network()),
     ]
     actions.bind_write_configuration(zones=zones, trusted_networks=[])
     self.assertThat(os.path.join(self.dns_conf_dir, MAAS_NAMED_CONF_NAME),
                     FileExists())
예제 #5
0
파일: config.py 프로젝트: casual-lemon/maas
def make_subnet_config(
    network=None,
    pools=None,
    ipv6=False,
    dhcp_snippets=None,
    disabled_boot_architectures=None,
):
    """Return complete DHCP configuration dict for a subnet."""
    if network is None:
        if ipv6 is True:
            network = factory.make_ipv6_network(
                # The dynamic range must be at least 256 hosts in size.
                slash=random.randint(112, 120))
        else:
            network = factory.make_ipv4_network()
    if pools is None:
        pools = [make_subnet_pool(network)]
    if dhcp_snippets is None:
        dhcp_snippets = make_subnet_dhcp_snippets()
    domain_name = "%s.example.com" % factory.make_name("domain")
    return {
        "subnet":
        str(IPAddress(network.first)),
        "subnet_mask":
        str(network.netmask),
        "subnet_cidr":
        str(network.cidr),
        "broadcast_ip":
        str(network.broadcast),
        "dns_servers": [
            IPAddress(factory.pick_ip_in_network(network)),
            IPAddress(factory.pick_ip_in_network(network)),
        ],
        "ntp_servers": [
            factory.make_ipv4_address(),
            factory.make_ipv6_address(),
            factory.make_name("ntp-server"),
        ],
        "domain_name":
        domain_name,
        "search_list": [domain_name],
        "router_ip":
        factory.pick_ip_in_network(network),
        "pools":
        pools,
        "dhcp_snippets":
        dhcp_snippets,
        "disabled_boot_architectures":
        disabled_boot_architectures if disabled_boot_architectures else [],
    }
예제 #6
0
def make_subnet_config(network=None,
                       pools=None,
                       ipv6=False,
                       dhcp_snippets=None):
    """Return complete DHCP configuration dict for a subnet."""
    if network is None:
        if ipv6 is True:
            network = factory.make_ipv6_network(
                # The dynamic range must be at least 256 hosts in size.
                slash=random.randint(112, 120))
        else:
            network = factory.make_ipv4_network()
    if pools is None:
        pools = [make_subnet_pool(network)]
    if dhcp_snippets is None:
        dhcp_snippets = make_subnet_dhcp_snippets()
    domain_name = '%s.example.com' % factory.make_name('domain')
    return {
        'subnet':
        str(IPAddress(network.first)),
        'subnet_mask':
        str(network.netmask),
        'subnet_cidr':
        str(network.cidr),
        'broadcast_ip':
        str(network.broadcast),
        'dns_servers': [
            IPAddress(factory.pick_ip_in_network(network)),
            IPAddress(factory.pick_ip_in_network(network)),
        ],
        'ntp_servers': [
            factory.make_ipv4_address(),
            factory.make_ipv6_address(),
            factory.make_name("ntp-server"),
        ],
        'domain_name':
        domain_name,
        'search_list': [domain_name],
        'router_ip':
        factory.pick_ip_in_network(network),
        'pools':
        pools,
        'dhcp_snippets':
        dhcp_snippets,
    }
예제 #7
0
 def test_bind_write_configuration_writes_file_with_acl(self):
     trusted_networks = [
         factory.make_ipv4_network(),
         factory.make_ipv6_network(),
     ]
     actions.bind_write_configuration(zones=[],
                                      trusted_networks=trusted_networks)
     expected_file = os.path.join(self.dns_conf_dir, MAAS_NAMED_CONF_NAME)
     self.assertThat(expected_file, FileExists())
     expected_content = dedent("""\
     acl "trusted" {
         %s;
         %s;
         localnets;
         localhost;
     };
     """)
     expected_content %= tuple(trusted_networks)
     self.assertThat(expected_file,
                     FileContains(matcher=Contains(expected_content)))
예제 #8
0
 def test_pick_ip_in_network_for_ipv6(self):
     # For IPv6, pick_ip_in_network will not consider the very first
     # address in a network because this is reserved for routers.
     network = factory.make_ipv6_network(slash=126)
     ip = factory.pick_ip_in_network(network)
     self.assertTrue(network.first < IPAddress(ip).value <= network.last)