diff --git a/nova/tests/hyperv/stubs/test_hypervapi.HyperVAPITestCase.test_get_available_resource_multiprocessing.p.gz b/nova/tests/hyperv/stubs/test_hypervapi.HyperVAPITestCase.test_get_available_resource_multiprocessing.p.gz new file mode 100644 index 00000000000..3f50a76e03e Binary files /dev/null and b/nova/tests/hyperv/stubs/test_hypervapi.HyperVAPITestCase.test_get_available_resource_multiprocessing.p.gz differ diff --git a/nova/tests/hyperv/stubs/test_hypervapi.HyperVAPITestCase.test_get_available_resource_shutil.p.gz b/nova/tests/hyperv/stubs/test_hypervapi.HyperVAPITestCase.test_get_available_resource_shutil.p.gz new file mode 100644 index 00000000000..35126ad4be3 Binary files /dev/null and b/nova/tests/hyperv/stubs/test_hypervapi.HyperVAPITestCase.test_get_available_resource_shutil.p.gz differ diff --git a/nova/tests/hyperv/stubs/test_hypervapi.HyperVAPITestCase.test_get_available_resource_wmi.p.gz b/nova/tests/hyperv/stubs/test_hypervapi.HyperVAPITestCase.test_get_available_resource_wmi.p.gz new file mode 100644 index 00000000000..1a34569d15b Binary files /dev/null and b/nova/tests/hyperv/stubs/test_hypervapi.HyperVAPITestCase.test_get_available_resource_wmi.p.gz differ diff --git a/nova/tests/test_hypervapi.py b/nova/tests/test_hypervapi.py index 49a411862c8..0ae65feafc4 100644 --- a/nova/tests/test_hypervapi.py +++ b/nova/tests/test_hypervapi.py @@ -19,6 +19,7 @@ """ import os +import platform import shutil import sys import uuid @@ -151,6 +152,11 @@ def tearDown(self): finally: super(HyperVAPITestCase, self).tearDown() + def test_get_available_resource(self): + dic = self._conn.get_available_resource() + + self.assertEquals(dic['hypervisor_hostname'], platform.node()) + def test_list_instances(self): num_vms = self._hypervutils.get_vm_count() instances = self._conn.list_instances() diff --git a/nova/virt/hyperv/driver.py b/nova/virt/hyperv/driver.py index c8a2e299e72..f385640f509 100644 --- a/nova/virt/hyperv/driver.py +++ b/nova/virt/hyperv/driver.py @@ -120,8 +120,8 @@ def get_volume_connector(self, instance): def poll_rescued_instances(self, timeout): pass - def update_available_resource(self, context, host): - self._vmops.update_available_resource(context, host) + def get_available_resource(self): + return self._vmops.get_available_resource() def update_host_status(self): """See xenapi_conn.py implementation.""" diff --git a/nova/virt/hyperv/vmops.py b/nova/virt/hyperv/vmops.py index aa8d34e127b..bb0e294c010 100644 --- a/nova/virt/hyperv/vmops.py +++ b/nova/virt/hyperv/vmops.py @@ -20,6 +20,7 @@ """ import multiprocessing import os +import platform import uuid from nova import db @@ -555,23 +556,17 @@ def _get_hypervisor_version(self): LOG.info(_('Windows version: %s ') % version) return version - def update_available_resource(self, context, host): - """Updates compute manager resource info on ComputeNode table. + def get_available_resource(self): + """Retrieve resource info. - This method is called as an periodic tasks and is used only - in live migration currently. + This method is called when nova-compute launches, and + as part of a periodic task. - :param ctxt: security context - :param host: hostname that compute manager is currently running + :returns: dictionary describing resources """ + LOG.info(_('get_available_resource called')) - try: - service_ref = db.service_get_all_compute_by_host(context, host)[0] - except exception.NotFound: - raise exception.ComputeServiceUnavailable(host=host) - - # Updating host information # TODO(alexpilotti) implemented cpu_info dic = {'vcpus': self._get_vcpu_total(), 'memory_mb': self._get_memory_mb_total(), @@ -581,17 +576,10 @@ def update_available_resource(self, context, host): 'local_gb_used': self._get_local_gb_used(), 'hypervisor_type': "hyperv", 'hypervisor_version': self._get_hypervisor_version(), - 'cpu_info': "unknown", - 'service_id': service_ref['id'], - 'disk_available_least': 1} - - compute_node_ref = service_ref['compute_node'] - if not compute_node_ref: - LOG.info(_('Compute_service record created for %s ') % host) - db.compute_node_create(context, dic) - else: - LOG.info(_('Compute_service record updated for %s ') % host) - db.compute_node_update(context, compute_node_ref[0]['id'], dic) + 'hypervisor_hostname': platform.node(), + 'cpu_info': 'unknown'} + + return dic def _cache_image(self, fn, target, fname, cow=False, Size=None, *args, **kwargs):