def deploy_from_image(self, si, logger, session, vcenter_data_model, data_holder, resource_context): vm_name = self.name_generator(data_holder.app_name) connection_details = self.cs_helper.get_connection_details(session=session, vcenter_resource_model=vcenter_data_model, resource_context=resource_context) VCenterDetailsFactory.set_deplyment_vcenter_params(vcenter_resource_model=vcenter_data_model, deploy_params=data_holder.image_params) image_params = self._get_deploy_image_params(data_holder.image_params, connection_details, vm_name) res = self.ovf_service.deploy_image(vcenter_data_model, image_params, logger) if res: vm_path = image_params.datacenter + '/' + \ image_params.vm_folder if hasattr(image_params, 'vm_folder') and image_params.vm_folder else '' vm = self.pv_service.find_vm_by_name(si, vm_path, vm_name) if vm: return DeployResult(vm_name=vm_name, vm_uuid=vm.config.uuid, cloud_provider_resource_name=data_holder.image_params.vcenter_name, ip_regex=data_holder.image_params.ip_regex, refresh_ip_timeout=data_holder.image_params.refresh_ip_timeout, auto_power_on=data_holder.image_params.auto_power_on, auto_power_off=data_holder.image_params.auto_power_off, wait_for_ip=data_holder.image_params.wait_for_ip, auto_delete=data_holder.image_params.auto_delete, autoload=data_holder.image_params.autoload) raise Exception('the deployed vm from image({0}/{1}) could not be found'.format(vm_path, vm_name)) raise Exception('failed deploying image')
def _deploy_a_clone(self, si, logger, app_name, template_name, other_params, vcenter_data_model, snapshot=''): # generate unique name vm_name = self.name_generator(app_name) 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=other_params.auto_power_on, snapshot=snapshot) clone_vm_result = self.pv_service.clone_vm(clone_params=params, logger=logger) if clone_vm_result.error: raise Exception(clone_vm_result.error) return DeployResult(vm_name=vm_name, vm_uuid=clone_vm_result.vm.summary.config.uuid, cloud_provider_resource_name=other_params.vcenter_name, ip_regex=other_params.ip_regex, refresh_ip_timeout=other_params.refresh_ip_timeout, auto_power_on=other_params.auto_power_on, auto_power_off=other_params.auto_power_off, wait_for_ip=other_params.wait_for_ip, auto_delete=other_params.auto_delete, autoload=other_params.autoload )
def deploy_from_image(self, si, logger, session, vcenter_data_model, data_holder, resource_context): vm_name = self.name_generator(data_holder.app_name) connection_details = self.cs_helper.get_connection_details(session=session, vcenter_resource_model=vcenter_data_model, resource_context=resource_context) VCenterDetailsFactory.set_deplyment_vcenter_params(vcenter_resource_model=vcenter_data_model, deploy_params=data_holder.image_params) image_params = self._get_deploy_image_params(data_holder.image_params, connection_details, vm_name) res = self.ovf_service.deploy_image(vcenter_data_model, image_params, logger) if res: vm_path = image_params.datacenter + '/' + \ image_params.vm_folder if hasattr(image_params, 'vm_folder') and image_params.vm_folder else '' vm = self.pv_service.find_vm_by_name(si, vm_path, vm_name) if vm: return DeployResult(vm_name=vm_name, vm_uuid=vm.config.uuid, cloud_provider_resource_name=data_holder.image_params.vcenter_name, ip_regex=data_holder.image_params.ip_regex, refresh_ip_timeout=data_holder.image_params.refresh_ip_timeout, auto_power_on=data_holder.image_params.auto_power_on, auto_power_off=data_holder.image_params.auto_power_off, wait_for_ip=data_holder.image_params.wait_for_ip, auto_delete=data_holder.image_params.auto_delete, autoload=data_holder.image_params.autoload) raise Exception('the deployed vm from image({0}/{1}) could not be found'.format(vm_path, vm_name)) raise Exception('failed deploying image')
def deploy_from_image(self, si, logger, session, vcenter_data_model, data_holder, resource_context, reservation_id, cancellation_context): vm_name = self.name_generator(data_holder.app_name, reservation_id) connection_details = ResourceConnectionDetailsRetriever.get_connection_details( session=session, vcenter_resource_model=vcenter_data_model, resource_context=resource_context) VCenterDetailsFactory.set_deplyment_vcenter_params( vcenter_resource_model=vcenter_data_model, deploy_params=data_holder.image_params) image_params = self._get_deploy_image_params(data_holder.image_params, connection_details, vm_name) if cancellation_context.is_cancelled: raise Exception("Action 'Deploy from image' was cancelled.") res = self.ovf_service.deploy_image(vcenter_data_model, image_params, logger) if res: vm_path = image_params.datacenter + '/' + \ image_params.vm_folder if hasattr(image_params, 'vm_folder') and image_params.vm_folder else '' vm = self.pv_service.find_vm_by_name(si, vm_path, vm_name) if vm: # remove a new created vm due to cancellation if cancellation_context.is_cancelled: self.pv_service.destroy_vm(vm=vm, logger=logger) raise Exception( "Action 'Deploy from image' was cancelled.") vm_details_data = self._safely_get_vm_details( vm, vm_name, vcenter_data_model, data_holder.image_params, logger) additional_data = { 'ip_regex': data_holder.image_params.ip_regex, 'refresh_ip_timeout': data_holder.image_params.refresh_ip_timeout, 'auto_power_off': convert_to_bool(data_holder.image_params.auto_power_off), 'auto_delete': convert_to_bool(data_holder.image_params.auto_delete) } return DeployAppResult( vmName=vm_name, vmUuid=vm.config.uuid, vmDetailsData=vm_details_data, deployedAppAdditionalData=additional_data) raise Exception( 'the deployed vm from image({0}/{1}) could not be found'. format(vm_path, vm_name)) raise Exception('failed deploying image')
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)})
def _prepare_vm_data_holder(self, save_action, vcenter_data_model): deploy_from_vm_model = self.resource_model_parser.convert_to_resource_model( save_action.actionParams.deploymentPathAttributes, vCenterCloneVMFromVMResourceModel) # default vm_location for saved app is actually vcenter location, we want to concentrate all our saved sandboxes in same location deploy_from_vm_model.vm_location = self.vcenter_data_model.vm_location or deploy_from_vm_model.vm_location VCenterDetailsFactory.set_deplyment_vcenter_params( vcenter_resource_model=vcenter_data_model, deploy_params=deploy_from_vm_model) new_vm_name = self._generate_cloned_vm_name(save_action) data_holder = DeployFromTemplateDetails(deploy_from_vm_model, new_vm_name) return data_holder
def deploy_from_template(self, si, logger, data_holder, resource_context): """ :param si: :param logger: :type data_holder: DeployFromTemplateDetails :type resource_context :return: """ # generate unique name vm_name = self.name_generator(data_holder.app_name) vcenter_resource_model = self.resource_model_parser.convert_to_resource_model(resource_context, VMwarevCenterResourceModel) template_resource_model = data_holder.template_resource_model VCenterDetailsFactory.set_deplyment_vcenter_params( vcenter_resource_model=vcenter_resource_model, deploy_params=template_resource_model) template_name = VMLocation.combine([template_resource_model.default_datacenter, template_resource_model.vcenter_template]) params = self.pv_service.CloneVmParameters(si=si, template_name=template_name, vm_name=vm_name, vm_folder=template_resource_model.vm_location, datastore_name=template_resource_model.vm_storage, cluster_name=template_resource_model.vm_cluster, resource_pool=template_resource_model.vm_resource_pool, power_on=template_resource_model.auto_power_on) clone_vm_result = self.pv_service.clone_vm(clone_params=params, logger=logger) if clone_vm_result.error: raise Exception(clone_vm_result.error) return DeployResult(vm_name=vm_name, vm_uuid=clone_vm_result.vm.summary.config.uuid, cloud_provider_resource_name=template_resource_model.vcenter_name, ip_regex=template_resource_model.ip_regex, refresh_ip_timeout=template_resource_model.refresh_ip_timeout, auto_power_on=template_resource_model.auto_power_on, auto_power_off=template_resource_model.auto_power_off, wait_for_ip=template_resource_model.wait_for_ip, auto_delete=template_resource_model.auto_delete, autoload=template_resource_model.autoload )