Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
水淹萌龙
kubesphere
提交
eea2bb37
K
kubesphere
项目概览
水淹萌龙
/
kubesphere
与 Fork 源项目一致
Fork自
KubeSphere / kubesphere
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
kubesphere
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
eea2bb37
编写于
4月 12, 2019
作者:
H
huanggze
提交者:
zryfish
4月 14, 2019
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
enhance log querying in a multi-tenant environment
Signed-off-by:
N
huanggze
<
“loganhuang@yunify.com”
>
上级
800800ac
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
48 addition
and
0 deletion
+48
-0
pkg/apis/tenant/v1alpha2/register.go
pkg/apis/tenant/v1alpha2/register.go
+4
-0
pkg/apiserver/tenant/tenant.go
pkg/apiserver/tenant/tenant.go
+44
-0
未找到文件。
pkg/apis/tenant/v1alpha2/register.go
浏览文件 @
eea2bb37
...
...
@@ -105,6 +105,10 @@ func addWebService(c *restful.Container) error {
Param
(
ws
.
PathParameter
(
"workspace"
,
"workspace name"
))
.
Doc
(
"Delete devops project"
)
.
Metadata
(
restfulspec
.
KeyOpenAPITags
,
tags
))
ws
.
Route
(
ws
.
GET
(
"/logging"
)
.
To
(
tenant
.
LogQuery
)
.
Doc
(
"Query cluster-level logs in a multi-tenants environment"
)
.
Metadata
(
restfulspec
.
KeyOpenAPITags
,
tags
))
c
.
Add
(
ws
)
return
nil
...
...
pkg/apiserver/tenant/tenant.go
浏览文件 @
eea2bb37
...
...
@@ -18,11 +18,15 @@
package
tenant
import
(
"fmt"
"github.com/emicklei/go-restful"
"github.com/golang/glog"
"k8s.io/api/core/v1"
rbacv1
"k8s.io/api/rbac/v1"
k8serr
"k8s.io/apimachinery/pkg/api/errors"
"k8s.io/apimachinery/pkg/util/net"
"kubesphere.io/kubesphere/pkg/apis/tenant/v1alpha1"
"kubesphere.io/kubesphere/pkg/apiserver/logging"
"kubesphere.io/kubesphere/pkg/constants"
"kubesphere.io/kubesphere/pkg/errors"
"kubesphere.io/kubesphere/pkg/models"
...
...
@@ -33,6 +37,7 @@ import (
"kubesphere.io/kubesphere/pkg/params"
"kubesphere.io/kubesphere/pkg/simple/client/kubesphere"
"net/http"
"strings"
)
func
ListWorkspaceRules
(
req
*
restful
.
Request
,
resp
*
restful
.
Response
)
{
...
...
@@ -288,3 +293,42 @@ func ListDevopsRules(req *restful.Request, resp *restful.Response) {
resp
.
WriteAsJson
(
rules
)
}
func
LogQuery
(
req
*
restful
.
Request
,
resp
*
restful
.
Response
)
{
username
:=
req
.
HeaderParameter
(
constants
.
UserNameHeader
)
mapping
,
err
:=
iam
.
GetUserWorkspaceRoleMap
(
username
)
if
err
!=
nil
{
resp
.
WriteError
(
http
.
StatusInternalServerError
,
err
)
glog
.
Errorln
(
err
)
return
}
workspaces
:=
make
([]
string
,
0
)
for
workspaceName
,
role
:=
range
mapping
{
if
role
==
fmt
.
Sprintf
(
"workspace:%s:admin"
,
workspaceName
)
{
workspaces
=
append
(
workspaces
,
workspaceName
)
}
}
// regenerate the request for log query
newUrl
:=
net
.
FormatURL
(
"http"
,
"127.0.0.1"
,
80
,
"/kapis/logging.kubesphere.io/v1alpha2/cluster"
)
values
:=
req
.
Request
.
URL
.
Query
()
rules
,
err
:=
iam
.
GetUserClusterRules
(
username
)
if
err
!=
nil
{
resp
.
WriteError
(
http
.
StatusInternalServerError
,
err
)
glog
.
Errorln
(
err
)
return
}
if
!
iam
.
RulesMatchesRequired
(
rules
,
rbacv1
.
PolicyRule
{
Verbs
:
[]
string
{
"get"
},
Resources
:
[]
string
{
"*"
},
APIGroups
:
[]
string
{
"logging.kubesphere.io"
}})
{
values
.
Set
(
"workspaces"
,
strings
.
Join
(
workspaces
,
","
))
}
newUrl
.
RawQuery
=
values
.
Encode
()
// forward the request to logging model
newHttpRequest
,
_
:=
http
.
NewRequest
(
http
.
MethodGet
,
newUrl
.
String
(),
nil
)
logging
.
LoggingQueryCluster
(
restful
.
NewRequest
(
newHttpRequest
),
resp
)
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录