(req dto.ContainerUpgrade)
| 701 | } |
| 702 | |
| 703 | func (u *ContainerService) ContainerUpgrade(req dto.ContainerUpgrade) error { |
| 704 | client, err := docker.NewDockerClient() |
| 705 | if err != nil { |
| 706 | return err |
| 707 | } |
| 708 | defer client.Close() |
| 709 | ctx := context.Background() |
| 710 | taskItem, err := task.NewTaskWithOps(req.Image, task.TaskUpgrade, task.TaskScopeImage, req.TaskID, 1) |
| 711 | if err != nil { |
| 712 | global.LOG.Errorf("new task for create container failed, err: %v", err) |
| 713 | return err |
| 714 | } |
| 715 | go func() { |
| 716 | taskItem.AddSubTask(i18n.GetWithName("ContainerImagePull", req.Image), func(t *task.Task) error { |
| 717 | taskItem.LogStart(i18n.GetWithName("ContainerImagePull", req.Image)) |
| 718 | if !checkImageExist(client, req.Image) || req.ForcePull { |
| 719 | if err := pullImages(taskItem, client, req.Image); err != nil { |
| 720 | if !req.ForcePull { |
| 721 | return err |
| 722 | } |
| 723 | return fmt.Errorf("pull image %s failed, err: %v", req.Image, err) |
| 724 | } |
| 725 | } |
| 726 | return nil |
| 727 | }, nil) |
| 728 | for _, item := range req.Names { |
| 729 | var oldContainer container.InspectResponse |
| 730 | taskItem.AddSubTask(i18n.GetWithName("ContainerLoadInfo", item), func(t *task.Task) error { |
| 731 | taskItem.Logf("----------------- %s -----------------", item) |
| 732 | oldContainer, err = client.ContainerInspect(ctx, item) |
| 733 | if err != nil { |
| 734 | return err |
| 735 | } |
| 736 | return nil |
| 737 | }, nil) |
| 738 | |
| 739 | taskItem.AddSubTask(i18n.GetWithName("ContainerCreate", item), func(t *task.Task) error { |
| 740 | config := oldContainer.Config |
| 741 | config.Image = req.Image |
| 742 | hostConf := oldContainer.HostConfig |
| 743 | err := client.ContainerRemove(ctx, item, container.RemoveOptions{Force: true}) |
| 744 | taskItem.LogWithStatus(i18n.GetWithName("ContainerRemoveOld", item), err) |
| 745 | if err != nil { |
| 746 | return err |
| 747 | } |
| 748 | |
| 749 | con, err := createContainerWithOldNetworks(ctx, client, config, hostConf, oldContainer.NetworkSettings, item) |
| 750 | if err != nil { |
| 751 | taskItem.Log(i18n.GetMsgByKey("ContainerRecreate")) |
| 752 | reCreateAfterUpdate(item, client, oldContainer.Config, oldContainer.HostConfig, oldContainer.NetworkSettings) |
| 753 | return fmt.Errorf("upgrade container failed, err: %v", err) |
| 754 | } |
| 755 | err = client.ContainerStart(ctx, con.ID, container.StartOptions{}) |
| 756 | taskItem.LogWithStatus(i18n.GetMsgByKey("ContainerStartCheck"), err) |
| 757 | if err != nil { |
| 758 | return fmt.Errorf("upgrade successful but start failed, err: %v", err) |
| 759 | } |
| 760 | return nil |
nothing calls this directly
no test coverage detected