示例#1
0
 def test__sets_boot_cluster_ip_when_empty(self):
     rack_controller = factory.make_RackController()
     local_ip = factory.make_ip_address()
     remote_ip = factory.make_ip_address()
     node = self.make_node()
     mac = node.get_boot_interface().mac_address
     get_config(rack_controller.system_id, local_ip, remote_ip, mac=mac)
     self.assertEqual(local_ip, reload_object(node).boot_cluster_ip)
示例#2
0
 def test__returns_success_for_known_node(self):
     rack_controller = factory.make_RackController()
     local_ip = factory.make_ip_address()
     remote_ip = factory.make_ip_address()
     node = self.make_node(status=NODE_STATUS.DEPLOYING)
     mac = node.get_boot_interface().mac_address
     # Should not raise BootConfigNoResponse.
     get_config(rack_controller.system_id, local_ip, remote_ip, mac=mac)
示例#3
0
 def test__updates_bios_boot_method(self):
     rack_controller = factory.make_RackController()
     local_ip = factory.make_ip_address()
     remote_ip = factory.make_ip_address()
     node = self.make_node()
     mac = node.get_boot_interface().mac_address
     get_config(
         rack_controller.system_id, local_ip, remote_ip,
         mac=mac, bios_boot_method="pxe")
     self.assertEqual('pxe', reload_object(node).bios_boot_method)
示例#4
0
 def test__uses_rescue_mode_boot_purpose(self):
     rack_controller = factory.make_RackController()
     local_ip = factory.make_ip_address()
     remote_ip = factory.make_ip_address()
     node = self.make_node(status=NODE_STATUS.ENTERING_RESCUE_MODE)
     mac = node.get_boot_interface().mac_address
     event_log_pxe_request = self.patch_autospec(boot_module,
                                                 'event_log_pxe_request')
     get_config(rack_controller.system_id, local_ip, remote_ip, mac=mac)
     self.assertThat(event_log_pxe_request,
                     MockCalledOnceWith(node, 'rescue'))
示例#5
0
 def test__calls_event_log_pxe_request(self):
     rack_controller = factory.make_RackController()
     local_ip = factory.make_ip_address()
     remote_ip = factory.make_ip_address()
     node = self.make_node()
     mac = node.get_boot_interface().mac_address
     event_log_pxe_request = self.patch_autospec(boot_module,
                                                 'event_log_pxe_request')
     get_config(rack_controller.system_id, local_ip, remote_ip, mac=mac)
     self.assertThat(event_log_pxe_request,
                     MockCalledOnceWith(node, node.get_boot_purpose()))
示例#6
0
 def test__doesnt_update_boot_cluster_ip_when_same(self):
     rack_controller = factory.make_RackController()
     local_ip = factory.make_ip_address()
     remote_ip = factory.make_ip_address()
     node = self.make_node()
     node.boot_interface = node.get_boot_interface()
     mac = node.boot_interface.mac_address
     node.boot_cluster_ip = local_ip
     node.save()
     mock_save = self.patch(Node, 'save')
     get_config(rack_controller.system_id, local_ip, remote_ip, mac=mac)
     self.assertThat(mock_save, MockNotCalled())
示例#7
0
 def test__returns_success_for_detailed_but_unknown_node(self):
     rack_controller = factory.make_RackController()
     local_ip = factory.make_ip_address()
     remote_ip = factory.make_ip_address()
     architecture = make_usable_architecture(self)
     arch = architecture.split('/')[0]
     factory.make_default_ubuntu_release_bootable(arch)
     mac = factory.make_mac_address(delimiter='-')
     # Should not raise BootConfigNoResponse.
     get_config(
         rack_controller.system_id, local_ip, remote_ip,
         arch=arch, subarch='generic', mac=mac)
示例#8
0
 def test__updates_boot_interface_when_changed(self):
     rack_controller = factory.make_RackController()
     local_ip = factory.make_ip_address()
     remote_ip = factory.make_ip_address()
     node = self.make_node()
     node.boot_interface = node.get_boot_interface()
     node.save()
     nic = factory.make_Interface(INTERFACE_TYPE.PHYSICAL,
                                  node=node,
                                  vlan=node.boot_interface.vlan)
     mac = nic.mac_address
     get_config(rack_controller.system_id, local_ip, remote_ip, mac=mac)
     self.assertEqual(nic, reload_object(node).boot_interface)
