def create_cloud_service(self, context): """ :type :param : context: azure_key_id, experiment_id, template_unit If cloud service not exist in azure subscription, then create it Else reuse cloud service in azure subscription :return: """ args_context = self.__generate_create_cloud_service_context(context) if self.azure_adapter.cloud_service_exists(context.azure_key_id, args_context.name): self.__check_cloud_service_in_db(args_context) else: self.__check_creation_requirement(args_context) # delete old azure cloud service in database, cascade delete old azure deployment, # old azure virtual machine and old azure end point delete_azure_cloud_service(args_context.name) self.__create_cloud_service(args_context) # make sure cloud service is created self.__check_exist_after_creation(args_context) # create virtual machine self.scheduler.add_once(feature='azure_vm_service', method='create_virtual_machine', context=context, seconds=3) return True
def __check_creation_requirement(self, context): # avoid name already taken by other azure subscription if not self.azure_adapter.check_hosted_service_name_availability(context.azure_key_id, context.name).result: m = '%s [%s] name not available' % (AZURE_RESOURCE_TYPE.CLOUD_SERVICE, context.name) commit_azure_log(context.experiment_id, ALOperation.CREATE_CLOUD_SERVICE, ALStatus.FAIL, m, 1) self.log.error(m) raise BadRequest("cloud service name not available") # avoid no available subscription remained if self.subscription.get_available_cloud_service_count(context.azure_key_id) < 1: m = '%s [%s] subscription not enough' % (AZURE_RESOURCE_TYPE.CLOUD_SERVICE, context.name) commit_azure_log(context.experiment_id, ALOperation.CREATE_CLOUD_SERVICE, ALStatus.FAIL, m, 2) self.log.error(m) raise BadRequest("cloud service subscription not enough") delete_azure_cloud_service(context.name)
def __check_creation_requirement(self, context): # avoid name already taken by other azure subscription if not self.azure_adapter.check_hosted_service_name_availability( context.azure_key_id, context.name).result: m = '%s [%s] name not available' % ( AZURE_RESOURCE_TYPE.CLOUD_SERVICE, context.name) commit_azure_log(context.experiment_id, ALOperation.CREATE_CLOUD_SERVICE, ALStatus.FAIL, m, 1) self.log.error(m) raise BadRequest("cloud service name not available") # avoid no available subscription remained if self.subscription.get_available_cloud_service_count( context.azure_key_id) < 1: m = '%s [%s] subscription not enough' % ( AZURE_RESOURCE_TYPE.CLOUD_SERVICE, context.name) commit_azure_log(context.experiment_id, ALOperation.CREATE_CLOUD_SERVICE, ALStatus.FAIL, m, 2) self.log.error(m) raise BadRequest("cloud service subscription not enough") delete_azure_cloud_service(context.name)