mirror of
https://github.com/saltstack/salt.git
synced 2025-04-17 10:10:20 +00:00
Merge pull request #29213 from rallytime/vmware_utils_wait_for_task
Move _wait_for_task func from vmware cloud to vmware utils
This commit is contained in:
commit
6c2e62f7d4
2 changed files with 63 additions and 40 deletions
|
@ -676,28 +676,6 @@ def _wait_for_ip(vm_ref, max_wait):
|
|||
return False
|
||||
|
||||
|
||||
def _wait_for_task(task, vm_name, task_type, sleep_seconds=1, log_level='debug'):
|
||||
time_counter = 0
|
||||
starttime = time.time()
|
||||
while task.info.state == 'running' or task.info.state == 'queued':
|
||||
if time_counter % sleep_seconds == 0:
|
||||
message = "[ {0} ] Waiting for {1} task to finish [{2} s]".format(vm_name, task_type, time_counter)
|
||||
if log_level == 'info':
|
||||
log.info(message)
|
||||
else:
|
||||
log.debug(message)
|
||||
time.sleep(1.0 - ((time.time() - starttime) % 1.0))
|
||||
time_counter += 1
|
||||
if task.info.state == 'success':
|
||||
message = "[ {0} ] Successfully completed {1} task in {2} seconds".format(vm_name, task_type, time_counter)
|
||||
if log_level == 'info':
|
||||
log.info(message)
|
||||
else:
|
||||
log.debug(message)
|
||||
else:
|
||||
raise Exception(task.info.error)
|
||||
|
||||
|
||||
def _wait_for_host(host_ref, task_type, sleep_seconds=5, log_level='debug'):
|
||||
time_counter = 0
|
||||
starttime = time.time()
|
||||
|
@ -1005,7 +983,11 @@ def _upg_tools_helper(vm, reboot=False):
|
|||
else:
|
||||
status = 'Only Linux and Windows guests are currently supported'
|
||||
return status
|
||||
_wait_for_task(task, vm.name, "tools upgrade", 5, "info")
|
||||
salt.utils.vmware.wait_for_task(task,
|
||||
vm.name,
|
||||
'tools upgrade',
|
||||
sleep_seconds=5,
|
||||
log_level='info')
|
||||
except Exception as exc:
|
||||
log.error(
|
||||
'Error while upgrading VMware tools on VM {0}: {1}'.format(
|
||||
|
@ -1680,7 +1662,7 @@ def start(name, call=None):
|
|||
try:
|
||||
log.info('Starting VM {0}'.format(name))
|
||||
task = vm["object"].PowerOn()
|
||||
_wait_for_task(task, name, "power on")
|
||||
salt.utils.vmware.wait_for_task(task, name, 'power on')
|
||||
except Exception as exc:
|
||||
log.error(
|
||||
'Error while powering on VM {0}: {1}'.format(
|
||||
|
@ -1727,7 +1709,7 @@ def stop(name, call=None):
|
|||
try:
|
||||
log.info('Stopping VM {0}'.format(name))
|
||||
task = vm["object"].PowerOff()
|
||||
_wait_for_task(task, name, "power off")
|
||||
salt.utils.vmware.wait_for_task(task, name, 'power off')
|
||||
except Exception as exc:
|
||||
log.error(
|
||||
'Error while powering off VM {0}: {1}'.format(
|
||||
|
@ -1778,7 +1760,7 @@ def suspend(name, call=None):
|
|||
try:
|
||||
log.info('Suspending VM {0}'.format(name))
|
||||
task = vm["object"].Suspend()
|
||||
_wait_for_task(task, name, "suspend")
|
||||
salt.utils.vmware.wait_for_task(task, name, 'suspend')
|
||||
except Exception as exc:
|
||||
log.error(
|
||||
'Error while suspending VM {0}: {1}'.format(
|
||||
|
@ -1825,7 +1807,7 @@ def reset(name, call=None):
|
|||
try:
|
||||
log.info('Resetting VM {0}'.format(name))
|
||||
task = vm["object"].Reset()
|
||||
_wait_for_task(task, name, "reset")
|
||||
salt.utils.vmware.wait_for_task(task, name, 'reset')
|
||||
except Exception as exc:
|
||||
log.error(
|
||||
'Error while resetting VM {0}: {1}'.format(
|
||||
|
@ -1927,7 +1909,7 @@ def destroy(name, call=None):
|
|||
try:
|
||||
log.info('Powering Off VM {0}'.format(name))
|
||||
task = vm["object"].PowerOff()
|
||||
_wait_for_task(task, name, "power off")
|
||||
salt.utils.vmware.wait_for_task(task, name, 'power off')
|
||||
except Exception as exc:
|
||||
log.error(
|
||||
'Error while powering off VM {0}: {1}'.format(
|
||||
|
@ -1941,7 +1923,7 @@ def destroy(name, call=None):
|
|||
try:
|
||||
log.info('Destroying VM {0}'.format(name))
|
||||
task = vm["object"].Destroy_Task()
|
||||
_wait_for_task(task, name, "destroy")
|
||||
salt.utils.vmware.wait_for_task(task, name, 'destroy')
|
||||
except Exception as exc:
|
||||
log.error(
|
||||
'Error while destroying VM {0}: {1}'.format(
|
||||
|
@ -2253,11 +2235,11 @@ def create(vm_):
|
|||
|
||||
# apply storage DRS recommendations
|
||||
task = si.content.storageResourceManager.ApplyStorageDrsRecommendation_Task(recommended_datastores.recommendations[0].key)
|
||||
_wait_for_task(task, vm_name, "apply storage DRS recommendations", 5, 'info')
|
||||
salt.utils.vmware.wait_for_task(task, vm_name, 'apply storage DRS recommendations', 5, 'info')
|
||||
else:
|
||||
# clone the VM/template
|
||||
task = object_ref.Clone(folder_ref, vm_name, clone_spec)
|
||||
_wait_for_task(task, vm_name, "clone", 5, 'info')
|
||||
salt.utils.vmware.wait_for_task(task, vm_name, 'clone', 5, 'info')
|
||||
except Exception as exc:
|
||||
err_msg = 'Error creating {0}: {1}'.format(vm_['name'], exc)
|
||||
log.error(
|
||||
|
@ -2831,7 +2813,7 @@ def enter_maintenance_mode(kwargs=None, call=None):
|
|||
|
||||
try:
|
||||
task = host_ref.EnterMaintenanceMode(timeout=0, evacuatePoweredOffVms=True)
|
||||
_wait_for_task(task, host_name, "enter maintenance mode", 1)
|
||||
salt.utils.vmware.wait_for_task(task, host_name, 'enter maintenance mode')
|
||||
except Exception as exc:
|
||||
log.error(
|
||||
'Error while moving host system {0} in maintenance mode: {1}'.format(
|
||||
|
@ -2876,7 +2858,7 @@ def exit_maintenance_mode(kwargs=None, call=None):
|
|||
|
||||
try:
|
||||
task = host_ref.ExitMaintenanceMode(timeout=0)
|
||||
_wait_for_task(task, host_name, "exit maintenance mode", 1)
|
||||
salt.utils.vmware.wait_for_task(task, host_name, 'exit maintenance mode')
|
||||
except Exception as exc:
|
||||
log.error(
|
||||
'Error while moving host system {0} out of maintenance mode: {1}'.format(
|
||||
|
@ -3029,7 +3011,7 @@ def create_snapshot(name, kwargs=None, call=None):
|
|||
|
||||
try:
|
||||
task = vm_ref.CreateSnapshot(snapshot_name, desc, memdump, quiesce)
|
||||
_wait_for_task(task, name, "create snapshot", 5, 'info')
|
||||
salt.utils.vmware.wait_for_task(task, name, 'create snapshot', 5, 'info')
|
||||
except Exception as exc:
|
||||
log.error(
|
||||
'Error while creating snapshot of {0}: {1}'.format(
|
||||
|
@ -3083,7 +3065,7 @@ def revert_to_snapshot(name, kwargs=None, call=None):
|
|||
|
||||
try:
|
||||
task = vm_ref.RevertToCurrentSnapshot(suppressPowerOn=suppress_power_on)
|
||||
_wait_for_task(task, name, "revert to snapshot", 5, 'info')
|
||||
salt.utils.vmware.wait_for_task(task, name, 'revert to snapshot', 5, 'info')
|
||||
|
||||
except Exception as exc:
|
||||
log.error(
|
||||
|
@ -3127,7 +3109,7 @@ def remove_all_snapshots(name, kwargs=None, call=None):
|
|||
|
||||
try:
|
||||
task = vm_ref.RemoveAllSnapshots()
|
||||
_wait_for_task(task, name, "remove snapshots", 5, 'info')
|
||||
salt.utils.vmware.wait_for_task(task, name, 'remove snapshots', 5, 'info')
|
||||
except Exception as exc:
|
||||
log.error(
|
||||
'Error while removing snapshots on VM {0}: {1}'.format(
|
||||
|
@ -3273,7 +3255,7 @@ def add_host(kwargs=None, call=None):
|
|||
if datacenter_name:
|
||||
task = datacenter_ref.hostFolder.AddStandaloneHost(spec=spec, addConnected=True)
|
||||
ret = 'added host system to datacenter {0}'.format(datacenter_name)
|
||||
_wait_for_task(task, host_name, "add host system", 5, 'info')
|
||||
salt.utils.vmware.wait_for_task(task, host_name, 'add host system', 5, 'info')
|
||||
except Exception as exc:
|
||||
if isinstance(exc, vim.fault.SSLVerifyFault):
|
||||
log.error('Authenticity of the host\'s SSL certificate is not verified')
|
||||
|
@ -3327,7 +3309,7 @@ def remove_host(kwargs=None, call=None):
|
|||
else:
|
||||
# This is a host system that is part of a Cluster
|
||||
task = host_ref.Destroy_Task()
|
||||
_wait_for_task(task, host_name, "remove host", 1, 'info')
|
||||
salt.utils.vmware.wait_for_task(task, host_name, 'remove host', log_level='info')
|
||||
except Exception as exc:
|
||||
log.error(
|
||||
'Error while removing host {0}: {1}'.format(
|
||||
|
@ -3376,7 +3358,7 @@ def connect_host(kwargs=None, call=None):
|
|||
|
||||
try:
|
||||
task = host_ref.ReconnectHost_Task()
|
||||
_wait_for_task(task, host_name, "connect host", 5, 'info')
|
||||
salt.utils.vmware.wait_for_task(task, host_name, 'connect host', 5, 'info')
|
||||
except Exception as exc:
|
||||
log.error(
|
||||
'Error while connecting host {0}: {1}'.format(
|
||||
|
@ -3425,7 +3407,7 @@ def disconnect_host(kwargs=None, call=None):
|
|||
|
||||
try:
|
||||
task = host_ref.DisconnectHost_Task()
|
||||
_wait_for_task(task, host_name, "disconnect host", 1, 'info')
|
||||
salt.utils.vmware.wait_for_task(task, host_name, 'disconnect host', log_level='info')
|
||||
except Exception as exc:
|
||||
log.error(
|
||||
'Error while disconnecting host {0}: {1}'.format(
|
||||
|
|
|
@ -14,6 +14,7 @@ ESX, ESXi, and vCenter servers.
|
|||
from __future__ import absolute_import
|
||||
import atexit
|
||||
import logging
|
||||
import time
|
||||
|
||||
# Import Salt Libs
|
||||
from salt.exceptions import SaltSystemExit
|
||||
|
@ -377,3 +378,43 @@ def list_vapps(service_instance):
|
|||
The Service Instance Object from which to obtain vApps.
|
||||
'''
|
||||
return list_objects(service_instance, vim.VirtualApp)
|
||||
|
||||
|
||||
def wait_for_task(task, instance_name, task_type, sleep_seconds=1, log_level='debug'):
|
||||
'''
|
||||
Waits for a task to be completed.
|
||||
|
||||
task
|
||||
The task to wait for.
|
||||
|
||||
instance_name
|
||||
The name of the ESXi host, vCenter Server, or Virtual Machine that the task is being run on.
|
||||
|
||||
task_type
|
||||
The type of task being performed. Useful information for debugging purposes.
|
||||
|
||||
sleep_seconds
|
||||
The number of seconds to wait before querying the task again. Defaults to ``1`` second.
|
||||
|
||||
log_level
|
||||
The level at which to log task information. Default is ``debug``, but ``info`` is also supported.
|
||||
'''
|
||||
time_counter = 0
|
||||
start_time = time.time()
|
||||
while task.info.state == 'running' or task.info.state == 'queued':
|
||||
if time_counter % sleep_seconds == 0:
|
||||
msg = '[ {0} ] Waiting for {1} task to finish [{2} s]'.format(instance_name, task_type, time_counter)
|
||||
if log_level == 'info':
|
||||
log.info(msg)
|
||||
else:
|
||||
log.debug(msg)
|
||||
time.sleep(1.0 - ((time.time() - start_time) % 1.0))
|
||||
time_counter += 1
|
||||
if task.info.state == 'success':
|
||||
msg = '[ {0} ] Successfully completed {1} task in {2} seconds'.format(instance_name, task_type, time_counter)
|
||||
if log_level == 'info':
|
||||
log.info(msg)
|
||||
else:
|
||||
log.debug(msg)
|
||||
else:
|
||||
raise Exception(task.info.error)
|
||||
|
|
Loading…
Add table
Reference in a new issue