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)
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)
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)
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)
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)
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)
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('')
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)
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)
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)
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)
# 删除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')
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('')