* DELETE /api/devcontainer?repoId=${repoId} 删除 DevContainer
* refactor
* GET /api/devcontainer?repoId=${repoId}&wait=true 阻塞式等待打开就绪的 DevContainer
* POST /api/devcontainer 创建 DevContainer
* refactored the code
* Updated context usage with cancel function
* 预留接口,适配单机版 DevStar DevContainer
* bugFix: context canceled while deleting k8s CRD DevcontainerApp
* 用户界面删除 k8s CRD DevContainer
* 用户界面创建 DevContainer 并更新 NodePort
* 完成用户界面创建 DevContainer
* transplant test code into DevStar Studio
* refactored API router to /routers/api
* 更改 DevContainer Doc
* 更改 DevContainer namespace
* 特殊仓库重定向
* [Doc] 更新 Kubernetes 部署 DevStar Studio 文档说明,特别是 namespace 管理
* [Doc] 更新 CI脚本说明
* Revert "optimized CI workflow"
* optimized CI workflow
* fix typo
* [feature test]: 测试 Pod 内使用 Kubernetes Operator 功能
* [Optimization] error msg for archived repo
* [Optimization]: display detailed err msg on creating devContainer for …
45 lines
1.7 KiB
Go
45 lines
1.7 KiB
Go
package k8s_agent
|
||
|
||
import (
|
||
devstar_devcontainer_models "code.gitea.io/gitea/models/devstar_devcontainer"
|
||
devcontainer_k8s_agent_module "code.gitea.io/gitea/modules/devstar_devcontainer/k8s_agent"
|
||
devcontainer_dto "code.gitea.io/gitea/modules/devstar_devcontainer/k8s_agent/dto"
|
||
devcontainer_errors "code.gitea.io/gitea/modules/devstar_devcontainer/k8s_agent/errors"
|
||
"code.gitea.io/gitea/modules/setting"
|
||
"context"
|
||
"fmt"
|
||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||
)
|
||
|
||
// 补充笔记: modules/ 与 services/ 两个目录中的 k8s Agent 区别是什么?
|
||
// - modules/ 与 k8s API Server 交互密切相关
|
||
// - services/ 进行了封装,简化用户界面使用
|
||
|
||
func AssignDevcontainerDeletion2K8sOperator(ctx *context.Context, devcontainersList *[]devstar_devcontainer_models.DevstarDevcontainer) error {
|
||
|
||
// 1. 获取 Dynamic Client
|
||
client, err := devcontainer_k8s_agent_module.GetKubernetesClient(ctx)
|
||
if err != nil {
|
||
// 层层返回错误,结束数据库事务
|
||
return err
|
||
}
|
||
|
||
// 2. 调用 modules 层 k8s Agent,执行删除资源
|
||
opts := &devcontainer_dto.DeleteDevcontainerOptions{
|
||
DeleteOptions: metav1.DeleteOptions{},
|
||
Namespace: setting.Devstar.Devcontainer.Namespace,
|
||
}
|
||
if devcontainersList == nil || len(*devcontainersList) == 0 {
|
||
return devcontainer_errors.ErrOperateDevcontainer{
|
||
Action: fmt.Sprintf("Delete DevContainer in namespace '%s'", opts.Namespace),
|
||
Message: "The DevContainer List is empty",
|
||
}
|
||
}
|
||
// 遍历列表删除 DevContainer,如果删除出错,交由 module 层打印日志,交由管理员手动处理
|
||
for _, devcontainer := range *devcontainersList {
|
||
opts.Name = devcontainer.Name
|
||
_ = devcontainer_k8s_agent_module.DeleteDevcontainer(ctx, client, opts)
|
||
}
|
||
return nil
|
||
}
|