Example #1
0
 def set_net_ws(self, post_data, **kwargs):
     """
     设置子网,指派工作区
     :param kwargs:
     :return:[]
     """
     try:
         data_info = json.loads(post_data.replace("'", "\'"))
         Log(3, "set_net_ws:{}".format(kwargs.get('passport')))
         data_info['creater'] = kwargs.get('passport',
                                           {}).get('username', '')
         if not all([
                 isinstance(data_info.get('workspace'), basestring),
                 isinstance(data_info.get('cluster_name'), basestring),
                 isinstance(data_info.get('fa_ip'), basestring),
                 isinstance(data_info.get('key'), basestring),
                 isinstance(data_info.get('subnet'), basestring)
         ]):
             return Result('', 400, 'param error', 400)
         rlt = NetworkMgr.instance().set_workspace(data_info)
         if not rlt.success:
             Log(3, 'set_net_ws error:{}'.format(rlt.message))
             return Result('', rlt.result, rlt.message, 400)
         # data = {'num': len(rlt.content), 'data': rlt.content}
         return Result(rlt.content)
     except Exception as e:
         PrintStack()
         Log(1, "get_ippool error:{}".format(e.message))
         return Result('', 500, e.message, 500)
Example #2
0
    def create_subnet(self, post_data, **kwargs):
        """
        创建子网
        :param  {"cluster_name": str, "subnet": str, "netmask": int, "ipip": int(0 or 1), "nat": int(0 or 1)}
        :return: Result()  34002:网络池已经存在  31004:集群不存在
        """
        try:
            data_info = json.loads(post_data.replace("'", "\'"))
            cluster_name = data_info.get('cluster_name')
            ipip = data_info.get('ipip')
            nat = data_info.get('nat')
            subnet = data_info.get('subnet')
            subnet_num = data_info.get('subnet_num')
            if not all([
                    isinstance(cluster_name, basestring),
                    isinstance(ipip, int),
                    isinstance(nat, int),
                    isinstance(subnet, basestring),
                    isinstance(subnet_num, int)
            ]):
                return Result('', 400, 'param error', 400)

            data_info['creater'] = kwargs.get('passport',
                                              {}).get('username', '')
            if not data_info:
                return Result('', 400, 'the post data is invalid', 400)
            rlt = NetworkMgr.instance().create_subnet(data_info)
            if not rlt.success:
                return Result('', rlt.result, rlt.message, 400)
            return Result('')
        except Exception as e:
            PrintStack()
            Log(1, "create_ippool error:{}".format(e.message))
            return Result('', 500, str(e.message), 500)
Example #3
0
    def isolate(self, **kwargs):
        """
        isolate workspace
        :param kwargs:
        isolate: 0 or 1
        :return:
        """
        cluster_name = kwargs.get('cluster_name')  # st
        workspace = kwargs.get('workspace')  # str
        isolate = kwargs.get('isolate')  # int
        if cluster_name and workspace and isolate in ['0', '1']:
            return NetworkMgr.instance().is_isolated(cluster_name, workspace,
                                                     isolate)

        return Result('', 400, 'invalid param', 400)
Example #4
0
 def del_subnet(self, **kwargs):
     """
     删除一个集群下的一个子网集合
     :param kwargs: {"<cluster_name>": ""}
     :return:
     """
     try:
         rlt = NetworkMgr.instance().delelte_subnet(kwargs)
         if not rlt.success:
             Log(3, 'del_subnet error:{}'.format(rlt.message))
             return Result('', rlt.result, rlt.message, 400)
         return Result('')
     except Exception as e:
         PrintStack()
         Log(1, "del_subnet error:{}".format(e.message))
         return Result('', 500, '', 500)
Example #5
0
 def get_all_subnet(self, **kwargs):
     """
     获取所有网络池的所有子网
     :param kwargs:
     :return:
     """
     try:
         rlt = NetworkMgr.instance().get_ippool()
         if not rlt.success:
             Log(3, 'get_ippool error:{}'.format(rlt.message))
             return Result('', rlt.result, '')
         # data = {'num': len(rlt.content), 'data': rlt.content}
         return Result(rlt.content)
     except Exception as e:
         PrintStack()
         Log(1, "get_ippool error:{}".format(e.message))
         return Result('', 500, '', 500)
