@@ -19,6 +19,7 @@ package upgrade
1919import (
2020 "context"
2121 "fmt"
22+ "slices"
2223 "strings"
2324
2425 "github.com/tektoncd/operator/pkg/apis/operator/v1alpha1"
@@ -34,6 +35,10 @@ import (
3435 "k8s.io/client-go/rest"
3536)
3637
38+ const (
39+ taskVersiondRetentionCount = 2
40+ )
41+
3742// performs storage versions upgrade
3843// lists all the resources and keeps only one storage version
3944func upgradeStorageVersion (ctx context.Context , logger * zap.SugaredLogger , k8sClient kubernetes.Interface , operatorClient versioned.Interface , restConfig * rest.Config ) error {
@@ -108,3 +113,71 @@ func removeClusterTaskInstallerSets(ctx context.Context, logger *zap.SugaredLogg
108113 }
109114 return nil
110115}
116+
117+ // removeVersionedTaskInstallerSets removes the versioned resolver tasks installersets except latest 2 versions
118+ func removeVersionedTaskInstallerSets (ctx context.Context , logger * zap.SugaredLogger , k8sClient kubernetes.Interface , operatorClient versioned.Interface , restConfig * rest.Config ) error {
119+
120+ if ! v1alpha1 .IsOpenShiftPlatform () {
121+ return nil
122+ }
123+
124+ taskInstallerSetsLabelSelector := metav1.LabelSelector {
125+ MatchLabels : map [string ]string {
126+ v1alpha1 .InstallerSetType : fmt .Sprintf ("%s-%s" , "custom" , "versionedresolvertask" ),
127+ },
128+ }
129+ taskInstallerSetsLabel , err := common .LabelSelector (taskInstallerSetsLabelSelector )
130+ if err != nil {
131+ return err
132+ }
133+
134+ return findAndDeleteInstallerSetsByLabelName (ctx , logger , operatorClient , taskInstallerSetsLabel )
135+ }
136+
137+ // removeVersionedStepActionsInstallerSets removes the versioned resolver step actions installersets except latest 2 versions
138+ func removeVersionedStepActionsInstallerSets (ctx context.Context , logger * zap.SugaredLogger , k8sClient kubernetes.Interface , operatorClient versioned.Interface , restConfig * rest.Config ) error {
139+
140+ if ! v1alpha1 .IsOpenShiftPlatform () {
141+ return nil
142+ }
143+
144+ stepActionsInstallerSetsLabelSelector := metav1.LabelSelector {
145+ MatchLabels : map [string ]string {
146+ v1alpha1 .InstallerSetType : fmt .Sprintf ("%s-%s" , "custom" , "versionedresolverstepaction" ),
147+ },
148+ }
149+ stepActionsInstallerSetsLabel , err := common .LabelSelector (stepActionsInstallerSetsLabelSelector )
150+ if err != nil {
151+ return err
152+ }
153+
154+ return findAndDeleteInstallerSetsByLabelName (ctx , logger , operatorClient , stepActionsInstallerSetsLabel )
155+ }
156+
157+ func findAndDeleteInstallerSetsByLabelName (ctx context.Context , logger * zap.SugaredLogger , operatorClient versioned.Interface , installerSetsLabel string ) error {
158+ tsClient := operatorClient .OperatorV1alpha1 ().TektonInstallerSets ()
159+
160+ installerSets , err := tsClient .List (ctx , metav1.ListOptions {LabelSelector : installerSetsLabel })
161+ if err != nil {
162+ return err
163+ }
164+ if len (installerSets .Items ) < taskVersiondRetentionCount {
165+ return nil
166+ }
167+
168+ installerListName := []string {}
169+ for _ , taskIS := range installerSets .Items {
170+ installerListName = append (installerListName , taskIS .Name )
171+ }
172+
173+ slices .Sort (installerListName )
174+ slices .Reverse (installerListName )
175+
176+ for i := taskVersiondRetentionCount ; i < len (installerListName ); i ++ {
177+ if err := tsClient .Delete (ctx , installerListName [i ], metav1.DeleteOptions {}); err != nil {
178+ logger .Errorw ("failed to delete a installerset" , "installerSetName" , installerListName [i ], err )
179+ return err
180+ }
181+ }
182+ return nil
183+ }
0 commit comments