Esempio n. 1
0
 def test__composes_bootloader_section_v6(self):
     ip = factory.make_ipv6_address()
     output = config.compose_conditional_bootloader(True, ip)
     for name, method in BootMethodRegistry:
         if name == "uefi":
             self.assertThat(output, Contains("else"))
             self.assertThat(output, Contains(method.bootloader_path))
         elif method.arch_octet is not None:
             if isinstance(method.arch_octet, list):
                 self.assertThat(output, ContainsAll(method.arch_octet))
             else:
                 self.assertThat(output, Contains(method.arch_octet))
             self.assertThat(output, Contains(method.bootloader_path))
         else:
             # No DHCP configuration is rendered for boot methods that have
             # no `arch_octet`, with the solitary exception of PXE.
             pass
         if method.path_prefix_http or method.http_url:
             self.assertThat(output, Contains("http://[%s]:5248/" % ip))
         if method.path_prefix_force:
             self.assertThat(output, Contains(
                 "option dhcp6.oro = concat(option dhcp6.oro,00d2);"))
         if method.http_url:
             self.assertThat(output, Contains(
                 'option dhcp6.vendor-class 0 10 "HTTPClient";'))
Esempio n. 2
0
 def test_composes_bootloader_section_v4(self):
     ip = factory.make_ipv4_address()
     output = config.compose_conditional_bootloader(False, ip)
     for name, method in BootMethodRegistry:
         if name == "pxe":
             self.assertThat(output, Contains("else"))
             self.assertThat(output, Contains(method.bootloader_path))
         elif method.arch_octet is not None:
             if isinstance(method.arch_octet, list):
                 self.assertThat(output, ContainsAll(method.arch_octet))
             else:
                 self.assertThat(output, Contains(method.arch_octet))
             self.assertThat(output, Contains(method.bootloader_path))
         else:
             # No DHCP configuration is rendered for boot methods that have
             # no `arch_octet`, with the solitary exception of PXE.
             pass
         if method.path_prefix_http or method.http_url:
             self.assertThat(output, Contains("http://%s:5248/" % ip))
         if method.path_prefix_force:
             self.assertThat(
                 output,
                 Contains("option dhcp-parameter-request-list = concat("),
             )
             self.assertThat(
                 output,
                 Contains("option dhcp-parameter-request-list,d2);"))
         if method.http_url:
             self.assertThat(
                 output,
                 Contains('option vendor-class-identifier "HTTPClient";'),
             )
Esempio n. 3
0
 def test__includes_compose_conditional_bootloader(self):
     params = make_sample_params(self, ipv6=self.ipv6)
     rack_ip = params['shared_networks'][0]['subnets'][0]['router_ip']
     self.patch(
         net_utils, 'get_all_interface_addresses'
         ).return_value = [netaddr.IPAddress(rack_ip)]
     bootloader = config.compose_conditional_bootloader(
         ipv6=self.ipv6, rack_ip=rack_ip)
     rendered = config.get_config(self.template, **params)
     validate_dhcpd_configuration(self, rendered, self.ipv6)
     self.assertThat(rendered, Contains(bootloader))
Esempio n. 4
0
 def test__composes_bootloader_section_v6(self):
     output = config.compose_conditional_bootloader(True)
     for name, method in BootMethodRegistry:
         if name == "uefi":
             self.assertThat(output, Contains("else"))
             self.assertThat(output, Contains(method.bootloader_path))
         elif method.arch_octet is not None:
             self.assertThat(output, Contains(method.arch_octet))
             self.assertThat(output, Contains(method.bootloader_path))
         else:
             # No DHCP configuration is rendered for boot methods that have
             # no `arch_octet`, with the solitary exception of PXE.
             pass
Esempio n. 5
0
 def test_includes_compose_conditional_bootloader(self):
     params = make_sample_params(self, ipv6=self.ipv6)
     rack_ip = params["shared_networks"][0]["subnets"][0]["router_ip"]
     self.patch(net_utils, "get_all_interface_addresses").return_value = [
         netaddr.IPAddress(rack_ip)
     ]
     bootloader = config.compose_conditional_bootloader(ipv6=self.ipv6,
                                                        rack_ip=rack_ip)
     rendered = config.get_config(self.template, **params)
     validate_dhcpd_configuration(self, rendered, self.ipv6)
     self.assertThat(rendered, Contains(bootloader))
     # Verify that "/images/" is automatically added to bootloaders
     # loaded over HTTP. This ensures nginx handles the result without
     # bothering rackd.
     self.assertIn("/images/bootx64.efi", rendered)
Esempio n. 6
0
 def test_disabled_boot_architecture(self):
     if factory.pick_bool():
         ipv6 = True
         ip = factory.make_ipv6_address()
     else:
         ipv6 = False
         ip = factory.make_ipv4_address()
     disabled_arches = random.sample(
         [
             boot_method for _, boot_method in BootMethodRegistry
             if boot_method.arch_octet or boot_method.user_class
         ],
         3,
     )
     output = config.compose_conditional_bootloader(
         ipv6, ip, [bm.name for bm in disabled_arches])
     for disabled_arch in disabled_arches:
         if disabled_arch.arch_octet:
             self.assertNotIn(disabled_arch.arch_octet, output)
         else:
             self.assertNotIn(disabled_arch.user_class, output)