Пример #1
0
 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
Пример #2
0
 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
Пример #3
0
 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
Пример #4
0
 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