(req dto.ComposeUpdate)
| 279 | } |
| 280 | |
| 281 | func (u *ContainerService) ComposeUpdate(req dto.ComposeUpdate) error { |
| 282 | if cmd.CheckIllegal(req.Name, req.Path) { |
| 283 | return buserr.New("ErrCmdIllegal") |
| 284 | } |
| 285 | taskItem, err := task.NewTaskWithOps(req.Name, task.TaskUpdate, task.TaskScopeCompose, req.TaskID, 1) |
| 286 | if err != nil { |
| 287 | global.LOG.Errorf("new task for update compose failed, err: %v", err) |
| 288 | return err |
| 289 | } |
| 290 | go func() { |
| 291 | taskItem.AddSubTask(i18n.GetMsgByKey("TaskUpdate"), func(t *task.Task) error { |
| 292 | oldFile, err := os.ReadFile(req.DetailPath) |
| 293 | if err != nil { |
| 294 | return fmt.Errorf("load file with path %s failed, %v", req.DetailPath, err) |
| 295 | } |
| 296 | file, err := os.OpenFile(req.DetailPath, os.O_WRONLY|os.O_TRUNC, 0640) |
| 297 | if err != nil { |
| 298 | return err |
| 299 | } |
| 300 | defer file.Close() |
| 301 | write := bufio.NewWriter(file) |
| 302 | _, _ = write.WriteString(req.Content) |
| 303 | write.Flush() |
| 304 | |
| 305 | global.LOG.Infof("docker-compose.yml %s has been replaced, now start to docker-compose restart", req.DetailPath) |
| 306 | if err := newComposeEnv(req.DetailPath, req.Env); err != nil { |
| 307 | return err |
| 308 | } |
| 309 | |
| 310 | if err := compose.UpWithTask(req.Path, t, req.ForcePull); err != nil { |
| 311 | global.LOG.Errorf("update failed when handle compose up, err: %s, now try to recreate the old compose file", err) |
| 312 | if err := recreateCompose(string(oldFile), req.Path); err != nil { |
| 313 | return fmt.Errorf("update failed and recreate old compose file also failed, err: %v", err) |
| 314 | } |
| 315 | return fmt.Errorf("update failed when handle compose up, err: %s", err) |
| 316 | } |
| 317 | |
| 318 | return nil |
| 319 | }, nil) |
| 320 | _ = taskItem.Execute() |
| 321 | }() |
| 322 | |
| 323 | return nil |
| 324 | } |
| 325 | |
| 326 | func (u *ContainerService) ComposeLogClean(req dto.ComposeLogClean) error { |
| 327 | client, err := docker.NewDockerClient() |
nothing calls this directly
no test coverage detected