Skip to content

Commit f8b1721

Browse files
authored
Catalog source affinity (#2963)
* Update operator framework api dependency Signed-off-by: James Hewitt <[email protected]> * Add affinity customization to catalog source grpc pods Signed-off-by: James Hewitt <[email protected]> --------- Signed-off-by: James Hewitt <[email protected]>
1 parent e908cfc commit f8b1721

File tree

10 files changed

+991
-5
lines changed

10 files changed

+991
-5
lines changed

deploy/chart/crds/0000_50_olm_00-catalogsources.crd.yaml

+461
Large diffs are not rendered by default.

go.mod

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ require (
2424
github.com/onsi/gomega v1.24.1
2525
github.com/openshift/api v3.9.0+incompatible
2626
github.com/openshift/client-go v0.0.0-20220525160904-9e1acff93e4a
27-
github.com/operator-framework/api v0.17.5
27+
github.com/operator-framework/api v0.17.6
2828
github.com/operator-framework/operator-registry v1.17.5
2929
github.com/otiai10/copy v1.2.0
3030
github.com/pkg/errors v0.9.1

go.sum

+2-2
Original file line numberDiff line numberDiff line change
@@ -1040,8 +1040,8 @@ github.com/openshift/client-go v0.0.0-20221019143426-16aed247da5c h1:CV76yFOTXmq
10401040
github.com/openshift/client-go v0.0.0-20221019143426-16aed247da5c/go.mod h1:lFMO8mLHXWFzSdYvGNo8ivF9SfF6zInA8ZGw4phRnUE=
10411041
github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw=
10421042
github.com/operator-framework/api v0.7.1/go.mod h1:L7IvLd/ckxJEJg/t4oTTlnHKAJIP/p51AvEslW3wYdY=
1043-
github.com/operator-framework/api v0.17.5 h1:9d0pc6m1Vp4QeS8i5dhl/B0nifhKQdtw+iFsNx0An0Q=
1044-
github.com/operator-framework/api v0.17.5/go.mod h1:l/cuwtPxkVUY7fzYgdust2m9tlmb8I4pOvbsUufRb24=
1043+
github.com/operator-framework/api v0.17.6 h1:E6+vlvYUKafvoXYtCuHlDZrXX4vl8AT+r93OxNlzjpU=
1044+
github.com/operator-framework/api v0.17.6/go.mod h1:l/cuwtPxkVUY7fzYgdust2m9tlmb8I4pOvbsUufRb24=
10451045
github.com/operator-framework/operator-registry v1.17.5 h1:LR8m1rFz5Gcyje8WK6iYt+gIhtzqo52zMRALdmTYHT0=
10461046
github.com/operator-framework/operator-registry v1.17.5/go.mod h1:sRQIgDMZZdUcmHltzyCnM6RUoDF+WS8Arj1BQIARDS8=
10471047
github.com/otiai10/copy v1.2.0 h1:HvG945u96iNadPoG2/Ja2+AUJeW5YuFQMixq9yirC+k=

pkg/controller/registry/reconciler/reconciler.go

+5
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,11 @@ func Pod(source *operatorsv1alpha1.CatalogSource, name string, img string, saNam
214214
pod.Spec.Tolerations[index] = *toleration.DeepCopy()
215215
}
216216
}
217+
218+
// Override affinity
219+
if grpcPodConfig.Affinity != nil {
220+
pod.Spec.Affinity = grpcPodConfig.Affinity.DeepCopy()
221+
}
217222
}
218223

219224
// Set priorityclass if its annotation exists

pkg/controller/registry/reconciler/reconciler_test.go

+50
Original file line numberDiff line numberDiff line change
@@ -254,11 +254,33 @@ func TestPodSchedulingOverrides(t *testing.T) {
254254
},
255255
}
256256

