diff --git a/nova/tests/unit/virt/vmwareapi/test_vm_util.py b/nova/tests/unit/virt/vmwareapi/test_vm_util.py index ca4da56ff0b8..0c077ca9c018 100644 --- a/nova/tests/unit/virt/vmwareapi/test_vm_util.py +++ b/nova/tests/unit/virt/vmwareapi/test_vm_util.py @@ -15,6 +15,7 @@ # under the License. import collections +import fixtures import mock from oslo_utils import units @@ -1043,7 +1044,8 @@ class VMwareVMUtilTestCase(test.NoDBTestCase): vm_util.ExtraSpecs(), os_type='invalid_os_type') - self.assertRaises(vexc.VMwareDriverException, + # Because of retries timeout will be raised + self.assertRaises(fixtures.TimeoutException, vm_util.create_vm, session, self._instance, 'folder', config_spec, 'res-pool') self.assertTrue(found[0]) diff --git a/nova/virt/vmwareapi/vm_util.py b/nova/virt/vmwareapi/vm_util.py index fd295dcdfb9b..9c446efe2318 100644 --- a/nova/virt/vmwareapi/vm_util.py +++ b/nova/virt/vmwareapi/vm_util.py @@ -23,6 +23,7 @@ import copy import functools from oslo_log import log as logging +from oslo_service import loopingcall from oslo_utils import excutils from oslo_utils import units from oslo_vmware import exceptions as vexc @@ -1348,6 +1349,9 @@ def get_vmdk_adapter_type(adapter_type): return vmdk_adapter_type +@loopingcall.RetryDecorator( + max_retry_count=20, inc_sleep_time=2, max_sleep_time=20, + exceptions=(vexc.VimFaultException,)) def create_vm(session, instance, vm_folder, config_spec, res_pool_ref): """Create VM on ESX host.""" LOG.debug("Creating VM on the ESX host", instance=instance)