From 0fd86df327a6a2dbda45e24674bd0d68c6877ea0 Mon Sep 17 00:00:00 2001 From: cuisongliu Date: Tue, 24 Oct 2023 17:49:21 +0800 Subject: [PATCH] refactor(main): unmount override container Signed-off-by: cuisongliu --- pkg/apply/processor/install.go | 35 +++++++++++++++++++++++++++++----- pkg/types/v1beta1/utils.go | 16 ---------------- 2 files changed, 30 insertions(+), 21 deletions(-) diff --git a/pkg/apply/processor/install.go b/pkg/apply/processor/install.go index 82590235693..d245c6905aa 100644 --- a/pkg/apply/processor/install.go +++ b/pkg/apply/processor/install.go @@ -140,17 +140,42 @@ func (c *InstallProcessor) PreProcess(cluster *v2.Cluster) error { imageTypes.Insert(string(v2.AppImage)) } } + syncMounts := make([]v2.MountImage, 0) for _, img := range c.NewImages { - var ctrName string mount := cluster.FindImage(img) + var ctrName string if mount != nil { if !ForceOverride { continue } - logger.Debug("trying to override app %s", img) - if err := c.Buildah.Delete(mount.Name); err != nil { + allContainers, err := c.Buildah.ListContainers() + if err != nil { + return err + } + imgID, err := c.Buildah.InspectImage(img) + if err != nil { return err } + for _, ctr := range allContainers { + ctrImageID, err := c.Buildah.InspectImage(ctr.ImageName) + if err != nil { + logger.Warn("container get image error: %+v", err) + continue + } + if ctrImageID.FromImageID == imgID.FromImageID { + logger.Debug("trying to delete app %s %s", ctr.ImageName, ctr.ContainerName) + if err := c.Buildah.Delete(ctr.ContainerName); err != nil { + logger.Warn("delete container error: %+v", err) + } + } + } + if cluster.Status.Mounts != nil { + for _, mot := range cluster.Status.Mounts { + if mot.ImageName != mount.ImageName || mot.Type != mount.Type { + syncMounts = append(syncMounts, mot) + } + } + } } ctrName = rand.Generator(8) cluster.Spec.Image = stringsutil.Merge(cluster.Spec.Image, img) @@ -168,8 +193,8 @@ func (c *InstallProcessor) PreProcess(cluster *v2.Cluster) error { return err } mount.Env = maps.Merge(mount.Env, c.ExtraEnvs) - - cluster.SetMountImage(mount) + cluster.Status.Mounts = syncMounts + cluster.Status.Mounts = append(cluster.Status.Mounts, *mount) c.NewMounts = append(c.NewMounts, *mount) } diff --git a/pkg/types/v1beta1/utils.go b/pkg/types/v1beta1/utils.go index ab6086ef88c..9bbb8cd833e 100644 --- a/pkg/types/v1beta1/utils.go +++ b/pkg/types/v1beta1/utils.go @@ -126,22 +126,6 @@ func (c *Cluster) FindImage(name string) *MountImage { return nil } -func (c *Cluster) SetMountImage(mount *MountImage) { - if mount == nil { - return - } - - if c.Status.Mounts != nil { - for i, img := range c.Status.Mounts { - if img.Name == mount.Name && img.Type == mount.Type { - c.Status.Mounts[i] = *mount.DeepCopy() - return - } - } - c.Status.Mounts = append(c.Status.Mounts, *mount) - } -} - func (c *Cluster) ReplaceRootfsImage() { i1, i2 := -1, -1 var v1, v2 string