diff --git a/doc/api_samples/os-hypervisors/hypervisors-show-resp.json b/doc/api_samples/os-hypervisors/hypervisors-show-resp.json index c0feecd02c..59ac652331 100644 --- a/doc/api_samples/os-hypervisors/hypervisors-show-resp.json +++ b/doc/api_samples/os-hypervisors/hypervisors-show-resp.json @@ -2,7 +2,7 @@ "hypervisor": { "cpu_info": "?", "current_workload": 0, - "disk_available_least": null, + "disk_available_least": 0, "free_disk_gb": 1028, "free_ram_mb": 7680, "hypervisor_hostname": "fake-mini", @@ -21,4 +21,4 @@ "vcpus": 1, "vcpus_used": 0 } -} \ No newline at end of file +} diff --git a/doc/api_samples/os-hypervisors/hypervisors-show-resp.xml b/doc/api_samples/os-hypervisors/hypervisors-show-resp.xml index 04feef0671..3b21782c07 100644 --- a/doc/api_samples/os-hypervisors/hypervisors-show-resp.xml +++ b/doc/api_samples/os-hypervisors/hypervisors-show-resp.xml @@ -1,4 +1,4 @@ - + - \ No newline at end of file + diff --git a/nova/tests/integrated/api_samples/os-hypervisors/hypervisors-show-resp.json.tpl b/nova/tests/integrated/api_samples/os-hypervisors/hypervisors-show-resp.json.tpl index 4eaded8d75..c9638423d2 100644 --- a/nova/tests/integrated/api_samples/os-hypervisors/hypervisors-show-resp.json.tpl +++ b/nova/tests/integrated/api_samples/os-hypervisors/hypervisors-show-resp.json.tpl @@ -2,7 +2,7 @@ "hypervisor": { "cpu_info": "?", "current_workload": 0, - "disk_available_least": null, + "disk_available_least": 0, "free_disk_gb": 1028, "free_ram_mb": 7680, "hypervisor_hostname": "fake-mini", diff --git a/nova/tests/integrated/api_samples/os-hypervisors/hypervisors-show-resp.xml.tpl b/nova/tests/integrated/api_samples/os-hypervisors/hypervisors-show-resp.xml.tpl index 336f23be29..d7af1246c9 100644 --- a/nova/tests/integrated/api_samples/os-hypervisors/hypervisors-show-resp.xml.tpl +++ b/nova/tests/integrated/api_samples/os-hypervisors/hypervisors-show-resp.xml.tpl @@ -1,4 +1,4 @@ - + diff --git a/nova/tests/virt/libvirt/test_libvirt.py b/nova/tests/virt/libvirt/test_libvirt.py index 07bd7716e1..5ed05894bd 100644 --- a/nova/tests/virt/libvirt/test_libvirt.py +++ b/nova/tests/virt/libvirt/test_libvirt.py @@ -4418,6 +4418,9 @@ class HostStateTestCase(test.TestCase): def get_cpu_info(self): return HostStateTestCase.cpu_info + def get_disk_over_committed_size_total(self): + return 0 + def get_local_gb_info(self): return {'total': 100, 'used': 20, 'free': 80} @@ -4450,22 +4453,22 @@ class HostStateTestCase(test.TestCase): hs = libvirt_driver.HostState(self.FakeConnection()) stats = hs._stats self.assertEquals(stats["vcpus"], 1) + self.assertEquals(stats["memory_mb"], 497) + self.assertEquals(stats["local_gb"], 100) self.assertEquals(stats["vcpus_used"], 0) - self.assertEquals(stats["cpu_info"], + self.assertEquals(stats["memory_mb_used"], 88) + self.assertEquals(stats["local_gb_used"], 20) + self.assertEquals(stats["hypervisor_type"], 'QEMU') + self.assertEquals(stats["hypervisor_version"], 13091) + self.assertEquals(stats["hypervisor_hostname"], 'compute1') + self.assertEquals(jsonutils.loads(stats["cpu_info"]), {"vendor": "Intel", "model": "pentium", "arch": "i686", "features": ["ssse3", "monitor", "pni", "sse2", "sse", "fxsr", "clflush", "pse36", "pat", "cmov", "mca", "pge", "mtrr", "sep", "apic"], "topology": {"cores": "1", "threads": "1", "sockets": "1"} }) - self.assertEquals(stats["disk_total"], 100) - self.assertEquals(stats["disk_used"], 20) - self.assertEquals(stats["disk_available"], 80) - self.assertEquals(stats["host_memory_total"], 497) - self.assertEquals(stats["host_memory_free"], 409) - self.assertEquals(stats["hypervisor_type"], 'QEMU') - self.assertEquals(stats["hypervisor_version"], 13091) - self.assertEquals(stats["hypervisor_hostname"], 'compute1') + self.assertEquals(stats["disk_available_least"], 80) class NWFilterFakes: diff --git a/nova/tests/virt/test_virt_drivers.py b/nova/tests/virt/test_virt_drivers.py index 50bbf43ca7..7583bafc13 100644 --- a/nova/tests/virt/test_virt_drivers.py +++ b/nova/tests/virt/test_virt_drivers.py @@ -567,16 +567,23 @@ class _VirtDriverTestCase(_FakeDriverBackendTestCase): lambda *a: None, lambda *a: None) @catch_notimplementederror - def _check_host_status_fields(self, host_status): - self.assertIn('disk_total', host_status) - self.assertIn('disk_used', host_status) - self.assertIn('host_memory_total', host_status) - self.assertIn('host_memory_free', host_status) + def _check_available_resouce_fields(self, host_status): + keys = ['vcpus', 'memory_mb', 'local_gb', 'vcpus_used', + 'memory_mb_used', 'hypervisor_type', 'hypervisor_version', + 'hypervisor_hostname', 'cpu_info', 'disk_available_least'] + for key in keys: + self.assertIn(key, host_status) @catch_notimplementederror def test_get_host_stats(self): host_status = self.connection.get_host_stats() - self._check_host_status_fields(host_status) + self._check_available_resouce_fields(host_status) + + @catch_notimplementederror + def test_get_available_resource(self): + available_resource = self.connection.get_available_resource( + 'myhostname') + self._check_available_resouce_fields(available_resource) @catch_notimplementederror def test_set_host_enabled(self): @@ -682,6 +689,7 @@ class AbstractDriverTestCase(_VirtDriverTestCase, test.TestCase): class FakeConnectionTestCase(_VirtDriverTestCase, test.TestCase): def setUp(self): self.driver_module = 'nova.virt.fake.FakeDriver' + fake.set_nodes(['myhostname']) super(FakeConnectionTestCase, self).setUp() diff --git a/nova/virt/fake.py b/nova/virt/fake.py index cbe251c2d2..817c97a798 100755 --- a/nova/virt/fake.py +++ b/nova/virt/fake.py @@ -90,21 +90,17 @@ class FakeDriver(driver.ComputeDriver): super(FakeDriver, self).__init__(virtapi) self.instances = {} self.host_status_base = { - 'host_name-description': 'Fake Host', - 'host_hostname': CONF.host, - 'host_memory_total': 8000000000, - 'host_memory_overhead': 10000000, - 'host_memory_free': 7900000000, - 'host_memory_free_computed': 7900000000, - 'host_other_config': {}, - 'host_ip_address': '192.168.1.109', - 'host_cpu_info': {}, - 'disk_available': 500000000000, - 'disk_total': 600000000000, - 'disk_used': 100000000000, - 'host_uuid': 'cedb9b39-9388-41df-8891-c5c9a0c0fe5f', - 'host_name_label': 'fake-host', + 'vcpus': 100000, + 'memory_mb': 8000000000, + 'local_gb': 600000000000, + 'vcpus_used': 0, + 'memory_mb_used': 0, + 'local_gb_used': 100000000000, + 'hypervisor_type': 'fake', + 'hypervisor_version': '1.0', 'hypervisor_hostname': CONF.host, + 'cpu_info': {}, + 'disk_available_least': 500000000000, } self._mounts = {} self._interfaces = {} @@ -354,6 +350,7 @@ class FakeDriver(driver.ComputeDriver): 'hypervisor_type': 'fake', 'hypervisor_version': '1.0', 'hypervisor_hostname': nodename, + 'disk_available_least': 0, 'cpu_info': '?'} return dic diff --git a/nova/virt/libvirt/driver.py b/nova/virt/libvirt/driver.py index a192a6f6a5..4f02db19e9 100755 --- a/nova/virt/libvirt/driver.py +++ b/nova/virt/libvirt/driver.py @@ -3090,36 +3090,7 @@ class LibvirtDriver(driver.ComputeDriver): :returns: dictionary describing resources """ - - def _get_disk_available_least(): - """Return total real disk available least size. - - The size of available disk, when block_migration command given - disk_over_commit param is FALSE. - - The size that deducted real instance disk size from the total size - of the virtual disk of all instances. - - """ - disk_free_gb = disk_info_dict['free'] - disk_over_committed = self.get_disk_over_committed_size_total() - # Disk available least size - available_least = disk_free_gb * (1024 ** 3) - disk_over_committed - return (available_least / (1024 ** 3)) - - disk_info_dict = self.get_local_gb_info() - dic = {'vcpus': self.get_vcpu_total(), - 'memory_mb': self.get_memory_mb_total(), - 'local_gb': disk_info_dict['total'], - 'vcpus_used': self.get_vcpu_used(), - 'memory_mb_used': self.get_memory_mb_used(), - 'local_gb_used': disk_info_dict['used'], - 'hypervisor_type': self.get_hypervisor_type(), - 'hypervisor_version': self.get_hypervisor_version(), - 'hypervisor_hostname': self.get_hypervisor_hostname(), - 'cpu_info': self.get_cpu_info(), - 'disk_available_least': _get_disk_available_least()} - return dic + return self.host_state.get_host_stats(refresh=True) def check_instance_shared_storage_local(self, context, instance): dirpath = libvirt_utils.get_instance_path(instance) @@ -4125,21 +4096,38 @@ class HostState(object): def update_status(self): """Retrieve status info from libvirt.""" + def _get_disk_available_least(): + """Return total real disk available least size. + + The size of available disk, when block_migration command given + disk_over_commit param is FALSE. + + The size that deducted real instance disk size from the total size + of the virtual disk of all instances. + + """ + disk_free_gb = disk_info_dict['free'] + disk_over_committed = (self.driver. + get_disk_over_committed_size_total()) + # Disk available least size + available_least = disk_free_gb * (1024 ** 3) - disk_over_committed + return (available_least / (1024 ** 3)) + LOG.debug(_("Updating host stats")) + disk_info_dict = self.driver.get_local_gb_info() data = {} data["vcpus"] = self.driver.get_vcpu_total() + data["memory_mb"] = self.driver.get_memory_mb_total() + data["local_gb"] = disk_info_dict['total'] data["vcpus_used"] = self.driver.get_vcpu_used() - data["cpu_info"] = jsonutils.loads(self.driver.get_cpu_info()) - disk_info_dict = self.driver.get_local_gb_info() - data["disk_total"] = disk_info_dict['total'] - data["disk_used"] = disk_info_dict['used'] - data["disk_available"] = disk_info_dict['free'] - data["host_memory_total"] = self.driver.get_memory_mb_total() - data["host_memory_free"] = (data["host_memory_total"] - - self.driver.get_memory_mb_used()) + data["memory_mb_used"] = self.driver.get_memory_mb_used() + data["local_gb_used"] = disk_info_dict['used'] data["hypervisor_type"] = self.driver.get_hypervisor_type() data["hypervisor_version"] = self.driver.get_hypervisor_version() data["hypervisor_hostname"] = self.driver.get_hypervisor_hostname() + data["cpu_info"] = self.driver.get_cpu_info() + data['disk_available_least'] = _get_disk_available_least() + data["supported_instances"] = \ self.driver.get_instance_capabilities()