示例#9
0
 def test__uses_present_boot_image(self):
     rack_controller = factory.make_RackController()
     local_ip = factory.make_ip_address()
     remote_ip = factory.make_ip_address()
     factory.make_default_ubuntu_release_bootable('amd64')
     observed_config = get_config(rack_controller.system_id, local_ip,
                                  remote_ip)
     self.assertEqual("amd64", observed_config["arch"])
示例#10
0
 def test__returns_empty_string_for_no_extra_kernel_opts(self):
     rack_controller = factory.make_RackController()
     local_ip = factory.make_ip_address()
     remote_ip = factory.make_ip_address()
     make_usable_architecture(self)
     observed_config = get_config(rack_controller.system_id, local_ip,
                                  remote_ip)
     self.assertEqual('', observed_config['extra_opts'])
示例#11
0
 def test__sets_boot_interface_vlan_to_match_rack_controller(self):
     rack_controller = factory.make_RackController()
     rack_fabric = factory.make_Fabric()
     rack_vlan = rack_fabric.get_default_vlan()
     rack_interface = factory.make_Interface(
         INTERFACE_TYPE.PHYSICAL, node=rack_controller, vlan=rack_vlan)
     rack_subnet = factory.make_Subnet(vlan=rack_vlan)
     rack_ip = factory.make_StaticIPAddress(
         alloc_type=IPADDRESS_TYPE.STICKY, subnet=rack_subnet,
         interface=rack_interface)
     remote_ip = factory.make_ip_address()
     node = self.make_node()
     mac = node.get_boot_interface().mac_address
     get_config(
         rack_controller.system_id, rack_ip.ip, remote_ip, mac=mac)
     self.assertEqual(
         rack_vlan, reload_object(node).get_boot_interface().vlan)
示例#12
0
 def test__returns_enlist_config_if_no_architecture_provided(self):
     rack_controller = factory.make_RackController()
     local_ip = factory.make_ip_address()
     remote_ip = factory.make_ip_address()
     make_usable_architecture(self, arch_name=boot_module.DEFAULT_ARCH)
     observed_config = get_config(rack_controller.system_id, local_ip,
                                  remote_ip)
     self.assertEqual('enlist', observed_config['purpose'])
示例#13
0
 def test__uses_local_domain_for_enlisting_node(self):
     rack_controller = factory.make_RackController()
     # factory.make_default_ubuntu_release_bootable()
     local_ip = factory.make_ip_address()
     remote_ip = factory.make_ip_address()
     make_usable_architecture(self)
     observed_config = get_config(rack_controller.system_id, local_ip,
                                  remote_ip)
     self.assertEqual('local', observed_config.get('domain'))
示例#14
0
 def test__returns_commissioning_for_ready_node(self):
     rack_controller = factory.make_RackController()
     local_ip = factory.make_ip_address()
     remote_ip = factory.make_ip_address()
     node = self.make_node(status=NODE_STATUS.READY)
     mac = node.get_boot_interface().mac_address
     observed_config = get_config(
         rack_controller.system_id, local_ip, remote_ip, mac=mac)
     self.assertEqual('commissioning', observed_config['purpose'])
示例#15
0
 def test__returns_fs_host_as_cluster_controller(self):
     # The kernel parameter `fs_host` points to the cluster controller
     # address, which is passed over within the `local_ip` parameter.
     rack_controller = factory.make_RackController()
     local_ip = factory.make_ip_address()
     remote_ip = factory.make_ip_address()
     make_usable_architecture(self)
     observed_config = get_config(rack_controller.system_id, local_ip,
                                  remote_ip)
     self.assertEqual(local_ip, observed_config["fs_host"])
示例#16
0
 def test__returns_extra_kernel_options(self):
     rack_controller = factory.make_RackController()
     local_ip = factory.make_ip_address()
     remote_ip = factory.make_ip_address()
     extra_kernel_opts = factory.make_string()
     Config.objects.set_config('kernel_opts', extra_kernel_opts)
     make_usable_architecture(self)
     observed_config = get_config(rack_controller.system_id, local_ip,
                                  remote_ip)
     self.assertEqual(extra_kernel_opts, observed_config['extra_opts'])
示例#17
0
 def test__has_enlistment_preseed_url_for_default(self):
     rack_controller = factory.make_RackController()
     local_ip = factory.make_ip_address()
     remote_ip = factory.make_ip_address()
     factory.make_default_ubuntu_release_bootable()
     observed_config = get_config(
         rack_controller.system_id, local_ip, remote_ip)
     self.assertEqual(
         compose_enlistment_preseed_url(),
         observed_config["preseed_url"])
