* 合并devcontainer web相关的源文件,简化目录结构 * devcontainer、ssh_key_pair和devcontainer.cloud * fixed bug:创建容器时Host为localhost时创建失败的问题 * 删除了死代码,更新了一些命名(主要是去掉devstar字符串) * 常量名全大写 * devcontainer HOST改为用户设置的域名或IP * 安装时如没有配置devcontainer则默认设置为docker方式 * 直接使用kubernetes和docker简化代码提高可读性 * 去除services/devstar_devcontainer文件夹名中不必要的devstar字符串 * 去除services/devstar_devcontainer文件夹名中不必要的devstar字符串 * 文件名中去掉不必要的devstar字符串 * 变量名中删除不必要的Devstar字符串 * Merge branch 'dev' into feature-websshAndUpdateImage * change pages style * change Structure * fix bug * websshAndUpdateImage
65 lines
2.4 KiB
Go
65 lines
2.4 KiB
Go
package devcontainer
|
|
|
|
import (
|
|
"code.gitea.io/gitea/modules/docker"
|
|
"code.gitea.io/gitea/modules/log"
|
|
"code.gitea.io/gitea/modules/setting"
|
|
gitea_web_context "code.gitea.io/gitea/services/context"
|
|
devcontainer_service_errors "code.gitea.io/gitea/services/devcontainer/errors"
|
|
k8s_agent_services "code.gitea.io/gitea/services/devcontainer/k8s_agent"
|
|
devcontainer_service_options "code.gitea.io/gitea/services/devcontainer/options"
|
|
devcontainer_service_vo "code.gitea.io/gitea/services/devcontainer/vo"
|
|
)
|
|
|
|
// OpenDevcontainerService 获取 DevContainer 连接信息,抽象方法,适配多种 DevContainer Agent
|
|
func OpenDevcontainerService(ctx *gitea_web_context.Context, opts *devcontainer_service_options.OpenDevcontainerAppDispatcherOptions) (*devcontainer_service_vo.OpenDevcontainerAbstractAgentVO, error) {
|
|
|
|
// 0. 检查参数
|
|
if ctx == nil || opts == nil || len(opts.Name) == 0 {
|
|
return nil, devcontainer_service_errors.ErrIllegalParams{
|
|
FieldNameList: []string{"ctx", "opts.Name"},
|
|
}
|
|
}
|
|
|
|
// 1. 检查 DevContainer 功能是否开启
|
|
if setting.Devcontainer.Enabled == false {
|
|
return nil, devcontainer_service_errors.ErrOperateDevcontainer{
|
|
Action: "check availability of DevStar DevContainer",
|
|
Message: "DevContainer is turned off globally",
|
|
}
|
|
}
|
|
|
|
// 2. 根据 DevContainer Agent 类型分发任务
|
|
apiRequestContext := ctx.Req.Context()
|
|
openDevcontainerAbstractAgentVO := &devcontainer_service_vo.OpenDevcontainerAbstractAgentVO{}
|
|
switch setting.Devcontainer.Agent {
|
|
case setting.KUBERNETES:
|
|
devcontainerApp, err := k8s_agent_services.AssignDevcontainerGetting2K8sOperator(&apiRequestContext, opts)
|
|
if err != nil {
|
|
return nil, devcontainer_service_errors.ErrOperateDevcontainer{
|
|
Action: "Open DevContainer in k8s",
|
|
Message: err.Error(),
|
|
}
|
|
}
|
|
openDevcontainerAbstractAgentVO.NodePortAssigned = devcontainerApp.Status.NodePortAssigned
|
|
case setting.DOCKER:
|
|
port, err := docker.AssignDevcontainerGettingDockerOperator(&apiRequestContext, opts)
|
|
log.Info("port %d", port)
|
|
if err != nil {
|
|
return nil, devcontainer_service_errors.ErrOperateDevcontainer{
|
|
Action: "Open DevContainer in docker",
|
|
Message: err.Error(),
|
|
}
|
|
}
|
|
openDevcontainerAbstractAgentVO.NodePortAssigned = port
|
|
default:
|
|
return nil, devcontainer_service_errors.ErrOperateDevcontainer{
|
|
Action: "Open DevContainer",
|
|
Message: "No Valid DevContainer Agent Found",
|
|
}
|
|
}
|
|
|
|
// 3. 封装返回结果
|
|
return openDevcontainerAbstractAgentVO, nil
|
|
}
|