def start_virtual_machine(self, experiment_id, template_unit): """ 0. Prerequisites: a. virtual machine exist in both azure and database b. input parameters are correct :param experiment_id: :param template_unit: :return: """ commit_azure_log(experiment_id, ALOperation.START_VIRTUAL_MACHINE, ALStatus.START) cloud_service_name = template_unit.get_cloud_service_name() deployment_slot = template_unit.get_deployment_slot() deployment_name = self.service.get_deployment_name( cloud_service_name, deployment_slot) deployment = self.service.get_deployment_by_name( cloud_service_name, deployment_name) virtual_machine_name = self.VIRTUAL_MACHINE_NAME_BASE % ( template_unit.get_virtual_machine_name(), experiment_id) status = self.service.get_virtual_machine_instance_status( deployment, virtual_machine_name) if status == AVMStatus.READY_ROLE: db_status = get_azure_virtual_machine_status( cloud_service_name, deployment_name, virtual_machine_name) if db_status == status: m = self.START_VIRTUAL_MACHINE_INFO[1] % ( AZURE_RESOURCE_TYPE.VIRTUAL_MACHINE, virtual_machine_name, AZURE_FORMATION) commit_azure_log(experiment_id, ALOperation.START_VIRTUAL_MACHINE, ALStatus.END, m, 1) else: m = self.START_VIRTUAL_MACHINE_INFO[2] % ( AZURE_RESOURCE_TYPE.VIRTUAL_MACHINE, virtual_machine_name, AZURE_FORMATION) self.__start_virtual_machine_helper(experiment_id, template_unit) commit_azure_log(experiment_id, ALOperation.START_VIRTUAL_MACHINE, ALStatus.END, m, 2) self.log.debug(m) else: try: result = self.service.start_virtual_machine( cloud_service_name, deployment_name, virtual_machine_name) except Exception as e: m = self.START_VIRTUAL_MACHINE_ERROR[0] % ( AZURE_RESOURCE_TYPE.VIRTUAL_MACHINE, virtual_machine_name, e.message) commit_azure_log(experiment_id, ALOperation.START_VIRTUAL_MACHINE, ALStatus.FAIL, 0) self.log.error(e) return False # query async operation status run_job(MDL_CLS_FUNC[2], (self.azure_key_id, ), (result.request_id, MDL_CLS_FUNC[22], (self.azure_key_id, ), (experiment_id, template_unit), MDL_CLS_FUNC[23], (self.azure_key_id, ), (experiment_id, template_unit))) return True
def start_virtual_machine(self, experiment_id, template_unit): """ 0. Prerequisites: a. virtual machine exist in both azure and database b. input parameters are correct :param experiment_id: :param template_unit: :return: """ commit_azure_log(experiment_id, ALOperation.START_VIRTUAL_MACHINE, ALStatus.START) cloud_service_name = template_unit.get_cloud_service_name() deployment_slot = template_unit.get_deployment_slot() deployment_name = self.service.get_deployment_name(cloud_service_name, deployment_slot) deployment = self.service.get_deployment_by_name(cloud_service_name, deployment_name) virtual_machine_name = self.VIRTUAL_MACHINE_NAME_BASE % (template_unit.get_virtual_machine_name(), experiment_id) status = self.service.get_virtual_machine_instance_status(deployment, virtual_machine_name) if status == AVMStatus.READY_ROLE: db_status = get_azure_virtual_machine_status(cloud_service_name, deployment_name, virtual_machine_name) if db_status == status: m = self.START_VIRTUAL_MACHINE_INFO[1] % ( AZURE_RESOURCE_TYPE.VIRTUAL_MACHINE, virtual_machine_name, AZURE_FORMATION) commit_azure_log(experiment_id, ALOperation.START_VIRTUAL_MACHINE, ALStatus.END, m, 1) else: m = self.START_VIRTUAL_MACHINE_INFO[2] % ( AZURE_RESOURCE_TYPE.VIRTUAL_MACHINE, virtual_machine_name, AZURE_FORMATION) self.__start_virtual_machine_helper(experiment_id, template_unit) commit_azure_log(experiment_id, ALOperation.START_VIRTUAL_MACHINE, ALStatus.END, m, 2) self.log.debug(m) else: try: result = self.service.start_virtual_machine(cloud_service_name, deployment_name, virtual_machine_name) except Exception as e: m = self.START_VIRTUAL_MACHINE_ERROR[0] % ( AZURE_RESOURCE_TYPE.VIRTUAL_MACHINE, virtual_machine_name, e.message) commit_azure_log(experiment_id, ALOperation.START_VIRTUAL_MACHINE, ALStatus.FAIL, 0) self.log.error(e) return False # query async operation status run_job(MDL_CLS_FUNC[2], (self.azure_key_id, ), (result.request_id, MDL_CLS_FUNC[22], (self.azure_key_id, ), (experiment_id, template_unit), MDL_CLS_FUNC[23], (self.azure_key_id, ), (experiment_id, template_unit))) return True
def stop_virtual_machine(self, experiment_id, template_unit, action): """ 0. Prerequisites: a. virtual machine exist in both azure and database b. input parameters are correct :param experiment_id: :param template_unit: :param action: AVMStatus.STOPPED or AVMStatus.STOPPED_DEALLOCATED :return: """ commit_azure_log(experiment_id, ALOperation.STOP_VIRTUAL_MACHINE, ALStatus.START) # need_status: AVMStatus.STOPPED_VM or AVMStatus.STOPPED_DEALLOCATED need_status = AVMStatus.STOPPED_VM if action == AVMStatus.STOPPED else AVMStatus.STOPPED_DEALLOCATED cloud_service_name = template_unit.get_cloud_service_name() deployment_slot = template_unit.get_deployment_slot() deployment_name = self.service.get_deployment_name(cloud_service_name, deployment_slot) deployment = self.service.get_deployment_by_name(cloud_service_name, deployment_name) virtual_machine_name = self.VIRTUAL_MACHINE_NAME_BASE % (template_unit.get_virtual_machine_name(), experiment_id) now_status = self.service.get_virtual_machine_instance_status(deployment, virtual_machine_name) if need_status == AVMStatus.STOPPED_VM and now_status == AVMStatus.STOPPED_DEALLOCATED: m = self.STOP_VIRTUAL_MACHINE_ERROR[1] % (AZURE_RESOURCE_TYPE.VIRTUAL_MACHINE, virtual_machine_name, AVMStatus.STOPPED_VM, AVMStatus.STOPPED_DEALLOCATED) commit_azure_log(experiment_id, ALOperation.STOP_VIRTUAL_MACHINE, ALStatus.FAIL, m, 1) self.log.error(m) return False elif need_status == now_status: db_status = get_azure_virtual_machine_status(cloud_service_name, deployment_name, virtual_machine_name) if db_status == need_status: m = self.STOP_VIRTUAL_MACHINE_INFO[1] % (AZURE_RESOURCE_TYPE.VIRTUAL_MACHINE, virtual_machine_name, need_status, AZURE_FORMATION) commit_azure_log(experiment_id, ALOperation.STOP_VIRTUAL_MACHINE, ALStatus.END, m, 1) else: m = self.STOP_VIRTUAL_MACHINE_INFO[2] % (AZURE_RESOURCE_TYPE.VIRTUAL_MACHINE, virtual_machine_name, need_status, AZURE_FORMATION) self.__stop_virtual_machine_helper(experiment_id, template_unit, need_status) commit_azure_log(experiment_id, ALOperation.STOP_VIRTUAL_MACHINE, ALStatus.END, m, 2) self.log.debug(m) else: try: result = self.service.stop_virtual_machine(cloud_service_name, deployment_name, virtual_machine_name, action) except Exception as e: m = self.STOP_VIRTUAL_MACHINE_ERROR[0] % ( AZURE_RESOURCE_TYPE.VIRTUAL_MACHINE, virtual_machine_name, e.message) commit_azure_log(experiment_id, ALOperation.STOP_VIRTUAL_MACHINE, ALStatus.FAIL, 0) self.log.error(e) return False # query async operation status run_job(MDL_CLS_FUNC[2], (self.azure_key_id, ), (result.request_id, MDL_CLS_FUNC[18], (self.azure_key_id, ), (experiment_id, template_unit, need_status), MDL_CLS_FUNC[19], (self.azure_key_id, ), (experiment_id, template_unit, need_status))) return True
def stop_virtual_machine(self, experiment_id, template_unit, action): """ 0. Prerequisites: a. virtual machine exist in both azure and database b. input parameters are correct :param experiment_id: :param template_unit: :param action: AVMStatus.STOPPED or AVMStatus.STOPPED_DEALLOCATED :return: """ commit_azure_log(experiment_id, ALOperation.STOP_VIRTUAL_MACHINE, ALStatus.START) # need_status: AVMStatus.STOPPED_VM or AVMStatus.STOPPED_DEALLOCATED need_status = AVMStatus.STOPPED_VM if action == AVMStatus.STOPPED else AVMStatus.STOPPED_DEALLOCATED cloud_service_name = template_unit.get_cloud_service_name() deployment_slot = template_unit.get_deployment_slot() deployment_name = self.service.get_deployment_name( cloud_service_name, deployment_slot) deployment = self.service.get_deployment_by_name( cloud_service_name, deployment_name) virtual_machine_name = self.VIRTUAL_MACHINE_NAME_BASE % ( template_unit.get_virtual_machine_name(), experiment_id) now_status = self.service.get_virtual_machine_instance_status( deployment, virtual_machine_name) if need_status == AVMStatus.STOPPED_VM and now_status == AVMStatus.STOPPED_DEALLOCATED: m = self.STOP_VIRTUAL_MACHINE_ERROR[1] % ( AZURE_RESOURCE_TYPE.VIRTUAL_MACHINE, virtual_machine_name, AVMStatus.STOPPED_VM, AVMStatus.STOPPED_DEALLOCATED) commit_azure_log(experiment_id, ALOperation.STOP_VIRTUAL_MACHINE, ALStatus.FAIL, m, 1) self.log.error(m) return False elif need_status == now_status: db_status = get_azure_virtual_machine_status( cloud_service_name, deployment_name, virtual_machine_name) if db_status == need_status: m = self.STOP_VIRTUAL_MACHINE_INFO[1] % ( AZURE_RESOURCE_TYPE.VIRTUAL_MACHINE, virtual_machine_name, need_status, AZURE_FORMATION) commit_azure_log(experiment_id, ALOperation.STOP_VIRTUAL_MACHINE, ALStatus.END, m, 1) else: m = self.STOP_VIRTUAL_MACHINE_INFO[2] % ( AZURE_RESOURCE_TYPE.VIRTUAL_MACHINE, virtual_machine_name, need_status, AZURE_FORMATION) self.__stop_virtual_machine_helper(experiment_id, template_unit, need_status) commit_azure_log(experiment_id, ALOperation.STOP_VIRTUAL_MACHINE, ALStatus.END, m, 2) self.log.debug(m) else: try: result = self.service.stop_virtual_machine( cloud_service_name, deployment_name, virtual_machine_name, action) except Exception as e: m = self.STOP_VIRTUAL_MACHINE_ERROR[0] % ( AZURE_RESOURCE_TYPE.VIRTUAL_MACHINE, virtual_machine_name, e.message) commit_azure_log(experiment_id, ALOperation.STOP_VIRTUAL_MACHINE, ALStatus.FAIL, 0) self.log.error(e) return False # query async operation status run_job( MDL_CLS_FUNC[2], (self.azure_key_id, ), (result.request_id, MDL_CLS_FUNC[18], (self.azure_key_id, ), (experiment_id, template_unit, need_status), MDL_CLS_FUNC[19], (self.azure_key_id, ), (experiment_id, template_unit, need_status))) return True