示例#18
0
 def test__has_preseed_url_for_known_node(self):
     rack_controller = factory.make_RackController()
     local_ip = factory.make_ip_address()
     remote_ip = factory.make_ip_address()
     node = self.make_node(status=NODE_STATUS.DEPLOYING)
     mac = node.get_boot_interface().mac_address
     observed_config = get_config(
         rack_controller.system_id, local_ip, remote_ip, mac=mac)
     self.assertEqual(
         compose_preseed_url(node, rack_controller),
         observed_config["preseed_url"])
示例#19
0
 def test__commissioning_node_uses_min_hwe_kernel_reports_missing(self):
     rack_controller = factory.make_RackController()
     local_ip = factory.make_ip_address()
     remote_ip = factory.make_ip_address()
     node = self.make_node(
         status=NODE_STATUS.COMMISSIONING,
         min_hwe_kernel="hwe-17.04")
     mac = node.get_boot_interface().mac_address
     observed_config = get_config(
         rack_controller.system_id, local_ip, remote_ip, mac=mac)
     self.assertEqual("no-such-kernel", observed_config["subarch"])
示例#20
0
 def test__enlistment_checks_default_min_hwe_kernel(self):
     rack_controller = factory.make_RackController()
     local_ip = factory.make_ip_address()
     remote_ip = factory.make_ip_address()
     arch = 'armhf'
     Config.objects.set_config('default_min_hwe_kernel', 'hwe-x')
     self.patch(boot_module, 'get_boot_filenames').return_value = (
         None, None, None)
     factory.make_default_ubuntu_release_bootable(arch)
     observed_config = get_config(
         rack_controller.system_id, local_ip, remote_ip, arch=arch)
     self.assertEqual('hwe-16.04', observed_config['subarch'])
示例#21
0
 def test__enlistment_return_generic_when_none(self):
     rack_controller = factory.make_RackController()
     local_ip = factory.make_ip_address()
     remote_ip = factory.make_ip_address()
     arch = 'armhf'
     self.patch(boot_module, 'get_boot_filenames').return_value = (
         None, None, None)
     self.patch(boot_module, 'validate_hwe_kernel').return_value = None
     factory.make_default_ubuntu_release_bootable(arch)
     observed_config = get_config(
         rack_controller.system_id, local_ip, remote_ip, arch=arch)
     self.assertEqual('generic', observed_config['subarch'])
示例#22
0
 def test__defaults_to_i386_for_default(self):
     # As a lowest-common-denominator, i386 is chosen when the node is not
     # yet known to MAAS.
     rack_controller = factory.make_RackController()
     local_ip = factory.make_ip_address()
     remote_ip = factory.make_ip_address()
     expected_arch = tuple(
         make_usable_architecture(
             self, arch_name="i386", subarch_name="hwe-16.04").split("/"))
     observed_config = get_config(
         rack_controller.system_id, local_ip, remote_ip)
     observed_arch = observed_config["arch"], observed_config["subarch"]
     self.assertEqual(expected_arch, observed_arch)
示例#23
0
 def test__uses_boot_purpose_enlistment(self):
     # test that purpose is set to "commissioning" for
     # enlistment (when node is None).
     rack_controller = factory.make_RackController()
     local_ip = factory.make_ip_address()
     remote_ip = factory.make_ip_address()
     arch = 'armhf'
     make_usable_architecture(self, arch_name=arch)
     observed_config = get_config(rack_controller.system_id,
                                  local_ip,
                                  remote_ip,
                                  arch=arch)
     self.assertEqual("commissioning", observed_config["purpose"])
示例#24
0
 def test__returns_commissioning_for_insane_state(self):
     rack_controller = factory.make_RackController()
     local_ip = factory.make_ip_address()
     remote_ip = factory.make_ip_address()
     node = self.make_node(status=NODE_STATUS.BROKEN)
     mac = node.get_boot_interface().mac_address
     observed_config = get_config(
         rack_controller.system_id, local_ip, remote_ip, mac=mac)
     # The 'purpose' of the PXE config is 'commissioning' here
     # even if the 'purpose' returned by node.get_boot_purpose
     # is 'poweroff' because MAAS needs to bring the machine
     # up in a commissioning environment in order to power
     # the machine down.
     self.assertEqual('commissioning', observed_config['purpose'])
