MCPcopy Create free account
hub / github.com/1Panel-dev/1Panel / ComposeUpdate

Method ComposeUpdate

agent/app/service/container_compose.go:281–324  ·  view source on GitHub ↗
(req dto.ComposeUpdate)

Source from the content-addressed store, hash-verified

279}
280
281func (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
326func (u *ContainerService) ComposeLogClean(req dto.ComposeLogClean) error {
327 client, err := docker.NewDockerClient()

Callers

nothing calls this directly

Calls 7

newComposeEnvFunction · 0.85
recreateComposeFunction · 0.85
OpenFileMethod · 0.80
CloseMethod · 0.65
AddSubTaskMethod · 0.45
FlushMethod · 0.45
ExecuteMethod · 0.45

Tested by

no test coverage detected