def do(self, workflow_dict): try: if not workflow_dict['team'] or not workflow_dict['description'] or not workflow_dict['databaseinfra']: return False LOG.info("Creating Database...") database = Database.provision(name=workflow_dict['name'], databaseinfra=workflow_dict['databaseinfra']) LOG.info("Database %s created!" % database) workflow_dict['database'] = database LOG.info("Updating database team") database.team = workflow_dict['team'] if 'project' in workflow_dict: LOG.info("Updating database project") database.project = workflow_dict['project'] LOG.info("Updating database description") database.description = workflow_dict['description'] database.save() return True except Exception, e: traceback = full_stack() workflow_dict['exceptions']['error_codes'].append(DBAAS_0003) workflow_dict['exceptions']['traceback'].append(traceback) return False
def clone_infra(plan, environment, name, team, project, description, task=None, clone=None): if not plan.provider == plan.CLOUDSTACK: dbinfra = DatabaseInfra.best_for( plan=plan, environment=environment, name=name) if dbinfra: database = Database.provision(databaseinfra=dbinfra, name=name) database.team = team database.description = description database.project = project database.save() return build_dict(databaseinfra=dbinfra, database=database, created=True) return build_dict(databaseinfra=None, created=False) workflow_dict = build_dict(name=slugify(name), plan=plan, environment=environment, steps=get_clone_settings(plan.engine_type.name), qt=get_vm_qt(plan=plan, ), dbtype=str(plan.engine_type), team=team, project=project, description=description, clone=clone ) start_workflow(workflow_dict=workflow_dict, task=task) return workflow_dict
def create_database(self, name, plan, environment, team, project, description, user=None): # register History task_history = TaskHistory.register(request=self.request, user=user) LOG.info("id: %s | task: %s | kwargs: %s | args: %s" % ( self.request.id, self.request.task, self.request.kwargs, str(self.request.args))) task_history.update_details(persist=True, details="Loading Process...") result = make_infra(plan=plan, environment=environment, name=name, task=task_history) if result['created']==False: if 'exceptions' in result: error = "\n\n".join(": ".join(err) for err in result['exceptions']['error_codes']) traceback = "\nException Traceback\n".join(result['exceptions']['traceback']) error = "{}\n{}".format(error, traceback) else: error = "There is not any infra-structure to allocate this database." task_history.update_status_for(TaskHistory.STATUS_ERROR, details=error) return database = Database.provision(name, result['databaseinfra']) database.team = team database.project = project database.description = description database.save() task_history.update_dbid(db=database) task_history.update_status_for(TaskHistory.STATUS_SUCCESS, details='Database created successfully') return
def create_database(self, name, plan, environment, team, project, description, user=None): # register History AuditRequest.new_request("create_database", self.request.args[-1], "localhost") try: task_history = TaskHistory.register(request=self.request, user=user) LOG.info("id: %s | task: %s | kwargs: %s | args: %s" % ( self.request.id, self.request.task, self.request.kwargs, str(self.request.args))) task_history.update_details(persist=True, details="Loading Process...") result = make_infra(plan=plan, environment=environment, name=name, task=task_history) if result['created']==False: if 'exceptions' in result: error = "\n".join(": ".join(err) for err in result['exceptions']['error_codes']) traceback = "\nException Traceback\n".join(result['exceptions']['traceback']) error = "{}\n{}\n{}".format(error, traceback, error) else: error = "There is not any infra-structure to allocate this database." task_history.update_status_for(TaskHistory.STATUS_ERROR, details=error) return database = Database.provision(name, result['databaseinfra']) database.team = team database.project = project database.description = description database.save() task_history.update_dbid(db=database) from util import laas #laas.register_database_laas(database) task_history.update_status_for(TaskHistory.STATUS_SUCCESS, details='Database created successfully') return except Exception, e: traceback = full_stack() LOG.error("Ops... something went wrong: %s" % e) LOG.error(traceback) if 'database' in locals() and database.id: task_history.update_status_for(TaskHistory.STATUS_WARNING, details=traceback) else: if 'result' in locals() and result['created']: destroy_infra(databaseinfra = result['databaseinfra']) task_history.update_status_for(TaskHistory.STATUS_ERROR, details=traceback) return
def clone_infra( plan, environment, name, team, project, description, subscribe_to_email_events, task=None, clone=None ): if not plan.provider == plan.CLOUDSTACK: infra = DatabaseInfra.best_for( plan=plan, environment=environment, name=name) if infra: database = Database.provision(databaseinfra=infra, name=name) database.team = team database.description = description database.project = project database.save() return build_dict( databaseinfra=infra, database=database, created=True, subscribe_to_email_events=subscribe_to_email_events ) return build_dict( databaseinfra=None, created=False, subscribe_to_email_events=subscribe_to_email_events ) workflow_dict = build_dict( name=slugify(name), plan=plan, environment=environment, steps=get_clone_settings( plan.replication_topology.class_path ), qt=get_vm_qt(plan=plan), dbtype=str(plan.engine_type), team=team, project=project, description=description, clone=clone, subscribe_to_email_events=subscribe_to_email_events, ) start_workflow(workflow_dict=workflow_dict, task=task) return workflow_dict
def do(self, workflow_dict): try: if 'team' not in workflow_dict or \ 'description' not in workflow_dict or \ 'databaseinfra' not in workflow_dict: return False LOG.info("Creating Database...") database = Database.provision( name=workflow_dict['name'], databaseinfra=workflow_dict['databaseinfra']) LOG.info("Database %s created!" % database) LOG.info("Updating database team") database.team = workflow_dict['team'] if 'project' in workflow_dict: LOG.info("Updating database project") database.project = workflow_dict['project'] LOG.info("Updating database description") database.description = workflow_dict['description'] database.save() workflow_dict['database'] = database driver = workflow_dict['databaseinfra'].get_driver() if driver.check_status(): LOG.info("Database is ok...") database.status = database.ALIVE database.save() return True except Exception: traceback = full_stack() workflow_dict['exceptions']['error_codes'].append(DBAAS_0003) workflow_dict['exceptions']['traceback'].append(traceback) return False
def do(self): creating = self.creating if creating.database: return database = Database.provision(creating.name, self.infra) database.team = creating.team database.description = creating.description database.subscribe_to_email_events = creating.subscribe_to_email_events database.is_protected = creating.is_protected database.description = creating.description if creating.project: database.project = creating.project database.save() creating.database = database creating.save()
def do(self): creating = self.create if creating.database: return database = Database.provision(creating.name, self.infra) database.team = creating.team database.description = creating.description database.subscribe_to_email_events = creating.subscribe_to_email_events database.is_protected = creating.is_protected if creating.project: database.project = creating.project database.save() creating.database = database creating.save() database.pin_task(self.create.task)
def do(self, workflow_dict): try: if 'team' not in workflow_dict or \ 'description' not in workflow_dict or \ 'databaseinfra' not in workflow_dict: return False LOG.info("Creating Database...") database = Database.provision(name=workflow_dict['name'], databaseinfra=workflow_dict['databaseinfra']) LOG.info("Database %s created!" % database) LOG.info("Updating database team") database.team = workflow_dict['team'] if 'project' in workflow_dict: LOG.info("Updating database project") database.project = workflow_dict['project'] LOG.info("Updating database description") database.description = workflow_dict['description'] database.save() workflow_dict['database'] = database driver = workflow_dict['databaseinfra'].get_driver() if driver.check_status(): LOG.info("Database is ok...") database.status=database.ALIVE database.save() return True except Exception: traceback = full_stack() workflow_dict['exceptions']['error_codes'].append(DBAAS_0003) workflow_dict['exceptions']['traceback'].append(traceback) return False
def make_infra( plan, environment, name, team, project, description, task=None, ): if not plan.provider == plan.CLOUDSTACK: dbinfra = DatabaseInfra.best_for(plan=plan, environment=environment, name=name) if dbinfra: database = Database.provision(databaseinfra=dbinfra, name=name) database.team = team database.description = description database.project = project database.save() return build_dict(databaseinfra=dbinfra, database=database, created=True) return build_dict(databaseinfra=None, created=False) workflow_dict = build_dict( name=slugify(name), plan=plan, environment=environment, steps=get_deploy_settings(plan.engine_type.name), qt=get_vm_qt(plan=plan, ), dbtype=str(plan.engine_type), team=team, project=project, description=description, ) start_workflow(workflow_dict=workflow_dict, task=task) return workflow_dict
def do(self): if self.step_manager.database: return origin_database = self.step_manager.origin_database database = Database.provision(self.step_manager.name, self.infra) database.team = origin_database.team database.description = origin_database.description database.subscribe_to_email_events = ( origin_database.subscribe_to_email_events) database.is_protected = origin_database.is_protected if origin_database.project: database.project = origin_database.project database.save() self.step_manager.database = database self.step_manager.save() database.pin_task(self.step_manager.task)