diff --git a/pkg/apply/processor/install.go b/pkg/apply/processor/install.go index 82590235693..13f2d6d46cc 100644 --- a/pkg/apply/processor/install.go +++ b/pkg/apply/processor/install.go @@ -140,9 +140,20 @@ func (c *InstallProcessor) PreProcess(cluster *v2.Cluster) error { imageTypes.Insert(string(v2.AppImage)) } } + syncMounts := make([]v2.MountImage, 0) + imageIndices := make(map[string]int) + for _, mot := range cluster.Status.Mounts { + if idx, exists := imageIndices[mot.ImageName]; exists { + syncMounts[idx] = *mot.DeepCopy() + } else { + imageIndices[mot.ImageName] = len(syncMounts) + syncMounts = append(syncMounts, mot) + } + } + cluster.Status.Mounts = syncMounts for _, img := range c.NewImages { + index, mount := cluster.FindImage(img) var ctrName string - mount := cluster.FindImage(img) if mount != nil { if !ForceOverride { continue @@ -168,8 +179,10 @@ func (c *InstallProcessor) PreProcess(cluster *v2.Cluster) error { return err } mount.Env = maps.Merge(mount.Env, c.ExtraEnvs) - - cluster.SetMountImage(mount) + if index >= 0 { + cluster.Status.Mounts = append(cluster.Status.Mounts[:index], cluster.Status.Mounts[index+1:]...) + } + 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..a27a40ef456 100644 --- a/pkg/types/v1beta1/utils.go +++ b/pkg/types/v1beta1/utils.go @@ -117,29 +117,13 @@ func (c *Cluster) GetRootfsImage() *MountImage { return nil } -func (c *Cluster) FindImage(name string) *MountImage { - for _, img := range c.Status.Mounts { +func (c *Cluster) FindImage(name string) (int, *MountImage) { + for i, img := range c.Status.Mounts { if img.ImageName == name { - return &img - } - } - 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 - } + return i, &img } - c.Status.Mounts = append(c.Status.Mounts, *mount) } + return -1, nil } func (c *Cluster) ReplaceRootfsImage() {