Example #6
0
 def get_subnet_by_workspace(self, **kwargs):
     """
     通过工作区获取子网
     :param kwargs:
     :return:
     """
     try:
         rlt = NetworkMgr.instance().get_subnet_by_ws(
             kwargs.get('workspace'))
         if not rlt.success:
             Log(3, 'subnet_workspace error:{}'.format(rlt.message))
             return Result('', rlt.result, '')
         # data = {'num': len(rlt.content), 'data': rlt.content}
         return Result(rlt.content)
     except Exception as e:
         PrintStack()
         Log(1, "get_ippool error:{}".format(e.message))
         return Result('', 500, '', 500)
Example #7
0
 def update_subnet(self, post_data, **kwargs):
     """
     编辑子网
     :param kwargs:
     :return:
     """
     try:
         data_info = json.loads(post_data.replace("'", "\'"))
         data_info['creater'] = kwargs.get('passport',
                                           {}).get('username', '')
         rlt = NetworkMgr.instance().update_subip(data_info)
         if not rlt.success:
             return Result('', rlt.result, '', 400)
         else:
             return Result('')
     except Exception as e:
         PrintStack()
         Log(1, "update_subnet error:{}".format(e.message))
         return Result('')
Example #8
0
 def subnet_ws_list(self, **kwargs):
     """
     获取集群的子网工作区: status=0
     :param kwargs:
     :return:[]
     """
     try:
         rlt = NetworkMgr.instance().get_ippool_clu(
             kwargs.get('cluster_name'), 0, kwargs.get('offset'),
             kwargs.get('limit'))
         if not rlt.success:
             Log(3, 'subnet_workspace error:{}'.format(rlt.message))
             return Result('', rlt.result, '')
         # data = {'num': len(rlt.content), 'data': rlt.content}
         return Result(rlt.content)
     except Exception as e:
         PrintStack()
         Log(1, "get_ippool error:{}".format(e.message))
         return Result('', 500, '', 500)
Example #9
0
 def get_subnet(self, **kwargs):
     """
     获取集群的子网列表  条件: is_show = 1  status=1
     :param kwargs:
     :return:[]
     """
     try:
         rlt = NetworkMgr.instance().get_ippool_clu(
             kwargs.get('cluster_name'), 1, int(kwargs.get('offset', 0)),
             kwargs.get('limit', None))
         if not rlt.success:
             Log(3, 'get_ippool error:{}'.format(rlt.message))
             return Result('', rlt.result, '')
         # data = {'num': len(rlt.content), 'data': rlt.content}
         return Result(rlt.content)
     except Exception as e:
         PrintStack()
         Log(1, "get_ippool error:{}".format(e.message))
         return Result('', 500, '', 500)
Example #10
0
    def del_net_ws(self, post_data, **kwargs):
        """
        删除子网设置和指派的工作区
        :param kwargs:
        :return:[]
        """
        try:
            data_info = json.loads(post_data.replace("'", "\'"))
            data_info['creater'] = kwargs.get('passport',
                                              {}).get('username', '')

            rlt = NetworkMgr.instance().del_subnet_ws(data_info)
            if not rlt.success:
                Log(3, 'set_net_ws error:{}'.format(rlt.message))
                return Result('', rlt.result, rlt.message, 400)
            # data = {'num': len(rlt.content), 'data': rlt.content}
            return Result(rlt.content)
        except Exception as e:
            PrintStack()
            Log(1, "get_ippool error:{}".format(e.message))
            return Result('', 500, e.message, 500)
