VMware: correct logic to pass ESXi SSL thumbprint (#47600)
Due to refactoring of task_error and wait_for_task method, SSL thumbprint was lost in error message. This fixes the retry mechanism of AddHost task. Fixes: #47563 Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>
This commit is contained in:
parent
524c5190b8
commit
e7c83d6aa9
2 changed files with 12 additions and 4 deletions
|
@ -32,7 +32,8 @@ from ansible.module_utils.basic import env_fallback
|
||||||
|
|
||||||
|
|
||||||
class TaskError(Exception):
|
class TaskError(Exception):
|
||||||
pass
|
def __init__(self, *args, **kwargs):
|
||||||
|
super(TaskError, self).__init__(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
def wait_for_task(task, max_backoff=64, timeout=3600):
|
def wait_for_task(task, max_backoff=64, timeout=3600):
|
||||||
|
@ -56,12 +57,15 @@ def wait_for_task(task, max_backoff=64, timeout=3600):
|
||||||
return True, task.info.result
|
return True, task.info.result
|
||||||
if task.info.state == vim.TaskInfo.State.error:
|
if task.info.state == vim.TaskInfo.State.error:
|
||||||
error_msg = task.info.error
|
error_msg = task.info.error
|
||||||
|
host_thumbprint = None
|
||||||
try:
|
try:
|
||||||
error_msg = error_msg.msg
|
error_msg = error_msg.msg
|
||||||
|
if hasattr(task.info.error, 'thumbprint'):
|
||||||
|
host_thumbprint = task.info.error.thumbprint
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
pass
|
pass
|
||||||
finally:
|
finally:
|
||||||
raise_from(TaskError(error_msg), task.info.error)
|
raise_from(TaskError(error_msg, host_thumbprint), task.info.error)
|
||||||
if task.info.state in [vim.TaskInfo.State.running, vim.TaskInfo.State.queued]:
|
if task.info.state in [vim.TaskInfo.State.running, vim.TaskInfo.State.queued]:
|
||||||
sleep_time = min(2 ** failure_counter + randint(1, 1000) / 1000, max_backoff)
|
sleep_time = min(2 ** failure_counter + randint(1, 1000) / 1000, max_backoff)
|
||||||
time.sleep(sleep_time)
|
time.sleep(sleep_time)
|
||||||
|
|
|
@ -259,10 +259,14 @@ class VMwareHost(PyVmomi):
|
||||||
return success, result
|
return success, result
|
||||||
except TaskError as task_error_exception:
|
except TaskError as task_error_exception:
|
||||||
task_error = task_error_exception.args[0]
|
task_error = task_error_exception.args[0]
|
||||||
if self.esxi_ssl_thumbprint == '' and isinstance(task_error, vim.fault.SSLVerifyFault):
|
if len(task_error_exception.args) == 2:
|
||||||
|
host_thumbprint = task_error_exception.args[1]
|
||||||
|
else:
|
||||||
|
host_thumbprint = None
|
||||||
|
if self.esxi_ssl_thumbprint == '' and host_thumbprint:
|
||||||
# User has not specified SSL Thumbprint for ESXi host,
|
# User has not specified SSL Thumbprint for ESXi host,
|
||||||
# try to grab it using SSLVerifyFault exception
|
# try to grab it using SSLVerifyFault exception
|
||||||
host_connect_spec.sslThumbprint = task_error.thumbprint
|
host_connect_spec.sslThumbprint = host_thumbprint
|
||||||
else:
|
else:
|
||||||
self.module.fail_json(msg="Failed to add host %s to vCenter: %s" % (self.esxi_hostname,
|
self.module.fail_json(msg="Failed to add host %s to vCenter: %s" % (self.esxi_hostname,
|
||||||
to_native(task_error)))
|
to_native(task_error)))
|
||||||
|
|
Loading…
Reference in a new issue