docs: def _deploy_a_clone(self, si, logger, app_name, template_name, other_params, vcenter_data_model, reservation_id,
                          cancellation_context,
                          snapshot=''):
          """
          :rtype DeployAppResult:
          """
          # generate unique name
          vm_name = self.name_generator(app_name, reservation_id)
  
          VCenterDetailsFactory.set_deplyment_vcenter_params(
              vcenter_resource_model=vcenter_data_model, deploy_params=other_params)
  
          template_name = VMLocation.combine([other_params.default_datacenter,
                                              template_name])
  
          params = self.pv_service.CloneVmParameters(si=si,
                                                     template_name=template_name,
                                                     vm_name=vm_name,
                                                     vm_folder=other_params.vm_location,
                                                     datastore_name=other_params.vm_storage,
                                                     cluster_name=other_params.vm_cluster,
                                                     resource_pool=other_params.vm_resource_pool,
                                                     power_on=False,
                                                     snapshot=snapshot)
  
          if cancellation_context.is_cancelled:
              raise Exception("Action 'Clone VM' was cancelled.")
  
          clone_vm_result = self.pv_service.clone_vm(clone_params=params, logger=logger,
                                                     cancellation_context=cancellation_context)
          if clone_vm_result.error:
              raise Exception(clone_vm_result.error)
  
          # remove a new created vm due to cancellation
          if cancellation_context.is_cancelled:
              self.pv_service.destroy_vm(vm=clone_vm_result.vm, logger=logger)
              raise Exception("Action 'Clone VM' was cancelled.")
  
          vm_details_data = self._safely_get_vm_details(clone_vm_result.vm, vm_name, vcenter_data_model, other_params,
                                                        logger)
  
          return DeployAppResult(vmName=vm_name,
                                 vmUuid=clone_vm_result.vm.summary.config.uuid,
                                 vmDetailsData=vm_details_data,
                                 deployedAppAdditionalData={'ip_regex': other_params.ip_regex,
                                                            'refresh_ip_timeout': other_params.refresh_ip_timeout,
                                                            'auto_power_off': convert_to_bool(other_params.auto_power_off),
                                                            'auto_delete': convert_to_bool(other_params.auto_delete)})