Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
水淹萌龙
kubesphere
提交
2e040095
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看板
未验证
提交
2e040095
编写于
6月 02, 2020
作者:
S
shaowenchen
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
set devops log level to 8
Signed-off-by:
N
shaowenchen
<
mail@chenshaowen.com
>
上级
845887a3
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
22 addition
and
22 deletion
+22
-22
pkg/controller/devopscredential/devopscredential_controller.go
...ontroller/devopscredential/devopscredential_controller.go
+3
-3
pkg/controller/devopsproject/devopsproject_controller.go
pkg/controller/devopsproject/devopsproject_controller.go
+13
-13
pkg/controller/pipeline/pipeline_controller.go
pkg/controller/pipeline/pipeline_controller.go
+6
-6
未找到文件。
pkg/controller/devopscredential/devopscredential_controller.go
浏览文件 @
2e040095
...
@@ -228,7 +228,7 @@ func (c *Controller) syncHandler(key string) error {
...
@@ -228,7 +228,7 @@ func (c *Controller) syncHandler(key string) error {
if
_
,
ok
:=
copySecret
.
Annotations
[
devopsv1alpha3
.
CredentialAutoSyncAnnoKey
];
ok
{
if
_
,
ok
:=
copySecret
.
Annotations
[
devopsv1alpha3
.
CredentialAutoSyncAnnoKey
];
ok
{
_
,
err
:=
c
.
devopsClient
.
UpdateCredentialInProject
(
nsName
,
copySecret
)
_
,
err
:=
c
.
devopsClient
.
UpdateCredentialInProject
(
nsName
,
copySecret
)
if
err
!=
nil
{
if
err
!=
nil
{
klog
.
Error
(
err
,
fmt
.
Sprintf
(
"failed to update secret %s "
,
key
))
klog
.
V
(
8
)
.
Info
(
err
,
fmt
.
Sprintf
(
"failed to update secret %s "
,
key
))
return
err
return
err
}
}
}
}
...
@@ -238,7 +238,7 @@ func (c *Controller) syncHandler(key string) error {
...
@@ -238,7 +238,7 @@ func (c *Controller) syncHandler(key string) error {
// Finalizers processing logic
// Finalizers processing logic
if
sliceutil
.
HasString
(
copySecret
.
ObjectMeta
.
Finalizers
,
devopsv1alpha3
.
CredentialFinalizerName
)
{
if
sliceutil
.
HasString
(
copySecret
.
ObjectMeta
.
Finalizers
,
devopsv1alpha3
.
CredentialFinalizerName
)
{
if
_
,
err
:=
c
.
devopsClient
.
DeleteCredentialInProject
(
nsName
,
secret
.
Name
);
err
!=
nil
{
if
_
,
err
:=
c
.
devopsClient
.
DeleteCredentialInProject
(
nsName
,
secret
.
Name
);
err
!=
nil
{
klog
.
Error
(
err
,
fmt
.
Sprintf
(
"failed to delete secret %s in devops"
,
key
))
klog
.
V
(
8
)
.
Info
(
err
,
fmt
.
Sprintf
(
"failed to delete secret %s in devops"
,
key
))
return
err
return
err
}
}
copySecret
.
ObjectMeta
.
Finalizers
=
sliceutil
.
RemoveString
(
copySecret
.
ObjectMeta
.
Finalizers
,
func
(
item
string
)
bool
{
copySecret
.
ObjectMeta
.
Finalizers
=
sliceutil
.
RemoveString
(
copySecret
.
ObjectMeta
.
Finalizers
,
func
(
item
string
)
bool
{
...
@@ -250,7 +250,7 @@ func (c *Controller) syncHandler(key string) error {
...
@@ -250,7 +250,7 @@ func (c *Controller) syncHandler(key string) error {
if
!
reflect
.
DeepEqual
(
secret
,
copySecret
)
{
if
!
reflect
.
DeepEqual
(
secret
,
copySecret
)
{
_
,
err
=
c
.
client
.
CoreV1
()
.
Secrets
(
nsName
)
.
Update
(
copySecret
)
_
,
err
=
c
.
client
.
CoreV1
()
.
Secrets
(
nsName
)
.
Update
(
copySecret
)
if
err
!=
nil
{
if
err
!=
nil
{
klog
.
Error
(
err
,
fmt
.
Sprintf
(
"failed to update secret %s "
,
key
))
klog
.
V
(
8
)
.
Info
(
err
,
fmt
.
Sprintf
(
"failed to update secret %s "
,
key
))
return
err
return
err
}
}
}
}
...
...
pkg/controller/devopsproject/devopsproject_controller.go
浏览文件 @
2e040095
...
@@ -185,7 +185,7 @@ func (c *Controller) syncHandler(key string) error {
...
@@ -185,7 +185,7 @@ func (c *Controller) syncHandler(key string) error {
klog
.
Info
(
fmt
.
Sprintf
(
"devopsproject '%s' in work queue no longer exists "
,
key
))
klog
.
Info
(
fmt
.
Sprintf
(
"devopsproject '%s' in work queue no longer exists "
,
key
))
return
nil
return
nil
}
}
klog
.
Error
(
err
,
fmt
.
Sprintf
(
"could not get devopsproject %s "
,
key
))
klog
.
V
(
8
)
.
Info
(
err
,
fmt
.
Sprintf
(
"could not get devopsproject %s "
,
key
))
return
err
return
err
}
}
copyProject
:=
project
.
DeepCopy
()
copyProject
:=
project
.
DeepCopy
()
...
@@ -200,14 +200,14 @@ func (c *Controller) syncHandler(key string) error {
...
@@ -200,14 +200,14 @@ func (c *Controller) syncHandler(key string) error {
if
project
.
Status
.
AdminNamespace
!=
""
{
if
project
.
Status
.
AdminNamespace
!=
""
{
ns
,
err
:=
c
.
namespaceLister
.
Get
(
project
.
Status
.
AdminNamespace
)
ns
,
err
:=
c
.
namespaceLister
.
Get
(
project
.
Status
.
AdminNamespace
)
if
err
!=
nil
&&
!
errors
.
IsNotFound
(
err
)
{
if
err
!=
nil
&&
!
errors
.
IsNotFound
(
err
)
{
klog
.
Error
(
err
,
fmt
.
Sprintf
(
"faild to get namespace"
))
klog
.
V
(
8
)
.
Info
(
err
,
fmt
.
Sprintf
(
"faild to get namespace"
))
return
err
return
err
}
else
if
errors
.
IsNotFound
(
err
)
{
}
else
if
errors
.
IsNotFound
(
err
)
{
// if admin ns is not found, clean project status, rerun reconcile
// if admin ns is not found, clean project status, rerun reconcile
copyProject
.
Status
.
AdminNamespace
=
""
copyProject
.
Status
.
AdminNamespace
=
""
_
,
err
:=
c
.
kubesphereClient
.
DevopsV1alpha3
()
.
DevOpsProjects
()
.
Update
(
copyProject
)
_
,
err
:=
c
.
kubesphereClient
.
DevopsV1alpha3
()
.
DevOpsProjects
()
.
Update
(
copyProject
)
if
err
!=
nil
{
if
err
!=
nil
{
klog
.
Error
(
err
,
fmt
.
Sprintf
(
"failed to update project %s "
,
key
))
klog
.
V
(
8
)
.
Info
(
err
,
fmt
.
Sprintf
(
"failed to update project %s "
,
key
))
return
err
return
err
}
}
c
.
enqueueDevOpsProject
(
key
)
c
.
enqueueDevOpsProject
(
key
)
...
@@ -222,13 +222,13 @@ func (c *Controller) syncHandler(key string) error {
...
@@ -222,13 +222,13 @@ func (c *Controller) syncHandler(key string) error {
copyNs
:=
ns
.
DeepCopy
()
copyNs
:=
ns
.
DeepCopy
()
err
:=
controllerutil
.
SetControllerReference
(
copyProject
,
copyNs
,
scheme
.
Scheme
)
err
:=
controllerutil
.
SetControllerReference
(
copyProject
,
copyNs
,
scheme
.
Scheme
)
if
err
!=
nil
{
if
err
!=
nil
{
klog
.
Error
(
err
,
fmt
.
Sprintf
(
"failed to set ownerreference %s "
,
key
))
klog
.
V
(
8
)
.
Info
(
err
,
fmt
.
Sprintf
(
"failed to set ownerreference %s "
,
key
))
return
err
return
err
}
}
copyNs
.
Labels
[
constants
.
DevOpsProjectLabelKey
]
=
project
.
Name
copyNs
.
Labels
[
constants
.
DevOpsProjectLabelKey
]
=
project
.
Name
_
,
err
=
c
.
client
.
CoreV1
()
.
Namespaces
()
.
Update
(
copyNs
)
_
,
err
=
c
.
client
.
CoreV1
()
.
Namespaces
()
.
Update
(
copyNs
)
if
err
!=
nil
{
if
err
!=
nil
{
klog
.
Error
(
err
,
fmt
.
Sprintf
(
"failed to update ns %s "
,
key
))
klog
.
V
(
8
)
.
Info
(
err
,
fmt
.
Sprintf
(
"failed to update ns %s "
,
key
))
return
err
return
err
}
}
}
}
...
@@ -238,7 +238,7 @@ func (c *Controller) syncHandler(key string) error {
...
@@ -238,7 +238,7 @@ func (c *Controller) syncHandler(key string) error {
namespaces
,
err
:=
c
.
namespaceLister
.
List
(
namespaces
,
err
:=
c
.
namespaceLister
.
List
(
labels
.
SelectorFromSet
(
labels
.
Set
{
constants
.
DevOpsProjectLabelKey
:
project
.
Name
}))
labels
.
SelectorFromSet
(
labels
.
Set
{
constants
.
DevOpsProjectLabelKey
:
project
.
Name
}))
if
err
!=
nil
{
if
err
!=
nil
{
klog
.
Error
(
err
,
fmt
.
Sprintf
(
"failed to list ns %s "
,
key
))
klog
.
V
(
8
)
.
Info
(
err
,
fmt
.
Sprintf
(
"failed to list ns %s "
,
key
))
return
err
return
err
}
}
// if there is no ns, generate new one
// if there is no ns, generate new one
...
@@ -246,7 +246,7 @@ func (c *Controller) syncHandler(key string) error {
...
@@ -246,7 +246,7 @@ func (c *Controller) syncHandler(key string) error {
ns
:=
c
.
generateNewNamespace
(
project
)
ns
:=
c
.
generateNewNamespace
(
project
)
ns
,
err
:=
c
.
client
.
CoreV1
()
.
Namespaces
()
.
Create
(
ns
)
ns
,
err
:=
c
.
client
.
CoreV1
()
.
Namespaces
()
.
Create
(
ns
)
if
err
!=
nil
{
if
err
!=
nil
{
klog
.
Error
(
err
,
fmt
.
Sprintf
(
"failed to create ns %s "
,
key
))
klog
.
V
(
8
)
.
Info
(
err
,
fmt
.
Sprintf
(
"failed to create ns %s "
,
key
))
return
err
return
err
}
}
copyProject
.
Status
.
AdminNamespace
=
ns
.
Name
copyProject
.
Status
.
AdminNamespace
=
ns
.
Name
...
@@ -258,13 +258,13 @@ func (c *Controller) syncHandler(key string) error {
...
@@ -258,13 +258,13 @@ func (c *Controller) syncHandler(key string) error {
copyNs
:=
ns
.
DeepCopy
()
copyNs
:=
ns
.
DeepCopy
()
err
:=
controllerutil
.
SetControllerReference
(
copyProject
,
copyNs
,
scheme
.
Scheme
)
err
:=
controllerutil
.
SetControllerReference
(
copyProject
,
copyNs
,
scheme
.
Scheme
)
if
err
!=
nil
{
if
err
!=
nil
{
klog
.
Error
(
err
,
fmt
.
Sprintf
(
"failed to set ownerreference %s "
,
key
))
klog
.
V
(
8
)
.
Info
(
err
,
fmt
.
Sprintf
(
"failed to set ownerreference %s "
,
key
))
return
err
return
err
}
}
copyNs
.
Labels
[
constants
.
DevOpsProjectLabelKey
]
=
project
.
Name
copyNs
.
Labels
[
constants
.
DevOpsProjectLabelKey
]
=
project
.
Name
_
,
err
=
c
.
client
.
CoreV1
()
.
Namespaces
()
.
Update
(
copyNs
)
_
,
err
=
c
.
client
.
CoreV1
()
.
Namespaces
()
.
Update
(
copyNs
)
if
err
!=
nil
{
if
err
!=
nil
{
klog
.
Error
(
err
,
fmt
.
Sprintf
(
"failed to update ns %s "
,
key
))
klog
.
V
(
8
)
.
Info
(
err
,
fmt
.
Sprintf
(
"failed to update ns %s "
,
key
))
return
err
return
err
}
}
}
}
...
@@ -275,7 +275,7 @@ func (c *Controller) syncHandler(key string) error {
...
@@ -275,7 +275,7 @@ func (c *Controller) syncHandler(key string) error {
if
!
reflect
.
DeepEqual
(
copyProject
,
project
)
{
if
!
reflect
.
DeepEqual
(
copyProject
,
project
)
{
_
,
err
:=
c
.
kubesphereClient
.
DevopsV1alpha3
()
.
DevOpsProjects
()
.
Update
(
copyProject
)
_
,
err
:=
c
.
kubesphereClient
.
DevopsV1alpha3
()
.
DevOpsProjects
()
.
Update
(
copyProject
)
if
err
!=
nil
{
if
err
!=
nil
{
klog
.
Error
(
err
,
fmt
.
Sprintf
(
"failed to update ns %s "
,
key
))
klog
.
V
(
8
)
.
Info
(
err
,
fmt
.
Sprintf
(
"failed to update ns %s "
,
key
))
return
err
return
err
}
}
}
}
...
@@ -285,7 +285,7 @@ func (c *Controller) syncHandler(key string) error {
...
@@ -285,7 +285,7 @@ func (c *Controller) syncHandler(key string) error {
klog
.
Error
(
err
,
fmt
.
Sprintf
(
"failed to get project %s "
,
key
))
klog
.
Error
(
err
,
fmt
.
Sprintf
(
"failed to get project %s "
,
key
))
_
,
err
:=
c
.
devopsClient
.
CreateDevOpsProject
(
copyProject
.
Status
.
AdminNamespace
)
_
,
err
:=
c
.
devopsClient
.
CreateDevOpsProject
(
copyProject
.
Status
.
AdminNamespace
)
if
err
!=
nil
{
if
err
!=
nil
{
klog
.
Error
(
err
,
fmt
.
Sprintf
(
"failed to get project %s "
,
key
))
klog
.
V
(
8
)
.
Info
(
err
,
fmt
.
Sprintf
(
"failed to get project %s "
,
key
))
return
err
return
err
}
}
}
}
...
@@ -294,7 +294,7 @@ func (c *Controller) syncHandler(key string) error {
...
@@ -294,7 +294,7 @@ func (c *Controller) syncHandler(key string) error {
// Finalizers processing logic
// Finalizers processing logic
if
sliceutil
.
HasString
(
project
.
ObjectMeta
.
Finalizers
,
devopsv1alpha3
.
DevOpsProjectFinalizerName
)
{
if
sliceutil
.
HasString
(
project
.
ObjectMeta
.
Finalizers
,
devopsv1alpha3
.
DevOpsProjectFinalizerName
)
{
if
err
:=
c
.
deleteDevOpsProjectInDevOps
(
project
);
err
!=
nil
{
if
err
:=
c
.
deleteDevOpsProjectInDevOps
(
project
);
err
!=
nil
{
klog
.
Error
(
err
,
fmt
.
Sprintf
(
"failed to delete resource %s in devops"
,
key
))
klog
.
V
(
8
)
.
Info
(
err
,
fmt
.
Sprintf
(
"failed to delete resource %s in devops"
,
key
))
return
err
return
err
}
}
project
.
ObjectMeta
.
Finalizers
=
sliceutil
.
RemoveString
(
project
.
ObjectMeta
.
Finalizers
,
func
(
item
string
)
bool
{
project
.
ObjectMeta
.
Finalizers
=
sliceutil
.
RemoveString
(
project
.
ObjectMeta
.
Finalizers
,
func
(
item
string
)
bool
{
...
@@ -303,7 +303,7 @@ func (c *Controller) syncHandler(key string) error {
...
@@ -303,7 +303,7 @@ func (c *Controller) syncHandler(key string) error {
_
,
err
=
c
.
kubesphereClient
.
DevopsV1alpha3
()
.
DevOpsProjects
()
.
Update
(
project
)
_
,
err
=
c
.
kubesphereClient
.
DevopsV1alpha3
()
.
DevOpsProjects
()
.
Update
(
project
)
if
err
!=
nil
{
if
err
!=
nil
{
klog
.
Error
(
err
,
fmt
.
Sprintf
(
"failed to update project %s "
,
key
))
klog
.
V
(
8
)
.
Info
(
err
,
fmt
.
Sprintf
(
"failed to update project %s "
,
key
))
return
err
return
err
}
}
}
}
...
...
pkg/controller/pipeline/pipeline_controller.go
浏览文件 @
2e040095
...
@@ -186,7 +186,7 @@ func (c *Controller) syncHandler(key string) error {
...
@@ -186,7 +186,7 @@ func (c *Controller) syncHandler(key string) error {
klog
.
Info
(
fmt
.
Sprintf
(
"namespace '%s' in work queue no longer exists "
,
key
))
klog
.
Info
(
fmt
.
Sprintf
(
"namespace '%s' in work queue no longer exists "
,
key
))
return
nil
return
nil
}
}
klog
.
Error
(
err
,
fmt
.
Sprintf
(
"could not get namespace %s "
,
key
))
klog
.
V
(
8
)
.
Info
(
err
,
fmt
.
Sprintf
(
"could not get namespace %s "
,
key
))
return
err
return
err
}
}
if
!
isDevOpsProjectAdminNamespace
(
namespace
)
{
if
!
isDevOpsProjectAdminNamespace
(
namespace
)
{
...
@@ -198,7 +198,7 @@ func (c *Controller) syncHandler(key string) error {
...
@@ -198,7 +198,7 @@ func (c *Controller) syncHandler(key string) error {
pipeline
,
err
:=
c
.
devOpsProjectLister
.
Pipelines
(
nsName
)
.
Get
(
name
)
pipeline
,
err
:=
c
.
devOpsProjectLister
.
Pipelines
(
nsName
)
.
Get
(
name
)
if
err
!=
nil
{
if
err
!=
nil
{
if
errors
.
IsNotFound
(
err
)
{
if
errors
.
IsNotFound
(
err
)
{
klog
.
Info
(
fmt
.
Sprintf
(
"copyPipeline '%s' in work queue no longer exists "
,
key
))
klog
.
V
(
8
)
.
Info
(
fmt
.
Sprintf
(
"copyPipeline '%s' in work queue no longer exists "
,
key
))
return
nil
return
nil
}
}
klog
.
Error
(
err
,
fmt
.
Sprintf
(
"could not get copyPipeline %s "
,
key
))
klog
.
Error
(
err
,
fmt
.
Sprintf
(
"could not get copyPipeline %s "
,
key
))
...
@@ -220,14 +220,14 @@ func (c *Controller) syncHandler(key string) error {
...
@@ -220,14 +220,14 @@ func (c *Controller) syncHandler(key string) error {
if
!
reflect
.
DeepEqual
(
jenkinsPipeline
.
Spec
,
copyPipeline
.
Spec
)
{
if
!
reflect
.
DeepEqual
(
jenkinsPipeline
.
Spec
,
copyPipeline
.
Spec
)
{
_
,
err
:=
c
.
devopsClient
.
UpdateProjectPipeline
(
nsName
,
copyPipeline
)
_
,
err
:=
c
.
devopsClient
.
UpdateProjectPipeline
(
nsName
,
copyPipeline
)
if
err
!=
nil
{
if
err
!=
nil
{
klog
.
Error
(
err
,
fmt
.
Sprintf
(
"failed to update pipeline config %s "
,
key
))
klog
.
V
(
8
)
.
Info
(
err
,
fmt
.
Sprintf
(
"failed to update pipeline config %s "
,
key
))
return
err
return
err
}
}
}
}
}
else
{
}
else
{
_
,
err
:=
c
.
devopsClient
.
CreateProjectPipeline
(
nsName
,
copyPipeline
)
_
,
err
:=
c
.
devopsClient
.
CreateProjectPipeline
(
nsName
,
copyPipeline
)
if
err
!=
nil
{
if
err
!=
nil
{
klog
.
Error
(
err
,
fmt
.
Sprintf
(
"failed to create copyPipeline %s "
,
key
))
klog
.
V
(
8
)
.
Info
(
err
,
fmt
.
Sprintf
(
"failed to create copyPipeline %s "
,
key
))
return
err
return
err
}
}
}
}
...
@@ -236,7 +236,7 @@ func (c *Controller) syncHandler(key string) error {
...
@@ -236,7 +236,7 @@ func (c *Controller) syncHandler(key string) error {
// Finalizers processing logic
// Finalizers processing logic
if
sliceutil
.
HasString
(
copyPipeline
.
ObjectMeta
.
Finalizers
,
devopsv1alpha3
.
PipelineFinalizerName
)
{
if
sliceutil
.
HasString
(
copyPipeline
.
ObjectMeta
.
Finalizers
,
devopsv1alpha3
.
PipelineFinalizerName
)
{
if
_
,
err
:=
c
.
devopsClient
.
DeleteProjectPipeline
(
nsName
,
pipeline
.
Name
);
err
!=
nil
{
if
_
,
err
:=
c
.
devopsClient
.
DeleteProjectPipeline
(
nsName
,
pipeline
.
Name
);
err
!=
nil
{
klog
.
Error
(
err
,
fmt
.
Sprintf
(
"failed to delete pipeline %s in devops"
,
key
))
klog
.
V
(
8
)
.
Info
(
err
,
fmt
.
Sprintf
(
"failed to delete pipeline %s in devops"
,
key
))
}
}
copyPipeline
.
ObjectMeta
.
Finalizers
=
sliceutil
.
RemoveString
(
copyPipeline
.
ObjectMeta
.
Finalizers
,
func
(
item
string
)
bool
{
copyPipeline
.
ObjectMeta
.
Finalizers
=
sliceutil
.
RemoveString
(
copyPipeline
.
ObjectMeta
.
Finalizers
,
func
(
item
string
)
bool
{
return
item
==
devopsv1alpha3
.
PipelineFinalizerName
return
item
==
devopsv1alpha3
.
PipelineFinalizerName
...
@@ -247,7 +247,7 @@ func (c *Controller) syncHandler(key string) error {
...
@@ -247,7 +247,7 @@ func (c *Controller) syncHandler(key string) error {
if
!
reflect
.
DeepEqual
(
pipeline
,
copyPipeline
)
{
if
!
reflect
.
DeepEqual
(
pipeline
,
copyPipeline
)
{
_
,
err
=
c
.
kubesphereClient
.
DevopsV1alpha3
()
.
Pipelines
(
nsName
)
.
Update
(
copyPipeline
)
_
,
err
=
c
.
kubesphereClient
.
DevopsV1alpha3
()
.
Pipelines
(
nsName
)
.
Update
(
copyPipeline
)
if
err
!=
nil
{
if
err
!=
nil
{
klog
.
Error
(
err
,
fmt
.
Sprintf
(
"failed to update pipeline %s "
,
key
))
klog
.
V
(
8
)
.
Info
(
err
,
fmt
.
Sprintf
(
"failed to update pipeline %s "
,
key
))
return
err
return
err
}
}
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录