|
|
@ -216,7 +216,8 @@ func (u *ContainerService) ComposeUpdate(req dto.ComposeUpdate) error {
|
|
|
|
if cmd.CheckIllegal(req.Name, req.Path) {
|
|
|
|
if cmd.CheckIllegal(req.Name, req.Path) {
|
|
|
|
return buserr.New(constant.ErrCmdIllegal)
|
|
|
|
return buserr.New(constant.ErrCmdIllegal)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if _, err := os.Stat(req.Path); err != nil {
|
|
|
|
oldFile, err := os.ReadFile(req.Path)
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
return fmt.Errorf("load file with path %s failed, %v", req.Path, err)
|
|
|
|
return fmt.Errorf("load file with path %s failed, %v", req.Path, err)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
file, err := os.OpenFile(req.Path, os.O_WRONLY|os.O_TRUNC, 0640)
|
|
|
|
file, err := os.OpenFile(req.Path, os.O_WRONLY|os.O_TRUNC, 0640)
|
|
|
@ -230,10 +231,16 @@ func (u *ContainerService) ComposeUpdate(req dto.ComposeUpdate) error {
|
|
|
|
|
|
|
|
|
|
|
|
global.LOG.Infof("docker-compose.yml %s has been replaced, now start to docker-compose restart", req.Path)
|
|
|
|
global.LOG.Infof("docker-compose.yml %s has been replaced, now start to docker-compose restart", req.Path)
|
|
|
|
if stdout, err := compose.Down(req.Path); err != nil {
|
|
|
|
if stdout, err := compose.Down(req.Path); err != nil {
|
|
|
|
return errors.New(string(stdout))
|
|
|
|
if err := recreateCompose(string(oldFile), req.Path); err != nil {
|
|
|
|
|
|
|
|
return fmt.Errorf("update failed when handle compose down, err: %s, recreate failed: %v", string(stdout), err)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return fmt.Errorf("update failed when handle compose down, err: %s", string(stdout))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if stdout, err := compose.Up(req.Path); err != nil {
|
|
|
|
if stdout, err := compose.Up(req.Path); err != nil {
|
|
|
|
return errors.New(string(stdout))
|
|
|
|
if err := recreateCompose(string(oldFile), req.Path); err != nil {
|
|
|
|
|
|
|
|
return fmt.Errorf("update failed when handle compose up, err: %s, recreate failed: %v", string(stdout), err)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return fmt.Errorf("update failed when handle compose up, err: %s", string(stdout))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return nil
|
|
|
|
return nil
|
|
|
@ -261,3 +268,19 @@ func (u *ContainerService) loadPath(req *dto.ComposeCreate) error {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return nil
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func recreateCompose(content, path string) error {
|
|
|
|
|
|
|
|
file, err := os.OpenFile(path, os.O_WRONLY|os.O_TRUNC, 0640)
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
|
|
return err
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
defer file.Close()
|
|
|
|
|
|
|
|
write := bufio.NewWriter(file)
|
|
|
|
|
|
|
|
_, _ = write.WriteString(content)
|
|
|
|
|
|
|
|
write.Flush()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if stdout, err := compose.Up(path); err != nil {
|
|
|
|
|
|
|
|
return errors.New(string(stdout))
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return nil
|
|
|
|
|
|
|
|
}
|
|
|
|