(req dto.ContainerOperate)
| 633 | } |
| 634 | |
| 635 | func (u *ContainerService) ContainerUpdate(req dto.ContainerOperate) error { |
| 636 | client, err := docker.NewDockerClient() |
| 637 | if err != nil { |
| 638 | return err |
| 639 | } |
| 640 | defer client.Close() |
| 641 | ctx := context.Background() |
| 642 | oldContainer, err := client.ContainerInspect(ctx, req.Name) |
| 643 | if err != nil { |
| 644 | return err |
| 645 | } |
| 646 | |
| 647 | taskItem, err := task.NewTaskWithOps(req.Name, task.TaskUpdate, task.TaskScopeContainer, req.TaskID, 1) |
| 648 | if err != nil { |
| 649 | global.LOG.Errorf("new task for create container failed, err: %v", err) |
| 650 | return err |
| 651 | } |
| 652 | go func() { |
| 653 | taskItem.AddSubTask(i18n.GetWithName("ContainerImagePull", req.Image), func(t *task.Task) error { |
| 654 | if !checkImageExist(client, req.Image) || req.ForcePull { |
| 655 | if err := pullImages(taskItem, client, req.Image); err != nil { |
| 656 | if !req.ForcePull { |
| 657 | return err |
| 658 | } |
| 659 | return fmt.Errorf("pull image %s failed, err: %v", req.Image, err) |
| 660 | } |
| 661 | } |
| 662 | return nil |
| 663 | }, nil) |
| 664 | |
| 665 | taskItem.AddSubTask(i18n.GetWithName("ContainerCreate", req.Name), func(t *task.Task) error { |
| 666 | err := client.ContainerRemove(ctx, req.Name, container.RemoveOptions{Force: true}) |
| 667 | taskItem.LogWithStatus(i18n.GetWithName("ContainerRemoveOld", req.Name), err) |
| 668 | if err != nil { |
| 669 | return err |
| 670 | } |
| 671 | |
| 672 | config, hostConf, networkConf, err := loadConfigInfo(false, req, &oldContainer) |
| 673 | taskItem.LogWithStatus(i18n.GetMsgByKey("ContainerLoadInfo"), err) |
| 674 | if err != nil { |
| 675 | taskItem.Log(i18n.GetMsgByKey("ContainerRecreate")) |
| 676 | reCreateAfterUpdate(req.Name, client, oldContainer.Config, oldContainer.HostConfig, oldContainer.NetworkSettings) |
| 677 | return err |
| 678 | } |
| 679 | removeUnsupportedEndpointStaticIPAM(client, networkConf, nil) |
| 680 | |
| 681 | con, err := client.ContainerCreate(ctx, config, hostConf, networkConf, &v1.Platform{}, req.Name) |
| 682 | if err != nil { |
| 683 | taskItem.Log(i18n.GetMsgByKey("ContainerRecreate")) |
| 684 | reCreateAfterUpdate(req.Name, client, oldContainer.Config, oldContainer.HostConfig, oldContainer.NetworkSettings) |
| 685 | return fmt.Errorf("update container failed, err: %v", err) |
| 686 | } |
| 687 | err = client.ContainerStart(ctx, con.ID, container.StartOptions{}) |
| 688 | taskItem.LogWithStatus(i18n.GetMsgByKey("ContainerStartCheck"), err) |
| 689 | if err != nil { |
| 690 | return fmt.Errorf("update successful but start failed, err: %v", err) |
| 691 | } |
| 692 | return nil |
nothing calls this directly
no test coverage detected