Skip to content

Commit fa7a4f5

Browse files
authored
Extract single place to set up indexers (#3454)
1 parent 9b51f25 commit fa7a4f5

9 files changed

+82
-70
lines changed

.golangci.yaml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
run:
22
timeout: 3m
33
output:
4-
format: github-actions
4+
formats:
5+
- format: github-actions
6+
path: stdout
57
linters-settings:
68
errcheck:
79
exclude-functions:

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ endif
6868
all: manager
6969

7070
lint:
71-
docker run --rm -v $(PWD):/app -w /app golangci/golangci-lint:v1.55.2 golangci-lint run
71+
docker run --rm -v $(PWD):/app -w /app golangci/golangci-lint:v1.57.2 golangci-lint run
7272

7373
GO_TEST_ARGS ?= -short
7474

controllers/actions.github.com/autoscalinglistener_controller.go

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -690,30 +690,6 @@ func (r *AutoscalingListenerReconciler) publishRunningListener(autoscalingListen
690690

691691
// SetupWithManager sets up the controller with the Manager.
692692
func (r *AutoscalingListenerReconciler) SetupWithManager(mgr ctrl.Manager) error {
693-
groupVersionIndexer := func(rawObj client.Object) []string {
694-
groupVersion := v1alpha1.GroupVersion.String()
695-
owner := metav1.GetControllerOf(rawObj)
696-
if owner == nil {
697-
return nil
698-
}
699-
700-
// ...make sure it is owned by this controller
701-
if owner.APIVersion != groupVersion || owner.Kind != "AutoscalingListener" {
702-
return nil
703-
}
704-
705-
// ...and if so, return it
706-
return []string{owner.Name}
707-
}
708-
709-
if err := mgr.GetFieldIndexer().IndexField(context.Background(), &corev1.Pod{}, resourceOwnerKey, groupVersionIndexer); err != nil {
710-
return err
711-
}
712-
713-
if err := mgr.GetFieldIndexer().IndexField(context.Background(), &corev1.ServiceAccount{}, resourceOwnerKey, groupVersionIndexer); err != nil {
714-
return err
715-
}
716-
717693
labelBasedWatchFunc := func(_ context.Context, obj client.Object) []reconcile.Request {
718694
var requests []reconcile.Request
719695
labels := obj.GetLabels()

controllers/actions.github.com/autoscalingrunnerset_controller.go

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ import (
3030
corev1 "k8s.io/api/core/v1"
3131
rbacv1 "k8s.io/api/rbac/v1"
3232
kerrors "k8s.io/apimachinery/pkg/api/errors"
33-
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3433
"k8s.io/apimachinery/pkg/runtime"
3534
"k8s.io/apimachinery/pkg/types"
3635
ctrl "sigs.k8s.io/controller-runtime"
@@ -759,26 +758,6 @@ func (r *AutoscalingRunnerSetReconciler) actionsClientOptionsFor(ctx context.Con
759758

760759
// SetupWithManager sets up the controller with the Manager.
761760
func (r *AutoscalingRunnerSetReconciler) SetupWithManager(mgr ctrl.Manager) error {
762-
groupVersionIndexer := func(rawObj client.Object) []string {
763-
groupVersion := v1alpha1.GroupVersion.String()
764-
owner := metav1.GetControllerOf(rawObj)
765-
if owner == nil {
766-
return nil
767-
}
768-
769-
// ...make sure it is owned by this controller
770-
if owner.APIVersion != groupVersion || owner.Kind != "AutoscalingRunnerSet" {
771-
return nil
772-
}
773-
774-
// ...and if so, return it
775-
return []string{owner.Name}
776-
}
777-
778-
if err := mgr.GetFieldIndexer().IndexField(context.Background(), &v1alpha1.EphemeralRunnerSet{}, resourceOwnerKey, groupVersionIndexer); err != nil {
779-
return err
780-
}
781-
782761
return ctrl.NewControllerManagedBy(mgr).
783762
For(&v1alpha1.AutoscalingRunnerSet{}).
784763
Owns(&v1alpha1.EphemeralRunnerSet{}).

controllers/actions.github.com/ephemeralrunner_controller.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -815,7 +815,6 @@ func (r *EphemeralRunnerReconciler) deleteRunnerFromService(ctx context.Context,
815815

816816
// SetupWithManager sets up the controller with the Manager.
817817
func (r *EphemeralRunnerReconciler) SetupWithManager(mgr ctrl.Manager) error {
818-
// TODO(nikola-jokic): Add indexing and filtering fields on corev1.Pod{}
819818
return ctrl.NewControllerManagedBy(mgr).
820819
For(&v1alpha1.EphemeralRunner{}).
821820
Owns(&corev1.Pod{}).

controllers/actions.github.com/ephemeralrunnerset_controller.go

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -574,28 +574,6 @@ func (r *EphemeralRunnerSetReconciler) actionsClientOptionsFor(ctx context.Conte
574574

575575
// SetupWithManager sets up the controller with the Manager.
576576
func (r *EphemeralRunnerSetReconciler) SetupWithManager(mgr ctrl.Manager) error {
577-
// Index EphemeralRunner owned by EphemeralRunnerSet so we can perform faster look ups.
578-
if err := mgr.GetFieldIndexer().IndexField(context.Background(), &v1alpha1.EphemeralRunner{}, resourceOwnerKey, func(rawObj client.Object) []string {
579-
groupVersion := v1alpha1.GroupVersion.String()
580-
581-
// grab the job object, extract the owner...
582-
ephemeralRunner := rawObj.(*v1alpha1.EphemeralRunner)
583-
owner := metav1.GetControllerOf(ephemeralRunner)
584-
if owner == nil {
585-
return nil
586-
}
587-
588-
// ...make sure it is owned by this controller
589-
if owner.APIVersion != groupVersion || owner.Kind != "EphemeralRunnerSet" {
590-
return nil
591-
}
592-
593-
// ...and if so, return it
594-
return []string{owner.Name}
595-
}); err != nil {
596-
return err
597-
}
598-
599577
return ctrl.NewControllerManagedBy(mgr).
600578
For(&v1alpha1.EphemeralRunnerSet{}).
601579
Owns(&v1alpha1.EphemeralRunner{}).

controllers/actions.github.com/helpers_test.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@ const defaultGitHubToken = "gh_token"
1818

1919
func startManagers(t ginkgo.GinkgoTInterface, first manager.Manager, others ...manager.Manager) {
2020
for _, mgr := range append([]manager.Manager{first}, others...) {
21+
if err := SetupIndexers(mgr); err != nil {
22+
t.Fatalf("failed to setup indexers: %v", err)
23+
}
2124
ctx, cancel := context.WithCancel(context.Background())
2225

2326
g, ctx := errgroup.WithContext(ctx)
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
package actionsgithubcom
2+
3+
import (
4+
"context"
5+
"slices"
6+
7+
v1alpha1 "github.com/actions/actions-runner-controller/apis/actions.github.com/v1alpha1"
8+
corev1 "k8s.io/api/core/v1"
9+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
10+
ctrl "sigs.k8s.io/controller-runtime"
11+
"sigs.k8s.io/controller-runtime/pkg/client"
12+
)
13+
14+
func SetupIndexers(mgr ctrl.Manager) error {
15+
if err := mgr.GetFieldIndexer().IndexField(
16+
context.Background(),
17+
&corev1.Pod{},
18+
resourceOwnerKey,
19+
newGroupVersionOwnerKindIndexer("AutoscalingListener", "EphemeralRunner"),
20+
); err != nil {
21+
return err
22+
}
23+
24+
if err := mgr.GetFieldIndexer().IndexField(
25+
context.Background(),
26+
&corev1.ServiceAccount{},
27+
resourceOwnerKey,
28+
newGroupVersionOwnerKindIndexer("AutoscalingListener"),
29+
); err != nil {
30+
return err
31+
}
32+
33+
if err := mgr.GetFieldIndexer().IndexField(
34+
context.Background(),
35+
&v1alpha1.EphemeralRunnerSet{},
36+
resourceOwnerKey,
37+
newGroupVersionOwnerKindIndexer("AutoscalingRunnerSet"),
38+
); err != nil {
39+
return err
40+
}
41+
42+
if err := mgr.GetFieldIndexer().IndexField(
43+
context.Background(),
44+
&v1alpha1.EphemeralRunner{},
45+
resourceOwnerKey,
46+
newGroupVersionOwnerKindIndexer("EphemeralRunnerSet"),
47+
); err != nil {
48+
return err
49+
}
50+
51+
return nil
52+
}
53+
54+
func newGroupVersionOwnerKindIndexer(ownerKind string, otherOwnerKinds ...string) client.IndexerFunc {
55+
owners := append([]string{ownerKind}, otherOwnerKinds...)
56+
return func(o client.Object) []string {
57+
groupVersion := v1alpha1.GroupVersion.String()
58+
owner := metav1.GetControllerOfNoCopy(o)
59+
if owner == nil {
60+
return nil
61+
}
62+
63+
// ...make sure it is owned by this controller
64+
if owner.APIVersion != groupVersion || !slices.Contains(owners, owner.Kind) {
65+
return nil
66+
}
67+
68+
// ...and if so, return it
69+
return []string{owner.Name}
70+
}
71+
}

main.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -239,6 +239,10 @@ func main() {
239239
}
240240

241241
if autoScalingRunnerSetOnly {
242+
if err := actionsgithubcom.SetupIndexers(mgr); err != nil {
243+
log.Error(err, "unable to setup indexers")
244+
os.Exit(1)
245+
}
242246
managerImage := os.Getenv("CONTROLLER_MANAGER_CONTAINER_IMAGE")
243247
if managerImage == "" {
244248
log.Error(err, "unable to obtain listener image")

0 commit comments

Comments
 (0)