|
8 | 8 |
|
9 | 9 | semver "github.com/blang/semver/v4"
|
10 | 10 | configv1 "github.com/openshift/api/config/v1"
|
| 11 | + "k8s.io/apimachinery/pkg/labels" |
| 12 | + "k8s.io/apimachinery/pkg/selection" |
11 | 13 | utilerrors "k8s.io/apimachinery/pkg/util/errors"
|
12 | 14 | "sigs.k8s.io/controller-runtime/pkg/client"
|
13 | 15 | "sigs.k8s.io/controller-runtime/pkg/predicate"
|
@@ -230,17 +232,33 @@ func maxOpenShiftVersion(csv *operatorsv1alpha1.ClusterServiceVersion) (*semver.
|
230 | 232 | return max, nil
|
231 | 233 | }
|
232 | 234 |
|
| 235 | +func notCopiedSelector() (labels.Selector, error) { |
| 236 | + requirement, err := labels.NewRequirement(operatorsv1alpha1.CopiedLabelKey, selection.DoesNotExist, nil) |
| 237 | + if err != nil { |
| 238 | + return nil, err |
| 239 | + } |
| 240 | + |
| 241 | + selector := labels.NewSelector() |
| 242 | + selector.Add(*requirement) |
| 243 | + |
| 244 | + return selector, nil |
| 245 | +} |
| 246 | + |
233 | 247 | func olmOperatorRelatedObjects(ctx context.Context, cli client.Client, namespace string) ([]configv1.ObjectReference, error) {
|
| 248 | + selector, err := notCopiedSelector() |
| 249 | + if err != nil { |
| 250 | + return nil, err |
| 251 | + } |
| 252 | + |
234 | 253 | csvList := &operatorsv1alpha1.ClusterServiceVersionList{}
|
235 |
| - if err := cli.List(ctx, csvList, client.InNamespace(namespace)); err != nil { |
| 254 | + if err := cli.List(ctx, csvList, client.InNamespace(namespace), client.MatchingLabelsSelector{Selector: selector}); err != nil { |
236 | 255 | return nil, err
|
237 | 256 | }
|
238 | 257 |
|
239 |
| - // TODO: Is there a better way to filter (server-side maybe)? |
240 | 258 | var refs []configv1.ObjectReference
|
241 | 259 | for _, csv := range csvList.Items {
|
242 | 260 | if csv.IsCopied() {
|
243 |
| - // Filter out copied CSVs |
| 261 | + // Filter out copied CSVs that the label selector missed |
244 | 262 | continue
|
245 | 263 | }
|
246 | 264 |
|
|
0 commit comments