@@ -227,7 +227,7 @@ def find_obj_by_path(self, si, path, name, type_name):
227227 '#searches for the specific vm in the folder'
228228 return search_index .FindChild (look_in , name )
229229
230- def find_dvs_by_path (self ,si , path ):
230+ def find_dvs_by_path (self , si , path ):
231231 """
232232 Finds vm in the vCenter or returns "None"
233233 :param si: pyvmomi 'ServiceInstance'
@@ -312,35 +312,36 @@ def get_network_by_full_name(self, si, default_network_full_name):
312312 path , name = get_path_and_name (default_network_full_name )
313313 return self .find_network_by_name (si , path , name ) if name else None
314314
315- def get_obj (self , content , vimtype , name ):
315+ def get_obj (self , content , vimtypes , name ):
316316 """
317317 Return an object by name for a specific type, if name is None the
318318 first found object is returned
319319
320320 :param content: pyvmomi content object
321- :param vimtype : the type of object too search
321+ :param vimtypes : the types of object to search
322322 :param name: the object name to return
323323 """
324324 obj = None
325325
326- container = self ._get_all_objects_by_type (content , vimtype )
326+ for vim_type in vimtypes :
327+ container = self ._get_all_objects_by_type (content , vim_type )
327328
328- # If no name was given will return the first object from list of a objects matching the given vimtype type
329- for c in container .view :
330- if name :
331- if c .name == name :
329+ # If no name was given will return the first object from list of a objects matching the given vimtype type
330+ for c in container .view :
331+ if name :
332+ if c .name == name :
333+ obj = c
334+ break
335+ else :
332336 obj = c
333337 break
334- else :
335- obj = c
336- break
337338
338339 return obj
339340
340341 @staticmethod
341342 def _get_all_objects_by_type (content , vimtype ):
342343 container = content .viewManager .CreateContainerView (
343- content .rootFolder , vimtype , True )
344+ content .rootFolder , vimtype , True )
344345 return container
345346
346347 @staticmethod
@@ -418,6 +419,7 @@ def clone_vm(self, clone_params, logger, cancellation_context):
418419 :param clone_params: CloneVmParameters =
419420 :param logger:
420421 """
422+
421423 result = self .CloneVmResult ()
422424
423425 if not isinstance (clone_params .si , self .vim .ServiceInstance ):
@@ -446,7 +448,7 @@ def clone_vm(self, clone_params, logger, cancellation_context):
446448
447449 snapshot = self ._get_snapshot (clone_params , template )
448450
449- resource_pool , host = self ._get_resource_pool (datacenter .name , clone_params )
451+ resource_pool , host = self .get_resource_pool (datacenter .name , clone_params )
450452
451453 if not resource_pool and not host :
452454 raise ValueError ('The specifed host, cluster or resource pool could not be found' )
@@ -522,11 +524,11 @@ def _get_datastore(self, clone_params):
522524 name = parts [len (parts ) - 1 ]
523525 if name :
524526 datastore = self .get_obj (clone_params .si .content ,
525- [self .vim .Datastore ],
527+ [[ self .vim .Datastore ] ],
526528 name )
527529 if not datastore :
528530 datastore = self .get_obj (clone_params .si .content ,
529- [self .vim .StoragePod ],
531+ [[ self .vim .StoragePod ] ],
530532 name )
531533 if datastore :
532534 datastore = sorted (datastore .childEntity ,
@@ -537,12 +539,14 @@ def _get_datastore(self, clone_params):
537539 raise ValueError ('Could not find Datastore: "{0}"' .format (clone_params .datastore_name ))
538540 return datastore
539541
540- def _get_resource_pool (self , datacenter_name , clone_params ):
542+ def get_resource_pool (self , datacenter_name , clone_params ):
541543
542- resource_full_path = '{0}/{1}/{2}' .format (datacenter_name ,
543- clone_params .cluster_name ,
544- clone_params .resource_pool )
545- obj = self .get_folder (clone_params .si , resource_full_path )
544+ obj_name = '{0}/{1}/{2}' .format (datacenter_name ,
545+ clone_params .cluster_name ,
546+ clone_params .resource_pool ).rstrip ('/' ).split ('/' )[- 1 ]
547+ # obj = self.get_folder(clone_params.si, resource_full_path)
548+ accepted_types = [[vim .ResourcePool ], [vim .ClusterComputeResource ], [vim .HostSystem ]]
549+ obj = self .get_obj (clone_params .si .content , accepted_types , obj_name )
546550
547551 resource_pool = None
548552 host = None
@@ -738,7 +742,8 @@ def get_vm_full_path(self, si, vm):
738742 folder_name = folder .name
739743 folder_parent = folder .parent
740744
741- while folder_parent and folder_parent .name and folder_parent != si .content .rootFolder and not isinstance (folder_parent , vim .Datacenter ):
745+ while folder_parent and folder_parent .name and folder_parent != si .content .rootFolder and not isinstance (
746+ folder_parent , vim .Datacenter ):
742747 folder_name = folder_parent .name + '/' + folder_name
743748 try :
744749 folder_parent = folder_parent .parent
@@ -754,4 +759,4 @@ def get_vm_full_path(self, si, vm):
754759def vm_has_no_vnics (vm ):
755760 # Is there any network device on vm
756761 return next ((False for device in vm .config .hardware .device
757- if isinstance (device , vim .vm .device .VirtualEthernetCard ) and hasattr (device , 'macAddress' )), True )
762+ if isinstance (device , vim .vm .device .VirtualEthernetCard ) and hasattr (device , 'macAddress' )), True )
0 commit comments