示例#25
0
 def test__returns_ubuntu_os_series_for_ubuntu_xinstall(self):
     self.patch(boot_module, 'get_boot_filenames').return_value = (
         None, None, None)
     distro_series = random.choice(["trusty", "vivid", "wily", "xenial"])
     rack_controller = factory.make_RackController()
     local_ip = factory.make_ip_address()
     remote_ip = factory.make_ip_address()
     node = self.make_node(
         status=NODE_STATUS.DEPLOYING, osystem='ubuntu',
         distro_series=distro_series, primary_rack=rack_controller)
     mac = node.get_boot_interface().mac_address
     observed_config = get_config(
         rack_controller.system_id, local_ip, remote_ip, mac=mac)
     self.assertEqual(distro_series, observed_config["release"])
示例#26
0
 def test__splits_domain_from_node_hostname(self):
     rack_controller = factory.make_RackController()
     local_ip = factory.make_ip_address()
     remote_ip = factory.make_ip_address()
     host = factory.make_name('host')
     domainname = factory.make_name('domain')
     domain = factory.make_Domain(name=domainname)
     full_hostname = '.'.join([host, domainname])
     node = self.make_node(hostname=full_hostname, domain=domain)
     interface = node.get_boot_interface()
     mac = interface.mac_address
     observed_config = get_config(
         rack_controller.system_id, local_ip, remote_ip, mac=mac)
     self.assertEqual(host, observed_config.get('hostname'))
     self.assertEqual(domainname, observed_config.get('domain'))
示例#27
0
 def test_preseed_url_for_known_node_uses_rack_url(self):
     rack_url = 'http://%s' % factory.make_name('host')
     network = IPNetwork("10.1.1/24")
     local_ip = factory.pick_ip_in_network(network)
     remote_ip = factory.make_ip_address()
     self.patch(server_address,
                'resolve_hostname').return_value = {local_ip}
     rack_controller = factory.make_RackController(url=rack_url)
     node = self.make_node(primary_rack=rack_controller)
     mac = node.get_boot_interface().mac_address
     observed_config = get_config(rack_controller.system_id,
                                  local_ip,
                                  remote_ip,
                                  mac=mac)
     self.assertThat(observed_config["preseed_url"], StartsWith(rack_url))
示例#28
0
 def test__has_preseed_url_for_known_node(self):
     rack_controller = factory.make_RackController(url='')
     local_ip = factory.make_ip_address()
     remote_ip = factory.make_ip_address()
     node = self.make_node(status=NODE_STATUS.DEPLOYING)
     mac = node.get_boot_interface().mac_address
     self.patch(boot_module, 'get_source_address').return_value = local_ip
     observed_config = get_config(rack_controller.system_id,
                                  local_ip,
                                  remote_ip,
                                  mac=mac)
     self.assertEqual(
         compose_preseed_url(node,
                             rack_controller,
                             default_region_ip=local_ip),
         observed_config["preseed_url"])
示例#29
0
 def test__commissioning_node_uses_min_hwe_kernel(self):
     rack_controller = factory.make_RackController()
     local_ip = factory.make_ip_address()
     remote_ip = factory.make_ip_address()
     node = factory.make_Node_with_Interface_on_Subnet(
         status=NODE_STATUS.COMMISSIONING,
         min_hwe_kernel="hwe-16.10")
     arch = node.split_arch()[0]
     ubuntu = factory.make_default_ubuntu_release_bootable(arch)
     factory.make_usable_boot_resource(
         name=ubuntu.name, architecture="%s/hwe-16.10" % arch,
         kflavor='generic', rtype=BOOT_RESOURCE_TYPE.SYNCED)
     mac = node.get_boot_interface().mac_address
     observed_config = get_config(
         rack_controller.system_id, local_ip, remote_ip, mac=mac)
     self.assertEqual("hwe-16.10", observed_config["subarch"])
示例#30
0
 def test__returns_global_kernel_params_for_enlisting_node(self):
     # An 'enlisting' node means it looks like a node with details but we
     # don't know about it yet.  It should still receive the global
     # kernel options.
     rack_controller = factory.make_RackController()
     local_ip = factory.make_ip_address()
     remote_ip = factory.make_ip_address()
     value = factory.make_string()
     Config.objects.set_config("kernel_opts", value)
     architecture = make_usable_architecture(self)
     arch = architecture.split('/')[0]
     factory.make_default_ubuntu_release_bootable(arch)
     mac = factory.make_mac_address(delimiter='-')
     observed_config = get_config(
         rack_controller.system_id, local_ip, remote_ip,
         arch=arch, subarch='generic', mac=mac)
     self.assertEqual(value, observed_config['extra_opts'])