From 3161afd091e73b15aa68df7a9327b700b1b0b10d Mon Sep 17 00:00:00 2001 From: mountain Date: Tue, 30 May 2023 12:12:23 +0900 Subject: [PATCH] =?UTF-8?q?deleteDeploySource,=20undeploy=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/client.go | 2 +- client/deploy.go | 6 ++--- client/operation.go | 10 ++++---- server/http_api.go | 55 ++++++++++++++++++++++++++++++++++++++++++ server/http_handler.go | 6 ++--- 5 files changed, 67 insertions(+), 12 deletions(-) diff --git a/client/client.go b/client/client.go index ba1dc9d..76b3169 100644 --- a/client/client.go +++ b/client/client.go @@ -105,7 +105,7 @@ func unmarshal[T any](val *T, src map[string]string) { func gatherDeployedPrograms(name string) []*protos.VersionAndArgs { var rawvers []*protos.VersionAndArgs - if vers, err := os.ReadDir(path.Join("./", name)); err == nil { + if vers, err := os.ReadDir(name); err == nil { for _, ver := range vers { if ver.IsDir() { args := lastExecutionArgs(path.Join(name, ver.Name())) diff --git a/client/deploy.go b/client/deploy.go index 91afc1f..4127886 100644 --- a/client/deploy.go +++ b/client/deploy.go @@ -160,7 +160,7 @@ func (hc *houstonClient) prepareDeploy(name string, version string) (destPath st } }() - verpath := path.Join("./", name, version) + verpath := path.Join(name, version) if _, err := os.Stat(verpath); os.IsNotExist(err) { // 없네? 만들면 된다. err = os.MkdirAll(verpath, fs.FileMode(os.O_WRONLY)) @@ -210,7 +210,7 @@ func (hc *houstonClient) deploy(req *shared.DeployRequest) error { } func (hc *houstonClient) withdraw(req *shared.WithdrawRequest) error { - fd, _ := os.Stat(path.Join("./", req.Name, req.Version)) + fd, _ := os.Stat(path.Join(req.Name, req.Version)) if fd != nil { if fd.IsDir() { for _, running := range hc.childProcs { @@ -222,7 +222,7 @@ func (hc *houstonClient) withdraw(req *shared.WithdrawRequest) error { } } - return os.RemoveAll(path.Join("./", req.Name, req.Version)) + return os.RemoveAll(path.Join(req.Name, req.Version)) } } diff --git a/client/operation.go b/client/operation.go index 3841df5..137ad9c 100644 --- a/client/operation.go +++ b/client/operation.go @@ -168,7 +168,7 @@ func prepareProcessLaunch(req *shared.StartProcessRequest) *procmeta { re := regexp.MustCompile(`[^\s"']+|"([^"]*)"|'([^']*)`) args := re.FindAllString(req.Args, -1) - verpath := path.Join("./", req.Name, req.Version) + verpath := path.Join(req.Name, req.Version) fi, err := os.Stat(verpath) if err == nil && fi.IsDir() { @@ -319,7 +319,7 @@ func (hc *houstonClient) startChildProcess(req *shared.StartProcessRequest) erro logger.Println("startChildProcess :", *req) if req.Version == "latest" { // 최신 버전을 찾음 - latest, err := shared.FindLastestVersion(path.Join("./", req.Name)) + latest, err := shared.FindLastestVersion(req.Name) if err != nil { return err } @@ -357,7 +357,7 @@ var errNoRunningProcess = errors.New("no running processed") func (hc *houstonClient) stopChildProcess(req *shared.StopProcessRequest) error { if req.Version == "latest" { // 최신 버전을 찾음 - latest, err := shared.FindLastestVersion(path.Join("./", req.Name)) + latest, err := shared.FindLastestVersion(req.Name) if err != nil { return err } @@ -424,7 +424,7 @@ func (hc *houstonClient) stopChildProcess(req *shared.StopProcessRequest) error func (hc *houstonClient) restartChildProcess(req *shared.RestartProcessRequest) error { if req.Version == "latest" { // 최신 버전을 찾음 - latest, err := shared.FindLastestVersion(path.Join("./", req.Name)) + latest, err := shared.FindLastestVersion(req.Name) if err != nil { return err } @@ -476,7 +476,7 @@ func (hc *houstonClient) restartChildProcess(req *shared.RestartProcessRequest) func (hc *houstonClient) uploadFiles(req *shared.UploadRequest) error { if req.Version == "latest" { // 최신 버전을 찾음 - latest, err := shared.FindLastestVersion(path.Join("./", req.Name)) + latest, err := shared.FindLastestVersion(req.Name) if err != nil { return err } diff --git a/server/http_api.go b/server/http_api.go index 508757a..4596c2b 100644 --- a/server/http_api.go +++ b/server/http_api.go @@ -96,6 +96,28 @@ func (h *houstonHandler) UploadDeploySource(w http.ResponseWriter, r *http.Reque } } +func (h *houstonHandler) DeleteDeploySource(w http.ResponseWriter, r *http.Request) { + //
+ // + // + //
+ version := r.FormValue("version") + name := r.FormValue("name") + + if len(version) == 0 || len(name) == 0 { + w.WriteHeader(http.StatusBadRequest) + return + } + + // deploys 폴더는 파일시스템 서비스이므로 다운로드 가능 + targetpath := path.Join("deploys", name, version) + if err := os.RemoveAll(targetpath); err != nil { + logger.Println("deleteDeploySource failed :", err) + w.WriteHeader(http.StatusInternalServerError) + return + } +} + func (h *houstonHandler) Deploy(w http.ResponseWriter, r *http.Request) { //
// @@ -157,6 +179,39 @@ func (h *houstonHandler) Deploy(w http.ResponseWriter, r *http.Request) { )) } +func (h *houstonHandler) Undeploy(w http.ResponseWriter, r *http.Request) { + // + // + // + // + //
+ name := r.FormValue("name") + version := r.FormValue("version") + traws := r.FormValue("targets") + + var targets []string + if len(traws) > 0 { + if err := json.Unmarshal([]byte(traws), &targets); err != nil { + logger.Error(err) + w.WriteHeader(http.StatusBadRequest) + return + } + } + + if len(name) == 0 || len(version) == 0 || len(targets) == 0 { + w.WriteHeader(http.StatusBadRequest) + return + } + + h.Operation().Withdraw(MakeWithdrawRequest( + shared.WithdrawRequest{ + Name: name, + Version: version, + }, + targets, + )) +} + func (h *houstonHandler) StartProcess(w http.ResponseWriter, r *http.Request) { //
// diff --git a/server/http_handler.go b/server/http_handler.go index 2c42282..0226483 100644 --- a/server/http_handler.go +++ b/server/http_handler.go @@ -46,10 +46,10 @@ func (h *houstonHandler) RegisterHandlers(serveMux *http.ServeMux, prefix string logger.Println("houstonHandler registed") serveMux.Handle("/"+path.Join(prefix, "houston"), h) - fsx := http.FileServer(http.Dir("./deploys")) + fsx := http.FileServer(http.Dir("deploys")) serveMux.Handle(fmt.Sprintf("/%s/deploys/", prefix), http.StripPrefix(fmt.Sprintf("/%s/deploys/", prefix), fsx)) - ufsx := http.FileServer(http.Dir("./downloads")) + ufsx := http.FileServer(http.Dir("downloads")) serveMux.Handle(fmt.Sprintf("/%s/houston/downloads/", prefix), http.StripPrefix(fmt.Sprintf("/%s/houston/downloads/", prefix), ufsx)) serveMux.HandleFunc("/"+path.Join(prefix, "upload"), func(w http.ResponseWriter, r *http.Request) { @@ -66,7 +66,7 @@ func (h *houstonHandler) RegisterHandlers(serveMux *http.ServeMux, prefix string name := r.Header.Get("Houston-Service-Name") version := r.Header.Get("Houston-Service-Version") filename := r.Header.Get("Houston-Service-Filename") - dir := fmt.Sprintf("./downloads/%s/%s", name, version) + dir := fmt.Sprintf("downloads/%s/%s", name, version) if err := os.MkdirAll(dir, os.ModePerm); err == nil { file, _ := os.Create(path.Join(dir, filename)) if file != nil {