diff --git a/lib/vmpooler/providers/vsphere.rb b/lib/vmpooler/providers/vsphere.rb index e9160b2..f3d9e70 100644 --- a/lib/vmpooler/providers/vsphere.rb +++ b/lib/vmpooler/providers/vsphere.rb @@ -188,9 +188,27 @@ module Vmpooler template: false ) + begin + vm_target_folder = find_folder(target_folder_path, connection, target_datacenter_name) + rescue => _err + if _err =~ /Unexpected object type encountered/ + vm_target_folder = nil + else + raise(_err) + end + end + if vm_target_folder.nil? + if $config[:config]['create_folders'] == true + dc = connection.serviceInstance.find_datacenter(target_datacenter_name) + vm_target_folder = dc.vmFolder.traverse(target_folder_path, type=RbVmomi::VIM::Folder, create=true) + else + raise("Unexpected object type encountered while finding folder") + end + end + # Create the new VM new_vm_object = template_vm_object.CloneVM_Task( - folder: find_folder(target_folder_path, connection, target_datacenter_name), + folder: vm_target_folder, name: new_vmname, spec: clone_spec ).wait_for_completion