257+
var overriddenAffinity = &corev1.Affinity{
258+
NodeAffinity: &corev1.NodeAffinity{
259+
RequiredDuringSchedulingIgnoredDuringExecution: &corev1.NodeSelector{
260+
NodeSelectorTerms: []corev1.NodeSelectorTerm{
261+
{
262+
MatchExpressions: []corev1.NodeSelectorRequirement{
263+
{
264+
Key: "kubernetes.io/arch",
265+
Operator: corev1.NodeSelectorOpIn,
266+
Values: []string{
267+
"amd64",
268+
"arm",
269+
},
270+
},
271+
},
272+
},
273+
},
274+
},
275+
},
276+
}
277+
257278
testCases := []struct {
258279
title string
259280
catalogSource *v1alpha1.CatalogSource
260281
expectedNodeSelectors map[string]string
261282
expectedTolerations []corev1.Toleration
283+
expectedAffinity *corev1.Affinity
262284
expectedPriorityClassName string
263285
annotations map[string]string
264286
}{
@@ -275,6 +297,7 @@ func TestPodSchedulingOverrides(t *testing.T) {
275297
},
276298
},
277299
expectedTolerations: nil,
300+
expectedAffinity: nil,
278301
expectedPriorityClassName: defaultPriorityClassName,
279302
expectedNodeSelectors: defaultNodeSelectors,
280303
}, {
@@ -293,6 +316,7 @@ func TestPodSchedulingOverrides(t *testing.T) {
293316
},
294317
},
295318
expectedTolerations: nil,
319+
expectedAffinity: nil,
296320
expectedPriorityClassName: defaultPriorityClassName,
297321
expectedNodeSelectors: overriddenNodeSelectors,
298322
}, {
@@ -311,6 +335,7 @@ func TestPodSchedulingOverrides(t *testing.T) {
311335
},
312336
},
313337
expectedTolerations: nil,
338+
expectedAffinity: nil,
314339
expectedPriorityClassName: overriddenPriorityClassName,
315340
expectedNodeSelectors: defaultNodeSelectors,
316341
}, {
@@ -329,6 +354,7 @@ func TestPodSchedulingOverrides(t *testing.T) {
329354
},
330355
},
331356
expectedTolerations: nil,
357+
expectedAffinity: nil,
332358
expectedPriorityClassName: defaultPriorityClassName,
333359
expectedNodeSelectors: defaultNodeSelectors,
334360
}, {
@@ -347,6 +373,26 @@ func TestPodSchedulingOverrides(t *testing.T) {
347373
},
348374
},
349375
expectedTolerations: overriddenTolerations,
376+
expectedAffinity: nil,
377+
expectedPriorityClassName: defaultPriorityClassName,
378+
expectedNodeSelectors: defaultNodeSelectors,
379+
}, {
380+
title: "Override affinity",
381+
catalogSource: &v1alpha1.CatalogSource{
382+
ObjectMeta: metav1.ObjectMeta{
383+
Name: "test",
384+
Namespace: "testns",
385+
},
386+
Spec: v1alpha1.CatalogSourceSpec{
387+
SourceType: v1alpha1.SourceTypeGrpc,
388+
Image: "repo/image:tag",
389+
GrpcPodConfig: &v1alpha1.GrpcPodConfig{
390+
Affinity: overriddenAffinity,
391+
},
392+
},
393+
},
394+
expectedTolerations: nil,
395+
expectedAffinity: overriddenAffinity,
350396
expectedPriorityClassName: defaultPriorityClassName,
351397
expectedNodeSelectors: defaultNodeSelectors,
352398
}, {
@@ -363,10 +409,12 @@ func TestPodSchedulingOverrides(t *testing.T) {
363409
NodeSelector: overriddenNodeSelectors,
364410
PriorityClassName: &overriddenPriorityClassName,
365411
Tolerations: overriddenTolerations,
412+
Affinity: overriddenAffinity,
366413
},
367414
},
368415
},
369416
expectedTolerations: overriddenTolerations,
417+
expectedAffinity: overriddenAffinity,
370418
expectedPriorityClassName: overriddenPriorityClassName,
371419
expectedNodeSelectors: overriddenNodeSelectors,
372420
}, {
@@ -385,6 +433,7 @@ func TestPodSchedulingOverrides(t *testing.T) {
385433
},
386434
},
387435
expectedTolerations: nil,
436+
expectedAffinity: nil,
388437
annotations: map[string]string{
389438
CatalogPriorityClassKey: "some-OTHER-prio-class",
390439
},
@@ -398,5 +447,6 @@ func TestPodSchedulingOverrides(t *testing.T) {
398447
require.Equal(t, testCase.expectedNodeSelectors, pod.Spec.NodeSelector)
399448
require.Equal(t, testCase.expectedPriorityClassName, pod.Spec.PriorityClassName)
400449
require.Equal(t, testCase.expectedTolerations, pod.Spec.Tolerations)
450+
require.Equal(t, testCase.expectedAffinity, pod.Spec.Affinity)
401451
}
402452
}

0 commit comments

Comments
 (0)