docs: def create_vm(vm_name, vm_config_spec, folder_object, resourcepool_object, host_object=None):
      '''
      Creates virtual machine from config spec
  
      vm_name
          Virtual machine name to be created
  
      vm_config_spec
          Virtual Machine Config Spec object
  
      folder_object
          vm Folder managed object reference
  
      resourcepool_object
          Resource pool object where the machine will be created
  
      host_object
          Host object where the machine will ne placed (optional)
  
      return
          Virtual Machine managed object reference
      '''
      try:
          if host_object and isinstance(host_object, vim.HostSystem):
              task = folder_object.CreateVM_Task(vm_config_spec,
                                                 pool=resourcepool_object,
                                                 host=host_object)
          else:
              task = folder_object.CreateVM_Task(vm_config_spec,
                                                 pool=resourcepool_object)
      except vim.fault.NoPermission as exc:
          log.exception(exc)
          raise salt.exceptions.VMwareApiError(
              'Not enough permissions. Required privilege: '
              '{}'.format(exc.privilegeId))
      except vim.fault.VimFault as exc:
          log.exception(exc)
          raise salt.exceptions.VMwareApiError(exc.msg)
      except vmodl.RuntimeFault as exc:
          log.exception(exc)
          raise salt.exceptions.VMwareRuntimeError(exc.msg)
      vm_object = wait_for_task(task, vm_name, 'CreateVM Task', 10, 'info')
      return vm_object