Example #11
0
    def subnet_workspace(self, cluster_name):
        """
        获取可被指派的工作区
        :param cluster_name:
        :return:
        """
        # 集群上的所有workspace列表
        rlt = WorkSpacedb.instance().get_ns_by_cluster(cluster_name)
        if not rlt.success:
            return rlt
        w_list = []
        for i in rlt.content:
            w_list.append(i['name'])

        # 已经被指定过的workspace
        rlt = NetworkMgr.instance().get_ippool_clu(cluster_name, 0)
        if not rlt.success:
            Log(1, "workspace subnet_worksapce error:{}".format(rlt.message))
            return rlt
        for i in rlt.content:
            if i['workspace'] in w_list:
                w_list.remove(i['workspace'])
        return Result(w_list)
Example #12
0
                    # 删除etcd中workspace信息
                    WorkSpacedb.instance().delete_workspace(workspace)

                    # 删除etcd中cluster下的member
                    # http://192.168.14.9:8881/v1/usergroup/b/user

                    # 删除workspace上的confmap
                    rlt = ConfigMapdb.instance().del_by_ws(workspace)
                    if not rlt.success:
                        Log(
                            1, "workspace delete del_by_ws error:{}".format(
                                rlt.message))

                    # 删除子网工作区的指派
                    rlt = NetworkMgr.instance().get_subnet_by_ws(workspace)
                    if not rlt.success:
                        Log(
                            1, "networkmgr get_subnet_by_ws error:{}".format(
                                rlt.message))
                        continue

                    data = rlt.content
                    if data:
                        NetworkMgr.instance().del_subnet_ws({
                            "cluster_name":
                            cluster_name,
                            'fa_ip':
                            data.get('fa_ip'),
                            'key':
                            data.get('key')
Example #13
0
    def workspace_delete(self, workspace_name, workspacegroup_name,
                         cluster_name, passport):
        """
        删除workspace
        已经实现
        :param workspace_name:
        :param workspacegroup_name:
        :return:
        """
        # 检查权限
        if passport.get('ring') != 'ring0':
            rlt = self.__check_permission(passport.get('username'),
                                          cluster_name)
            if not rlt.success:
                return rlt
            if not rlt.content:
                return Result('', CLU_NOT_AUTH, 'not allowed', 400)
        # 删除应用
        # /**** deploy 模块自动检测,不需要主动去调用删除应用接口 ***/
        # gws = WorkSpacedb.instance().read_group_workspace(cluster_name)
        # Log(3, "gws:{}".format(gws.content))
        # deploy = DeployClient.instance().get_apply_num(cluster_name, gws.content)
        # if not deploy.success:
        #     Log(1, "get apply num error:{}".format(gws.message))
        # if deploy.content > 0:
        #     rlt = DeployClient.instance().delete_apply(cluster_name, workspacegroup_name, workspace_name)
        #     if not rlt.success:
        #         Log(1, "delete apply error:{}".format(rlt.message))

        # 通过apiserver删除namespace
        rlt = KubeClientMgr.instance().delete_cluster_namespace(
            cluster_name, workspace_name)
        if not rlt.success:
            Log(
                1, "kubeclient delete workspace:{} error:{}".format(
                    workspace_name, rlt.message))
            return rlt
        # 删除workspace指定的子网
        rlt = NetworkMgr.instance().get_subnet_by_ws(workspace_name)
        if rlt.success:
            data = rlt.content
            if data:
                NetworkMgr.instance().del_subnet_ws({
                    "cluster_name": cluster_name,
                    'fa_ip': data.get('fa_ip'),
                    'key': data.get('key')
                })
        else:
            Log(1, "networkmgr get_subnet_by_ws error:{}".format(rlt.message))

        # 删除etcd中configmap数据
        rlt = ConfigMapdb.instance().del_by_ws(workspace_name)
        if not rlt.success:
            if rlt.result != ETCD_KEY_NOT_FOUND_ERR:
                Log(1,
                    "workspace delete configmap error:{}".format(rlt.message))

        # 更新etcd中数据
        rlt = WorkSpacedb.instance().delete_workspace(workspace_name)
        if not rlt.success:
            Log(
                1, "workspacedb delete workspace:{} error:{}".format(
                    workspace_name, rlt.message))

        WebLog(
            3, u'删除',
            u"cluster[{}]的workspace[{}]".format(cluster_name, workspace_name),
            passport.get('username'))
        return Result('')