44from cloudshell .cp .vcenter .common .utilites .io import get_path_and_name
55from cloudshell .cp .vcenter .common .vcenter .vm_location import VMLocation
66from cloudshell .cp .vcenter .common .utilites .common_utils import str2bool
7-
7+ from cloudshell . cp . vcenter . common . vcenter . task_waiter import SynchronousTaskWaiter
88
99class pyVmomiService :
1010 # region consts
@@ -18,9 +18,14 @@ class pyVmomiService:
1818
1919 # endregion
2020
21- def __init__ (self , connect , disconnect , vim_import = None ):
21+ def __init__ (self , connect , disconnect , task_waiter , vim_import = None ):
22+ """
23+ :param SynchronousTaskWaiter task_waiter:
24+ :return:
25+ """
2226 self .pyvmomi_connect = connect
2327 self .pyvmomi_disconnect = disconnect
28+ self .task_waiter = task_waiter
2429 if vim_import is None :
2530 from pyVmomi import vim
2631 self .vim = vim
@@ -316,26 +321,6 @@ def get_all_items_in_vcenter(si, type_filter, root=None):
316321 container = si .content .viewManager .CreateContainerView (container = root , recursive = True )
317322 return [item for item in container .view if not type_filter or isinstance (item , type_filter )]
318323
319- def wait_for_task (self , task , logger ):
320- """ wait for a vCenter task to finish
321- :param task:
322- :param logger:
323- """
324- task_done = False
325- while not task_done :
326- if task .info .state == 'success' :
327- logger .info ("Task succeeded: " + task .info .state )
328- return task .info .result
329-
330- if task .info .state == 'error' :
331- multi_msg = ''
332- if task .info .error .faultMessage :
333- multi_msg = ', ' .join ([err .message for err in task .info .error .faultMessage ])
334- multi_msg = multi_msg if multi_msg else task .info .error .msg
335- logger .info (multi_msg )
336- raise Exception (multi_msg )
337- time .sleep (1 )
338-
339324 class CloneVmParameters :
340325 """
341326 This is clone_vm method params object
@@ -455,7 +440,7 @@ def clone_vm(self, clone_params, logger):
455440 logger .info ("cloning VM..." )
456441 try :
457442 task = template .Clone (folder = dest_folder , name = clone_params .vm_name , spec = clone_spec )
458- vm = self .wait_for_task (task , logger )
443+ vm = self .task_waiter . wait_for_task (task = task , logger = logger , action_name = 'Clone VM' )
459444
460445 except vim .fault .NoPermission as error :
461446 logger .error ("vcenter returned - no permission: {0}" .format (error ))
@@ -546,12 +531,12 @@ def destroy_vm(self, vm, logger):
546531 logger .info (("The current powerState is: {0}. Attempting to power off {1}"
547532 .format (vm .runtime .powerState , vm .name )))
548533 task = vm .PowerOffVM_Task ()
549- self .wait_for_task (task , logger )
534+ self .task_waiter . wait_for_task (task = task , logger = logger , action_name = "Power Off Before Destroy" )
550535
551536 logger .info (("Destroying VM {0}" .format (vm .name )))
552537
553538 task = vm .Destroy_Task ()
554- return self .wait_for_task (task , logger )
539+ return self .task_waiter . wait_for_task (task = task , logger = logger , action_name = "Destroy VM" )
555540
556541 def destroy_vm_by_name (self , si , vm_name , vm_path , logger ):
557542 """
0 commit comments