• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

kubevirt / hyperconverged-cluster-operator / 15588112594

11 Jun 2025 02:46PM UTC coverage: 73.009% (-0.09%) from 73.103%
15588112594

push

github

web-flow
Remove old ImageStreams on upgrade (#3560)

On upgrade, if there is an ImageStream created by HCO, but is not in the
imagestream files, remove it, as it is no longer supported.

Signed-off-by: Nahshon Unna-Tsameret <nunnatsa@redhat.com>

37 of 50 new or added lines in 3 files covered. (74.0%)

3 existing lines in 1 file now uncovered.

6565 of 8992 relevant lines covered (73.01%)

0.96 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

76.74
/controllers/hyperconverged/remove_old_objects.go
1
package hyperconverged
2

3
import (
4
        "slices"
5

6
        consolev1 "github.com/openshift/api/console/v1"
7
        imagev1 "github.com/openshift/api/image/v1"
8
        corev1 "k8s.io/api/core/v1"
9
        "sigs.k8s.io/controller-runtime/pkg/client"
10

11
        "github.com/kubevirt/hyperconverged-cluster-operator/controllers/common"
12
        hcoutil "github.com/kubevirt/hyperconverged-cluster-operator/pkg/util"
13
)
14

15
func removeOldQuickStartGuides(req *common.HcoRequest, cl client.Client, requiredQSList []string) {
1✔
16
        existingQSList := &consolev1.ConsoleQuickStartList{}
1✔
17
        req.Logger.Info("reading quickstart guides")
1✔
18
        err := cl.List(req.Ctx, existingQSList, client.MatchingLabels{hcoutil.AppLabelManagedBy: hcoutil.OperatorName})
1✔
19
        if err != nil {
1✔
NEW
20
                req.Logger.Error(err, "failed to read list of quickstart guides")
×
NEW
21
                return
×
NEW
22
        }
×
23

24
        for _, qs := range existingQSList.Items {
2✔
25
                if !slices.Contains(requiredQSList, qs.Name) {
2✔
26
                        req.Logger.Info("deleting ConsoleQuickStart", "name", qs.Name)
1✔
27
                        if _, err = hcoutil.EnsureDeleted(req.Ctx, cl, &qs, req.Instance.Name, req.Logger, false, false, true); err != nil {
1✔
NEW
28
                                req.Logger.Error(err, "failed to delete ConsoleQuickStart", "name", qs.Name)
×
NEW
29
                        }
×
30
                }
31
        }
32

33
        removeRelatedObjects(req, requiredQSList, "ConsoleQuickStart")
1✔
34
}
35

36
// removeRelatedObjects removes old reference from the related object list
37
// can't use the removeRelatedObject function because the status not get updated during each reconcile loop,
38
// but the old object already removed (above) so you loos track of it. That why we must re-check all the names
39
func removeRelatedObjects(req *common.HcoRequest, requiredNames []string, typeName string) {
1✔
40
        refs := make([]corev1.ObjectReference, 0, len(req.Instance.Status.RelatedObjects))
1✔
41
        foundOldQs := false
1✔
42

1✔
43
        for _, obj := range req.Instance.Status.RelatedObjects {
2✔
44
                if obj.Kind == typeName && !slices.Contains(requiredNames, obj.Name) {
2✔
45
                        foundOldQs = true
1✔
46
                        continue
1✔
47
                }
48
                refs = append(refs, obj)
1✔
49
        }
50

51
        if foundOldQs {
2✔
52
                req.Instance.Status.RelatedObjects = refs
1✔
53
                req.StatusDirty = true
1✔
54
        }
1✔
55
}
56

57
func removeOldImageStream(req *common.HcoRequest, cl client.Client, requiredISList []string) {
1✔
58
        existingISList := &imagev1.ImageStreamList{}
1✔
59
        req.Logger.Info("reading ImageStreams")
1✔
60
        err := cl.List(req.Ctx, existingISList, client.MatchingLabels{hcoutil.AppLabelManagedBy: hcoutil.OperatorName})
1✔
61
        if err != nil {
1✔
NEW
62
                req.Logger.Error(err, "failed to read list of ImageStreams")
×
NEW
63
                return
×
NEW
64
        }
×
65

66
        for _, is := range existingISList.Items {
2✔
67
                if !slices.Contains(requiredISList, is.Name) {
2✔
68
                        req.Logger.Info("deleting ImageStream", "name", is.Name)
1✔
69
                        if _, err = hcoutil.EnsureDeleted(req.Ctx, cl, &is, req.Instance.Name, req.Logger, false, false, true); err != nil {
1✔
NEW
70
                                req.Logger.Error(err, "failed to delete ImageStream", "name", is.Name)
×
NEW
71
                        }
×
72
                }
73
        }
74

75
        removeRelatedObjects(req, requiredISList, "ImageStream")
1✔
76
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc