2
0
mirror of https://github.com/acepanel/panel.git synced 2026-02-04 06:47:20 +08:00

feat: 优化编排请求体

This commit is contained in:
耗子
2025-03-27 02:22:43 +08:00
parent ac9b42ca4d
commit 46cf1fa7da
4 changed files with 40 additions and 16 deletions

View File

@@ -5,8 +5,8 @@ import "github.com/tnb-labs/panel/pkg/types"
type ContainerComposeRepo interface {
List() ([]types.ContainerCompose, error)
Get(name string) (string, string, error)
Create(name, compose, env string) error
Update(name, compose, env string) error
Create(name, compose string, envs []types.KV) error
Update(name, compose string, envs []types.KV) error
Up(name string, force bool) error
Down(name string) error
Remove(name string) error

View File

@@ -5,6 +5,7 @@ import (
"io/fs"
"os"
"path/filepath"
"strings"
"time"
"github.com/tnb-labs/panel/internal/app"
@@ -31,12 +32,17 @@ func (r *containerComposeRepo) List() ([]types.ContainerCompose, error) {
return nil, err
}
index := make(map[string]int)
var composes []types.ContainerCompose
err = filepath.WalkDir(filepath.Join(app.Root, "server", "compose"), func(path string, d fs.DirEntry, err error) error {
index := make(map[string]int)
composeDir := filepath.Join(app.Root, "server", "compose")
err = filepath.WalkDir(composeDir, func(path string, d fs.DirEntry, err error) error {
if err != nil {
return err
}
// 跳过自身
if path == composeDir {
return nil
}
if !d.IsDir() {
return nil
}
@@ -75,7 +81,7 @@ func (r *containerComposeRepo) Get(name string) (string, string, error) {
}
// Create 创建编排文件
func (r *containerComposeRepo) Create(name, compose, env string) error {
func (r *containerComposeRepo) Create(name, compose string, envs []types.KV) error {
dir := filepath.Join(app.Root, "server", "compose", name)
if err := os.MkdirAll(dir, 0644); err != nil {
return err
@@ -83,7 +89,15 @@ func (r *containerComposeRepo) Create(name, compose, env string) error {
if err := os.WriteFile(filepath.Join(dir, "docker-compose.yml"), []byte(compose), 0644); err != nil {
return err
}
if err := os.WriteFile(filepath.Join(dir, ".env"), []byte(env), 0644); err != nil {
var sb strings.Builder
for _, kv := range envs {
sb.WriteString(kv.Key)
sb.WriteString("=")
sb.WriteString(kv.Value)
sb.WriteString("\n")
}
if err := os.WriteFile(filepath.Join(dir, ".env"), []byte(sb.String()), 0644); err != nil {
return err
}
@@ -91,12 +105,20 @@ func (r *containerComposeRepo) Create(name, compose, env string) error {
}
// Update 更新编排文件
func (r *containerComposeRepo) Update(name, compose, env string) error {
func (r *containerComposeRepo) Update(name, compose string, envs []types.KV) error {
dir := filepath.Join(app.Root, "server", "compose", name)
if err := os.WriteFile(filepath.Join(dir, "docker-compose.yml"), []byte(compose), 0644); err != nil {
return err
}
if err := os.WriteFile(filepath.Join(dir, ".env"), []byte(env), 0644); err != nil {
var sb strings.Builder
for _, kv := range envs {
sb.WriteString(kv.Key)
sb.WriteString("=")
sb.WriteString(kv.Value)
sb.WriteString("\n")
}
if err := os.WriteFile(filepath.Join(dir, ".env"), []byte(sb.String()), 0644); err != nil {
return err
}

View File

@@ -1,19 +1,21 @@
package request
import "github.com/tnb-labs/panel/pkg/types"
type ContainerComposeGet struct {
Name string `uri:"name" validate:"required"`
}
type ContainerComposeCreate struct {
Name string `json:"name" validate:"required"`
Compose string `json:"compose" validate:"required"`
Env string `json:"env"`
Name string `json:"name" validate:"required|regex:^[a-zA-Z0-9_-]+$"`
Compose string `json:"compose" validate:"required"`
Envs []types.KV `json:"envs"`
}
type ContainerComposeUpdate struct {
Name string `uri:"name" validate:"required"`
Compose string `json:"compose" validate:"required"`
Env string `json:"env"`
Name string `uri:"name" validate:"required|regex:^[a-zA-Z0-9_-]+$"`
Compose string `json:"compose" validate:"required"`
Envs []types.KV `json:"envs"`
}
type ContainerComposeUp struct {

View File

@@ -60,7 +60,7 @@ func (s *ContainerComposeService) Create(w http.ResponseWriter, r *http.Request)
return
}
if err = s.containerComposeRepo.Create(req.Name, req.Compose, req.Env); err != nil {
if err = s.containerComposeRepo.Create(req.Name, req.Compose, req.Envs); err != nil {
Error(w, http.StatusInternalServerError, "%v", err)
return
}
@@ -75,7 +75,7 @@ func (s *ContainerComposeService) Update(w http.ResponseWriter, r *http.Request)
return
}
if err = s.containerComposeRepo.Update(req.Name, req.Compose, req.Env); err != nil {
if err = s.containerComposeRepo.Update(req.Name, req.Compose, req.Envs); err != nil {
Error(w, http.StatusInternalServerError, "%v", err)
return
}