def test_probe_and_enlist_skips_pxe_config_if_create_node_failed(self): num_servers = 1 self.configure_vmomi_api(servers=num_servers) mock_create_node = self.patch(vmware, "create_node") mock_create_node.side_effect = asynchronous( lambda *args, **kwargs: None) mock_reconfigure_vm = self.patch(FakeVmomiVM, "ReconfigVM_Task") # We need to not actually try to commission any nodes... self.patch(vmware, "commission_node") host = factory.make_hostname() username = factory.make_username() password = factory.make_username() yield deferToThread( vmware.probe_vmware_and_enlist, factory.make_username(), host, username, password, accept_all=True, ) self.assertEqual(mock_reconfigure_vm.call_count, 0)
def test_probe_and_enlist(self): num_servers = 100 self.configure_vmomi_api(servers=num_servers) mock_create_node = self.patch(vmware, "create_node") system_id = factory.make_name("system_id") mock_create_node.side_effect = asynchronous( lambda *args, **kwargs: system_id ) mock_commission_node = self.patch(vmware, "commission_node") host = factory.make_hostname() username = factory.make_username() password = factory.make_username() yield deferToThread( vmware.probe_vmware_and_enlist, factory.make_username(), host, username, password, accept_all=True, ) self.assertEqual(mock_create_node.call_count, num_servers) self.assertEqual(mock_commission_node.call_count, num_servers)
def test_get_vmware_servers(self): self.configure_vmomi_api(servers=10) servers = vmware.get_vmware_servers( factory.make_hostname(), factory.make_username(), factory.make_username(), ) self.expectThat(servers, Not(Equals({})))
def test_get_vmware_servers_empty(self): self.configure_vmomi_api(servers=0) servers = vmware.get_vmware_servers(factory.make_hostname(), factory.make_username(), factory.make_username(), port=8443, protocol='https') self.expectThat(servers, Equals({}))
def test_power_query_missing_server_raises_VMwareVMNotFound(self): self.configure_vmomi_api(servers=1, has_instance_uuid=True, has_uuid=True) host = factory.make_hostname() username = factory.make_username() password = factory.make_username() with ExpectedException(VMwareVMNotFound): vmware.power_query_vmware(host, username, password, None, None)
def test_get_server_by_name(self): mock_vmomi_api = self.configure_vmomi_api(servers=1, has_instance_uuid=False, has_uuid=True) host = factory.make_hostname() username = factory.make_username() password = factory.make_username() servers = vmware.get_vmware_servers(host, username, password) for vm_name in servers.keys(): vm = vmware._find_vm_by_uuid_or_name(mock_vmomi_api, None, vm_name) self.assertIsNotNone(vm)
def test_api_connection(self): mock_vmomi_api = self.configure_vmomi_api(servers=0) api = VMwarePyvmomiAPI(factory.make_hostname(), factory.make_username(), factory.make_username()) api.connect() self.expectThat(api.service_instance, IsInstance(FakeVmomiServiceInstance)) self.expectThat(api.is_connected(), Equals(True)) api.disconnect() self.expectThat(mock_vmomi_api.SmartConnect.called, Equals(True)) self.expectThat(mock_vmomi_api.Disconnect.called, Equals(True))
def test_power_control(self): mock_vmomi_api = self.configure_vmomi_api(servers=100) host = factory.make_hostname() username = factory.make_username() password = factory.make_username() servers = vmware.get_vmware_servers(host, username, password) # here we're grabbing indexes only available in the private mock object search_index = ( mock_vmomi_api.SmartConnect.return_value.content.searchIndex ) bios_uuids = list(search_index.vms_by_uuid) instance_uuids = list(search_index.vms_by_instance_uuid) # at least one should have a randomly-invalid state (just checking # for coverage, but since it's random, don't want to assert) vm_name = None for uuid in bios_uuids: vmware.power_query_vmware(host, username, password, vm_name, uuid) for uuid in instance_uuids: vmware.power_query_vmware(host, username, password, vm_name, uuid) for vm_name in servers: vmware.power_query_vmware(host, username, password, vm_name, None) # turn on a set of VMs, then verify they are on for uuid in bios_uuids: vmware.power_control_vmware( host, username, password, vm_name, uuid, "on" ) for uuid in bios_uuids: state = vmware.power_query_vmware( host, username, password, vm_name, uuid ) self.expectThat(state, Equals("on")) # turn off a set of VMs, then verify they are off for uuid in instance_uuids: vmware.power_control_vmware( host, username, password, vm_name, uuid, "off" ) for uuid in instance_uuids: state = vmware.power_query_vmware( host, username, password, vm_name, uuid ) self.expectThat(state, Equals("off")) self.expectThat(servers, Not(Equals({})))
def test_api_failed_connection(self): mock_vmomi_api = self.patch(vmware, 'vmomi_api') mock_vmomi_api.SmartConnect.return_value = None api = VMwarePyvmomiAPI(factory.make_hostname(), factory.make_username(), factory.make_username()) with ExpectedException(vmware.VMwareAPIConnectionFailed): api.connect() self.expectThat(api.service_instance, Is(None)) self.expectThat(api.is_connected(), Equals(False)) api.disconnect() self.expectThat(mock_vmomi_api.SmartConnect.called, Equals(True)) self.expectThat(mock_vmomi_api.Disconnect.called, Equals(True))
def test_probe_and_enlist_reconfigures_boot_order_if_create_node_ok(self): num_servers = 1 self.configure_vmomi_api(servers=num_servers) mock_create_node = self.patch(vmware, 'create_node') system_id = factory.make_name('system_id') mock_create_node.side_effect = asynchronous( lambda *args, **kwargs: system_id) mock_reconfigure_vm = self.patch(FakeVmomiVM, 'ReconfigVM_Task') # We need to not actually try to commission any nodes... self.patch(vmware, 'commission_node') host = factory.make_hostname() username = factory.make_username() password = factory.make_username() yield deferToThread(vmware.probe_vmware_and_enlist, factory.make_username(), host, username, password, accept_all=True) self.assertEqual(mock_reconfigure_vm.call_count, num_servers)