Esempio n. 1
0
    def create(user, organization_id, name, description=None):
        try:
            errmsg = list()
            if organization_id == None:
                errmsg.append('组织ID不能为空')
            if name == None or len(name) == 0:
                errmsg.append('团队名字不能为空')
            if len(errmsg) != 0:
                return False, ','.join(errmsg), None

            pm_list = InternalAPI.get_user_permissions_on_resource(
                user, RS_ORG, organization_id
            )

            if not pm_list[PM_CREATE_TEAM]:
                return False, ARK_ERRMSG_CONTENT[1201]

            org = Organization.objects.get(id=organization_id)
            team = Team(name=name, organization=org)

            if description is not None:
                team.description = description

            with transaction.atomic():
                team.save()
                InternalAPI.update_resource_and_roles_relationship(
                    RS_TEAM, team.id
                )

            return True, None
        except Exception as e:
            return False, str(e)
Esempio n. 2
0
    def create(user,
               organization_id,
               name,
               url,
               username,
               scm_type,
               description=None,
               branch=None,
               revision=None):
        try:
            errmsg = list()

            if organization_id == None:
                errmsg.append('组织ID不能为空')
            if name == None or len(name) == 0:
                errmsg.append('项目名字不能为空')
            if url == None or len(url) == 0:
                errmsg.append('URL不能为空')
            if username == None or len(username) == 0:
                errmsg.append('项目的用户名不能为空')
            if scm_type == None:
                errmsg.append('源码管理类型不能为空')
            if len(errmsg) != 0:
                return False, ','.join(errmsg), None

            pm_list = InternalAPI.get_user_permissions_on_resource(
                user, RS_ORG, organization_id)

            if not pm_list[PM_CREATE_PROJECT]:
                return False, ARK_ERRMSG_CONTENT[1201]

            org = Organization.objects.get(id=organization_id)

            pro = Project(name=name,
                          url=url,
                          username=username,
                          scm_type=scm_type,
                          organization=org)
            if description is not None and len(description) != 0:
                pro.description = description
            else:
                pro.description = ''

            if branch is not None and len(branch) != 0:
                pro.branch = branch
            else:
                pro.branch = 'master'

            if revision is not None:
                pro.revision = revision

            with transaction.atomic():
                pro.save()
                InternalAPI.update_resource_and_roles_relationship(
                    RS_PRO, pro.id)

            return True, None, pro
        except Exception as e:
            return False, str(e)
Esempio n. 3
0
    def create(user, organization_id, name, description=None, vars=None):
        try:
            pm_list = InternalAPI.get_user_permissions_on_resource(
                user, RS_ORG, organization_id
            )

            if not pm_list.get(PM_CREATE_INVENTORY):
                return False, ARK_ERRMSG_CONTENT[1201]

            org = Organization.objects.get(id=organization_id)

            if not name or len(name)<4 or len(name)>32:
                return False, '名称长度必须为4~32个字符'

            if Inventory.objects.filter(name=name, organization=org).exists():
                return False, '组织中已存在同名仓库'

            inv = Inventory(name=name, organization=org)

            if description is not None:
                if len(description) > 128:
                    return False, '描述长度必须小于等于128个字符'
                
                inv.description = description

            if vars is not None:
                if vars != '':
                    try:
                        tmp_vars = json.loads(vars)

                        if not isinstance(tmp_vars, dict):
                            return False, '变量必须为对象形式的数据'
                    except json.decoder.JSONDecodeError:
                        return False, '变量必须为JSON格式的数据'
                
                inv.vars = vars

            with transaction.atomic():
                inv.save()
                InternalAPI.update_resource_and_roles_relationship(
                    RS_INV, inv.id
                )

            return True, None
        except Exception as e:
            return False, str(e) if settings.DEBUG else '未知的错误'
Esempio n. 4
0
    def create(user, name, description=None):
        try:
            pm_list = InternalAPI.get_user_permissions_on_resource(
                user, RS_SYS)

            if not pm_list[PM_CREATE_ORGANIZATION]:
                return False, ARK_ERRMSG_CONTENT[1201]

            if name == None or len(name) == 0:
                return False, '组织名字不能为空'

            org = Organization(name=name)

            if description is not None:
                org.description = description

            with transaction.atomic():
                org.save()
                InternalAPI.update_resource_and_roles_relationship(
                    RS_ORG, org.id)

            return True, None, org.id
        except Exception as e:
            return False, str(e)
Esempio n. 5
0
    def create(user,
               project_id,
               inventory_id,
               name,
               playbook,
               job_tags,
               job_type,
               description=None,
               limit=None,
               forks=None,
               verbosity=None,
               extra_variables=None,
               allow_callback=None):
        try:
            # everybody can create template
            pm_list = InternalAPI.get_user_permissions_on_resource(
                user, RS_PRO, project_id)

            if not pm_list[PM_USE_PROJECT_IN_JOB]:
                return False, ARK_ERRMSG_CONTENT[1201]

            pm_list = InternalAPI.get_user_permissions_on_resource(
                user, RS_INV, inventory_id)

            if not pm_list[PM_USE_INVENTORY_IN_JOB]:
                return False, ARK_ERRMSG_CONTENT[1201]

            pro = Project.objects.get(id=project_id)
            inv = Inventory.objects.get(id=inventory_id)

            if pro.organization != inv.organization:
                return False, 'cannot create template across organizations'

            tem = JobTemplate(name=name,
                              playbook=playbook,
                              job_tags=job_tags,
                              job_type=job_type,
                              project=pro,
                              inventory=inv)

            if description is not None:
                tem.description = description

            if limit is not None:
                tem.limit = limit

            if forks is not None:
                tem.forks = forks

            if verbosity is not None:
                tem.verbosity = verbosity

            if extra_variables is not None:
                if extra_variables != '':
                    try:
                        tmp_vars = json.loads(extra_variables)

                        if not isinstance(tmp_vars, dict):
                            return False, '变量必须为对象形式的数据'
                    except json.decoder.JSONDecodeError:
                        return False, '变量必须为JSON格式的数据'

                tem.extra_variables = extra_variables

            if allow_callback is not None:
                tem.allow_callback = allow_callback

            with transaction.atomic():
                tem.save()
                InternalAPI.update_resource_and_roles_relationship(
                    RS_TEM, tem.id)

            return True, None
        except Exception as e:
            return False, str(e)