Fixes "Can't determine storage size if instance_path is share"
This patch fixes this problem by using the get_disk_info method from diskutils that works for both UNC paths and normal paths. Closes-Bug: #1563877 Change-Id: I99666e90c2a1fcac42d95c74deefafe8a94dccd8
This commit is contained in:
@@ -17,7 +17,6 @@
|
||||
Management class for host operations.
|
||||
"""
|
||||
import datetime
|
||||
import os
|
||||
import platform
|
||||
import time
|
||||
|
||||
@@ -58,6 +57,7 @@ LOG = logging.getLogger(__name__)
|
||||
|
||||
class HostOps(object):
|
||||
def __init__(self):
|
||||
self._diskutils = utilsfactory.get_diskutils()
|
||||
self._hostutils = utilsfactory.get_hostutils()
|
||||
self._pathutils = pathutils.PathUtils()
|
||||
self._vmutils = utilsfactory.get_vmutils()
|
||||
@@ -100,9 +100,10 @@ class HostOps(object):
|
||||
free_mem_mb = free_mem_kb // 1024
|
||||
return (total_mem_mb, free_mem_mb, total_mem_mb - free_mem_mb)
|
||||
|
||||
def _get_local_hdd_info_gb(self):
|
||||
drive = os.path.splitdrive(self._pathutils.get_instances_dir())[0]
|
||||
(size, free_space) = self._hostutils.get_volume_info(drive)
|
||||
def _get_storage_info_gb(self):
|
||||
instances_dir = self._pathutils.get_instances_dir()
|
||||
(size, free_space) = self._diskutils.get_disk_capacity(
|
||||
instances_dir)
|
||||
|
||||
total_gb = size // units.Gi
|
||||
free_gb = free_space // units.Gi
|
||||
@@ -170,7 +171,7 @@ class HostOps(object):
|
||||
|
||||
(total_hdd_gb,
|
||||
free_hdd_gb,
|
||||
used_hdd_gb) = self._get_local_hdd_info_gb()
|
||||
used_hdd_gb) = self._get_storage_info_gb()
|
||||
|
||||
cpu_info = self._get_cpu_info()
|
||||
cpu_topology = cpu_info['topology']
|
||||
|
||||
@@ -50,6 +50,7 @@ class HostOpsTestCase(test_base.HyperVBaseTestCase):
|
||||
self._hostops._api = mock.MagicMock()
|
||||
self._hostops._vmops = mock.MagicMock()
|
||||
self._hostops._pathutils = mock.MagicMock()
|
||||
self._hostops._diskutils = mock.MagicMock()
|
||||
|
||||
def test_get_cpu_info(self):
|
||||
mock_processors = mock.MagicMock()
|
||||
@@ -96,13 +97,14 @@ class HostOpsTestCase(test_base.HyperVBaseTestCase):
|
||||
self._hostops._hostutils.get_memory_info.assert_called_once_with()
|
||||
self.assertEqual((2, 1, 1), response)
|
||||
|
||||
def test_get_local_hdd_info_gb(self):
|
||||
def test_get_storage_info_gb(self):
|
||||
self._hostops._pathutils.get_instances_dir.return_value = ''
|
||||
self._hostops._hostutils.get_volume_info.return_value = (2 * units.Gi,
|
||||
1 * units.Gi)
|
||||
response = self._hostops._get_local_hdd_info_gb()
|
||||
self._hostops._diskutils.get_disk_capacity.return_value = (
|
||||
2 * units.Gi, 1 * units.Gi)
|
||||
|
||||
response = self._hostops._get_storage_info_gb()
|
||||
self._hostops._pathutils.get_instances_dir.assert_called_once_with()
|
||||
self._hostops._hostutils.get_volume_info.assert_called_once_with('')
|
||||
self._hostops._diskutils.get_disk_capacity.assert_called_once_with('')
|
||||
self.assertEqual((2, 1, 1), response)
|
||||
|
||||
def test_get_hypervisor_version(self):
|
||||
@@ -138,14 +140,14 @@ class HostOpsTestCase(test_base.HyperVBaseTestCase):
|
||||
@mock.patch.object(hostops.HostOps, '_get_cpu_info')
|
||||
@mock.patch.object(hostops.HostOps, '_get_memory_info')
|
||||
@mock.patch.object(hostops.HostOps, '_get_hypervisor_version')
|
||||
@mock.patch.object(hostops.HostOps, '_get_local_hdd_info_gb')
|
||||
@mock.patch.object(hostops.HostOps, '_get_storage_info_gb')
|
||||
@mock.patch('platform.node')
|
||||
def test_get_available_resource(self, mock_node,
|
||||
mock_get_local_hdd_info_gb,
|
||||
mock_get_storage_info_gb,
|
||||
mock_get_hypervisor_version,
|
||||
mock_get_memory_info, mock_get_cpu_info,
|
||||
mock_get_gpu_info, mock_get_numa_topology):
|
||||
mock_get_local_hdd_info_gb.return_value = (mock.sentinel.LOCAL_GB,
|
||||
mock_get_storage_info_gb.return_value = (mock.sentinel.LOCAL_GB,
|
||||
mock.sentinel.LOCAL_GB_FREE,
|
||||
mock.sentinel.LOCAL_GB_USED)
|
||||
mock_get_memory_info.return_value = (mock.sentinel.MEMORY_MB,
|
||||
|
||||
Reference in New Issue
Block a user