コード例 #1
0
	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
コード例 #2
0
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
コード例 #3
0
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
コード例 #4
0
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
コード例 #5
0
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
コード例 #6
0
    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
コード例 #7
0
    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()
コード例 #8
0
    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)
コード例 #9
0
    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
コード例 #10
0
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
コード例 #11
0
    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)