Extract single place to set up indexers (#3454)
This commit is contained in:
		
							parent
							
								
									9b51f25800
								
							
						
					
					
						commit
						fa7a4f584e
					
				|  | @ -1,7 +1,9 @@ | ||||||
| run: | run: | ||||||
|   timeout: 3m |   timeout: 3m | ||||||
| output: | output: | ||||||
|   format: github-actions |   formats: | ||||||
|  |     - format: github-actions | ||||||
|  |       path: stdout | ||||||
| linters-settings: | linters-settings: | ||||||
|   errcheck: |   errcheck: | ||||||
|     exclude-functions: |     exclude-functions: | ||||||
|  |  | ||||||
							
								
								
									
										2
									
								
								Makefile
								
								
								
								
							
							
						
						
									
										2
									
								
								Makefile
								
								
								
								
							|  | @ -68,7 +68,7 @@ endif | ||||||
| all: manager | all: manager | ||||||
| 
 | 
 | ||||||
| lint: | lint: | ||||||
| 	docker run --rm -v $(PWD):/app -w /app golangci/golangci-lint:v1.55.2 golangci-lint run | 	docker run --rm -v $(PWD):/app -w /app golangci/golangci-lint:v1.57.2 golangci-lint run | ||||||
| 
 | 
 | ||||||
| GO_TEST_ARGS ?= -short | GO_TEST_ARGS ?= -short | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -690,30 +690,6 @@ func (r *AutoscalingListenerReconciler) publishRunningListener(autoscalingListen | ||||||
| 
 | 
 | ||||||
| // SetupWithManager sets up the controller with the Manager.
 | // SetupWithManager sets up the controller with the Manager.
 | ||||||
| func (r *AutoscalingListenerReconciler) SetupWithManager(mgr ctrl.Manager) error { | func (r *AutoscalingListenerReconciler) SetupWithManager(mgr ctrl.Manager) error { | ||||||
| 	groupVersionIndexer := func(rawObj client.Object) []string { |  | ||||||
| 		groupVersion := v1alpha1.GroupVersion.String() |  | ||||||
| 		owner := metav1.GetControllerOf(rawObj) |  | ||||||
| 		if owner == nil { |  | ||||||
| 			return nil |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		// ...make sure it is owned by this controller
 |  | ||||||
| 		if owner.APIVersion != groupVersion || owner.Kind != "AutoscalingListener" { |  | ||||||
| 			return nil |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		// ...and if so, return it
 |  | ||||||
| 		return []string{owner.Name} |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	if err := mgr.GetFieldIndexer().IndexField(context.Background(), &corev1.Pod{}, resourceOwnerKey, groupVersionIndexer); err != nil { |  | ||||||
| 		return err |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	if err := mgr.GetFieldIndexer().IndexField(context.Background(), &corev1.ServiceAccount{}, resourceOwnerKey, groupVersionIndexer); err != nil { |  | ||||||
| 		return err |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	labelBasedWatchFunc := func(_ context.Context, obj client.Object) []reconcile.Request { | 	labelBasedWatchFunc := func(_ context.Context, obj client.Object) []reconcile.Request { | ||||||
| 		var requests []reconcile.Request | 		var requests []reconcile.Request | ||||||
| 		labels := obj.GetLabels() | 		labels := obj.GetLabels() | ||||||
|  |  | ||||||
|  | @ -30,7 +30,6 @@ import ( | ||||||
| 	corev1 "k8s.io/api/core/v1" | 	corev1 "k8s.io/api/core/v1" | ||||||
| 	rbacv1 "k8s.io/api/rbac/v1" | 	rbacv1 "k8s.io/api/rbac/v1" | ||||||
| 	kerrors "k8s.io/apimachinery/pkg/api/errors" | 	kerrors "k8s.io/apimachinery/pkg/api/errors" | ||||||
| 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" |  | ||||||
| 	"k8s.io/apimachinery/pkg/runtime" | 	"k8s.io/apimachinery/pkg/runtime" | ||||||
| 	"k8s.io/apimachinery/pkg/types" | 	"k8s.io/apimachinery/pkg/types" | ||||||
| 	ctrl "sigs.k8s.io/controller-runtime" | 	ctrl "sigs.k8s.io/controller-runtime" | ||||||
|  | @ -759,26 +758,6 @@ func (r *AutoscalingRunnerSetReconciler) actionsClientOptionsFor(ctx context.Con | ||||||
| 
 | 
 | ||||||
| // SetupWithManager sets up the controller with the Manager.
 | // SetupWithManager sets up the controller with the Manager.
 | ||||||
| func (r *AutoscalingRunnerSetReconciler) SetupWithManager(mgr ctrl.Manager) error { | func (r *AutoscalingRunnerSetReconciler) SetupWithManager(mgr ctrl.Manager) error { | ||||||
| 	groupVersionIndexer := func(rawObj client.Object) []string { |  | ||||||
| 		groupVersion := v1alpha1.GroupVersion.String() |  | ||||||
| 		owner := metav1.GetControllerOf(rawObj) |  | ||||||
| 		if owner == nil { |  | ||||||
| 			return nil |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		// ...make sure it is owned by this controller
 |  | ||||||
| 		if owner.APIVersion != groupVersion || owner.Kind != "AutoscalingRunnerSet" { |  | ||||||
| 			return nil |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		// ...and if so, return it
 |  | ||||||
| 		return []string{owner.Name} |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	if err := mgr.GetFieldIndexer().IndexField(context.Background(), &v1alpha1.EphemeralRunnerSet{}, resourceOwnerKey, groupVersionIndexer); err != nil { |  | ||||||
| 		return err |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	return ctrl.NewControllerManagedBy(mgr). | 	return ctrl.NewControllerManagedBy(mgr). | ||||||
| 		For(&v1alpha1.AutoscalingRunnerSet{}). | 		For(&v1alpha1.AutoscalingRunnerSet{}). | ||||||
| 		Owns(&v1alpha1.EphemeralRunnerSet{}). | 		Owns(&v1alpha1.EphemeralRunnerSet{}). | ||||||
|  |  | ||||||
|  | @ -815,7 +815,6 @@ func (r *EphemeralRunnerReconciler) deleteRunnerFromService(ctx context.Context, | ||||||
| 
 | 
 | ||||||
| // SetupWithManager sets up the controller with the Manager.
 | // SetupWithManager sets up the controller with the Manager.
 | ||||||
| func (r *EphemeralRunnerReconciler) SetupWithManager(mgr ctrl.Manager) error { | func (r *EphemeralRunnerReconciler) SetupWithManager(mgr ctrl.Manager) error { | ||||||
| 	// TODO(nikola-jokic): Add indexing and filtering fields on corev1.Pod{}
 |  | ||||||
| 	return ctrl.NewControllerManagedBy(mgr). | 	return ctrl.NewControllerManagedBy(mgr). | ||||||
| 		For(&v1alpha1.EphemeralRunner{}). | 		For(&v1alpha1.EphemeralRunner{}). | ||||||
| 		Owns(&corev1.Pod{}). | 		Owns(&corev1.Pod{}). | ||||||
|  |  | ||||||
|  | @ -574,28 +574,6 @@ func (r *EphemeralRunnerSetReconciler) actionsClientOptionsFor(ctx context.Conte | ||||||
| 
 | 
 | ||||||
| // SetupWithManager sets up the controller with the Manager.
 | // SetupWithManager sets up the controller with the Manager.
 | ||||||
| func (r *EphemeralRunnerSetReconciler) SetupWithManager(mgr ctrl.Manager) error { | func (r *EphemeralRunnerSetReconciler) SetupWithManager(mgr ctrl.Manager) error { | ||||||
| 	// Index EphemeralRunner owned by EphemeralRunnerSet so we can perform faster look ups.
 |  | ||||||
| 	if err := mgr.GetFieldIndexer().IndexField(context.Background(), &v1alpha1.EphemeralRunner{}, resourceOwnerKey, func(rawObj client.Object) []string { |  | ||||||
| 		groupVersion := v1alpha1.GroupVersion.String() |  | ||||||
| 
 |  | ||||||
| 		// grab the job object, extract the owner...
 |  | ||||||
| 		ephemeralRunner := rawObj.(*v1alpha1.EphemeralRunner) |  | ||||||
| 		owner := metav1.GetControllerOf(ephemeralRunner) |  | ||||||
| 		if owner == nil { |  | ||||||
| 			return nil |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		// ...make sure it is owned by this controller
 |  | ||||||
| 		if owner.APIVersion != groupVersion || owner.Kind != "EphemeralRunnerSet" { |  | ||||||
| 			return nil |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		// ...and if so, return it
 |  | ||||||
| 		return []string{owner.Name} |  | ||||||
| 	}); err != nil { |  | ||||||
| 		return err |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	return ctrl.NewControllerManagedBy(mgr). | 	return ctrl.NewControllerManagedBy(mgr). | ||||||
| 		For(&v1alpha1.EphemeralRunnerSet{}). | 		For(&v1alpha1.EphemeralRunnerSet{}). | ||||||
| 		Owns(&v1alpha1.EphemeralRunner{}). | 		Owns(&v1alpha1.EphemeralRunner{}). | ||||||
|  |  | ||||||
|  | @ -18,6 +18,9 @@ const defaultGitHubToken = "gh_token" | ||||||
| 
 | 
 | ||||||
| func startManagers(t ginkgo.GinkgoTInterface, first manager.Manager, others ...manager.Manager) { | func startManagers(t ginkgo.GinkgoTInterface, first manager.Manager, others ...manager.Manager) { | ||||||
| 	for _, mgr := range append([]manager.Manager{first}, others...) { | 	for _, mgr := range append([]manager.Manager{first}, others...) { | ||||||
|  | 		if err := SetupIndexers(mgr); err != nil { | ||||||
|  | 			t.Fatalf("failed to setup indexers: %v", err) | ||||||
|  | 		} | ||||||
| 		ctx, cancel := context.WithCancel(context.Background()) | 		ctx, cancel := context.WithCancel(context.Background()) | ||||||
| 
 | 
 | ||||||
| 		g, ctx := errgroup.WithContext(ctx) | 		g, ctx := errgroup.WithContext(ctx) | ||||||
|  |  | ||||||
|  | @ -0,0 +1,71 @@ | ||||||
|  | package actionsgithubcom | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"context" | ||||||
|  | 	"slices" | ||||||
|  | 
 | ||||||
|  | 	v1alpha1 "github.com/actions/actions-runner-controller/apis/actions.github.com/v1alpha1" | ||||||
|  | 	corev1 "k8s.io/api/core/v1" | ||||||
|  | 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||||||
|  | 	ctrl "sigs.k8s.io/controller-runtime" | ||||||
|  | 	"sigs.k8s.io/controller-runtime/pkg/client" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | func SetupIndexers(mgr ctrl.Manager) error { | ||||||
|  | 	if err := mgr.GetFieldIndexer().IndexField( | ||||||
|  | 		context.Background(), | ||||||
|  | 		&corev1.Pod{}, | ||||||
|  | 		resourceOwnerKey, | ||||||
|  | 		newGroupVersionOwnerKindIndexer("AutoscalingListener", "EphemeralRunner"), | ||||||
|  | 	); err != nil { | ||||||
|  | 		return err | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	if err := mgr.GetFieldIndexer().IndexField( | ||||||
|  | 		context.Background(), | ||||||
|  | 		&corev1.ServiceAccount{}, | ||||||
|  | 		resourceOwnerKey, | ||||||
|  | 		newGroupVersionOwnerKindIndexer("AutoscalingListener"), | ||||||
|  | 	); err != nil { | ||||||
|  | 		return err | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	if err := mgr.GetFieldIndexer().IndexField( | ||||||
|  | 		context.Background(), | ||||||
|  | 		&v1alpha1.EphemeralRunnerSet{}, | ||||||
|  | 		resourceOwnerKey, | ||||||
|  | 		newGroupVersionOwnerKindIndexer("AutoscalingRunnerSet"), | ||||||
|  | 	); err != nil { | ||||||
|  | 		return err | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	if err := mgr.GetFieldIndexer().IndexField( | ||||||
|  | 		context.Background(), | ||||||
|  | 		&v1alpha1.EphemeralRunner{}, | ||||||
|  | 		resourceOwnerKey, | ||||||
|  | 		newGroupVersionOwnerKindIndexer("EphemeralRunnerSet"), | ||||||
|  | 	); err != nil { | ||||||
|  | 		return err | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func newGroupVersionOwnerKindIndexer(ownerKind string, otherOwnerKinds ...string) client.IndexerFunc { | ||||||
|  | 	owners := append([]string{ownerKind}, otherOwnerKinds...) | ||||||
|  | 	return func(o client.Object) []string { | ||||||
|  | 		groupVersion := v1alpha1.GroupVersion.String() | ||||||
|  | 		owner := metav1.GetControllerOfNoCopy(o) | ||||||
|  | 		if owner == nil { | ||||||
|  | 			return nil | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		// ...make sure it is owned by this controller
 | ||||||
|  | 		if owner.APIVersion != groupVersion || !slices.Contains(owners, owner.Kind) { | ||||||
|  | 			return nil | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		// ...and if so, return it
 | ||||||
|  | 		return []string{owner.Name} | ||||||
|  | 	} | ||||||
|  | } | ||||||
							
								
								
									
										4
									
								
								main.go
								
								
								
								
							
							
						
						
									
										4
									
								
								main.go
								
								
								
								
							|  | @ -239,6 +239,10 @@ func main() { | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if autoScalingRunnerSetOnly { | 	if autoScalingRunnerSetOnly { | ||||||
|  | 		if err := actionsgithubcom.SetupIndexers(mgr); err != nil { | ||||||
|  | 			log.Error(err, "unable to setup indexers") | ||||||
|  | 			os.Exit(1) | ||||||
|  | 		} | ||||||
| 		managerImage := os.Getenv("CONTROLLER_MANAGER_CONTAINER_IMAGE") | 		managerImage := os.Getenv("CONTROLLER_MANAGER_CONTAINER_IMAGE") | ||||||
| 		if managerImage == "" { | 		if managerImage == "" { | ||||||
| 			log.Error(err, "unable to obtain listener image") | 			log.Error(err, "unable to obtain listener image") | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue