Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,7 @@ func (r *AutoscalingListenerReconciler) Reconcile(ctx context.Context, req ctrl.
}

log.Info("Successfully removed finalizer after cleanup")
r.ResourceCache.Delete(&autoscalingListener)
return ctrl.Result{}, nil
}

Expand Down Expand Up @@ -500,6 +501,7 @@ func (r *AutoscalingListenerReconciler) Reconcile(ctx context.Context, req ctrl.
return ctrl.Result{}, nil
}

r.ResourceCache.listenerPod.Delete(&autoscalingListener)
desiredPod, err := r.newScaleSetListenerPod(
&autoscalingListener,
&listenerConfigSecret,
Expand Down Expand Up @@ -685,6 +687,7 @@ func (r *AutoscalingListenerReconciler) cleanupResources(ctx context.Context, au
}

func (r *AutoscalingListenerReconciler) createServiceAccountForListener(ctx context.Context, autoscalingListener *v1alpha1.AutoscalingListener, logger logr.Logger) (ctrl.Result, error) {
r.ResourceCache.listenerServiceAccount.Delete(autoscalingListener)
newServiceAccount, err := r.newScaleSetListenerServiceAccount(autoscalingListener)
if err != nil {
return ctrl.Result{}, err
Expand Down Expand Up @@ -768,6 +771,7 @@ func (r *AutoscalingListenerReconciler) createProxySecret(ctx context.Context, a
}

func (r *AutoscalingListenerReconciler) createRoleForListener(ctx context.Context, autoscalingListener *v1alpha1.AutoscalingListener, logger logr.Logger) (ctrl.Result, error) {
r.ResourceCache.listenerRole.Delete(autoscalingListener)
newRole := r.newScaleSetListenerRole(autoscalingListener)

logger.Info("Creating listener role", "namespace", newRole.Namespace, "name", newRole.Name, "rules", newRole.Rules)
Expand All @@ -781,6 +785,7 @@ func (r *AutoscalingListenerReconciler) createRoleForListener(ctx context.Contex
}

func (r *AutoscalingListenerReconciler) createRoleBindingForListener(ctx context.Context, autoscalingListener *v1alpha1.AutoscalingListener, listenerRole *rbacv1.Role, serviceAccount *corev1.ServiceAccount, logger logr.Logger) (ctrl.Result, error) {
r.ResourceCache.listenerRoleBinding.Delete(autoscalingListener)
newRoleBinding := r.newScaleSetListenerRoleBinding(autoscalingListener, listenerRole, serviceAccount)

logger.Info("Creating listener role binding",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ var _ = Describe("Test AutoScalingListener controller", func() {
var autoscalingRunnerSet *v1alpha1.AutoscalingRunnerSet
var configSecret *corev1.Secret
var autoscalingListener *v1alpha1.AutoscalingListener
var resourceCache *ResourceCache

BeforeEach(func() {
ctx = context.Background()
Expand All @@ -49,7 +50,9 @@ var _ = Describe("Test AutoScalingListener controller", func() {
scalefake.NewMultiClient(),
)

resourceCache = newTestResourceCache()
rb := ResourceBuilder{
ResourceCache: resourceCache,
SecretResolver: secretResolver,
}

Expand Down Expand Up @@ -230,6 +233,17 @@ var _ = Describe("Test AutoScalingListener controller", func() {
autoscalingListenerTestTimeout,
autoscalingListenerTestInterval,
).Should(BeEquivalentTo(autoscalingListener.Name), "Pod should be created")

Eventually(
func() bool {
return resourceCacheStateHasMainObjectEntries(resourceCache.listenerServiceAccount, created) &&
resourceCacheStateHasMainObjectEntries(resourceCache.listenerRole, created) &&
resourceCacheStateHasMainObjectEntries(resourceCache.listenerRoleBinding, created) &&
resourceCacheStateHasMainObjectEntries(resourceCache.listenerPod, created)
},
autoscalingListenerTestTimeout,
autoscalingListenerTestInterval,
).Should(BeTrue(), "AutoScalingListener service account, role, role binding, and pod resources should be cached after reconciliation")
})
})

Expand All @@ -250,8 +264,22 @@ var _ = Describe("Test AutoScalingListener controller", func() {
autoscalingListenerTestInterval,
).Should(BeEquivalentTo(autoscalingListener.Name), "Pod should be created")

created := new(v1alpha1.AutoscalingListener)
err := k8sClient.Get(ctx, client.ObjectKey{Name: autoscalingListener.Name, Namespace: autoscalingListener.Namespace}, created)
Expect(err).NotTo(HaveOccurred(), "failed to get AutoScalingListener")
Eventually(
func() bool {
return resourceCacheStateHasMainObjectEntries(resourceCache.listenerServiceAccount, created) &&
resourceCacheStateHasMainObjectEntries(resourceCache.listenerRole, created) &&
resourceCacheStateHasMainObjectEntries(resourceCache.listenerRoleBinding, created) &&
resourceCacheStateHasMainObjectEntries(resourceCache.listenerPod, created)
},
autoscalingListenerTestTimeout,
autoscalingListenerTestInterval,
).Should(BeTrue(), "AutoScalingListener service account, role, role binding, and pod resources should be cached before deletion")

// Delete the AutoScalingListener
err := k8sClient.Delete(ctx, autoscalingListener)
err = k8sClient.Delete(ctx, autoscalingListener)
Expect(err).NotTo(HaveOccurred(), "failed to delete test AutoScalingListener")

// Cleanup the listener pod
Expand Down Expand Up @@ -342,6 +370,17 @@ var _ = Describe("Test AutoScalingListener controller", func() {
autoscalingListenerTestTimeout,
autoscalingListenerTestInterval,
).ShouldNot(Succeed(), "failed to delete AutoScalingListener")

Eventually(
func() bool {
return resourceCacheStateHasMainObjectEntries(resourceCache.listenerServiceAccount, created) ||
resourceCacheStateHasMainObjectEntries(resourceCache.listenerRole, created) ||
resourceCacheStateHasMainObjectEntries(resourceCache.listenerRoleBinding, created) ||
resourceCacheStateHasMainObjectEntries(resourceCache.listenerPod, created)
},
autoscalingListenerTestTimeout,
autoscalingListenerTestInterval,
).Should(BeFalse(), "AutoScalingListener service account, role, role binding, and pod resources should be removed from cache after deletion")
})
})

Expand Down Expand Up @@ -593,6 +632,7 @@ var _ = Describe("Test AutoScalingListener customization", func() {
secretResolver := secretresolver.New(mgr.GetClient(), scalefake.NewMultiClient())

rb := ResourceBuilder{
ResourceCache: newTestResourceCache(),
SecretResolver: secretResolver,
}

Expand Down Expand Up @@ -922,6 +962,7 @@ var _ = Describe("Test AutoScalingListener controller with proxy", func() {
secretResolver := secretresolver.New(mgr.GetClient(), scalefake.NewMultiClient())

rb := ResourceBuilder{
ResourceCache: newTestResourceCache(),
SecretResolver: secretResolver,
}

Expand Down Expand Up @@ -1127,6 +1168,7 @@ var _ = Describe("Test AutoScalingListener controller with template modification
secretResolver := secretresolver.New(mgr.GetClient(), scalefake.NewMultiClient())

rb := ResourceBuilder{
ResourceCache: newTestResourceCache(),
SecretResolver: secretResolver,
}

Expand Down Expand Up @@ -1232,6 +1274,7 @@ var _ = Describe("Test GitHub Server TLS configuration", func() {
secretResolver := secretresolver.New(mgr.GetClient(), scalefake.NewMultiClient())

rb := ResourceBuilder{
ResourceCache: newTestResourceCache(),
SecretResolver: secretResolver,
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,7 @@ func (r *AutoscalingRunnerSetReconciler) Reconcile(ctx context.Context, req ctrl
}

log.Info("Successfully removed finalizer after cleanup")
r.ResourceCache.Delete(&autoscalingRunnerSet)
return ctrl.Result{}, nil
}

Expand Down Expand Up @@ -748,6 +749,7 @@ func (r *AutoscalingRunnerSetReconciler) deleteRunnerScaleSet(ctx context.Contex
}

func (r *AutoscalingRunnerSetReconciler) createEphemeralRunnerSet(ctx context.Context, autoscalingRunnerSet *v1alpha1.AutoscalingRunnerSet, log logr.Logger) (ctrl.Result, error) {
r.ResourceCache.ephemeralRunnerSet.Delete(autoscalingRunnerSet)
desiredRunnerSet, err := r.newEphemeralRunnerSet(autoscalingRunnerSet)
if err != nil {
log.Error(err, "Could not create EphemeralRunnerSet")
Expand All @@ -772,6 +774,7 @@ func (r *AutoscalingRunnerSetReconciler) createAutoScalingListenerForRunnerSet(c
})
}

r.ResourceCache.autoscalingListener.Delete(autoscalingRunnerSet)
autoscalingListener, err := r.newAutoscalingListener(
autoscalingRunnerSet,
ephemeralRunnerSet,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ var _ = Describe("Test AutoScalingRunnerSet controller", Ordered, func() {
var autoscalingNS *corev1.Namespace
var autoscalingRunnerSet *v1alpha1.AutoscalingRunnerSet
var configSecret *corev1.Secret
var resourceCache *ResourceCache

var originalBuildVersion string
buildVersion := "0.1.0"
Expand All @@ -65,6 +66,7 @@ var _ = Describe("Test AutoScalingRunnerSet controller", Ordered, func() {
// Track runner group mappings for dynamic responses
runnerGroupMap := map[int]string{1: "testgroup"} // ID -> Name mapping
runnerGroupMapLock := &sync.RWMutex{} // Thread-safe access
resourceCache = newTestResourceCache()

controller = &AutoscalingRunnerSetReconciler{
Client: mgr.GetClient(),
Expand All @@ -73,6 +75,7 @@ var _ = Describe("Test AutoScalingRunnerSet controller", Ordered, func() {
ControllerNamespace: autoscalingNS.Name,
DefaultRunnerScaleSetListenerImage: "ghcr.io/actions/arc",
ResourceBuilder: ResourceBuilder{
ResourceCache: resourceCache,
SecretResolver: secretresolver.New(mgr.GetClient(), scalefake.NewMultiClient(
scalefake.WithClient(
scalefake.NewClient(
Expand Down Expand Up @@ -251,6 +254,15 @@ var _ = Describe("Test AutoScalingRunnerSet controller", Ordered, func() {
autoscalingRunnerSetTestInterval,
).Should(Succeed(), "Listener should be created")

Eventually(
func() bool {
return resourceCacheStateHasMainObjectEntries(resourceCache.ephemeralRunnerSet, created) &&
resourceCacheStateHasMainObjectEntries(resourceCache.autoscalingListener, created)
},
autoscalingRunnerSetTestTimeout,
autoscalingRunnerSetTestInterval,
).Should(BeTrue(), "AutoScalingRunnerSet EphemeralRunnerSet and AutoScalingListener resources should be cached after reconciliation")

// Check if status is updated
runnerSetList := new(v1alpha1.EphemeralRunnerSetList)
err := k8sClient.List(ctx, runnerSetList, client.InNamespace(autoscalingRunnerSet.Namespace))
Expand All @@ -270,8 +282,20 @@ var _ = Describe("Test AutoScalingRunnerSet controller", Ordered, func() {
autoscalingRunnerSetTestInterval,
).Should(Succeed(), "Listener should be created")

created := new(v1alpha1.AutoscalingRunnerSet)
err := k8sClient.Get(ctx, client.ObjectKey{Name: autoscalingRunnerSet.Name, Namespace: autoscalingRunnerSet.Namespace}, created)
Expect(err).NotTo(HaveOccurred(), "failed to get AutoScalingRunnerSet")
Eventually(
func() bool {
return resourceCacheStateHasMainObjectEntries(resourceCache.ephemeralRunnerSet, created) &&
resourceCacheStateHasMainObjectEntries(resourceCache.autoscalingListener, created)
},
autoscalingRunnerSetTestTimeout,
autoscalingRunnerSetTestInterval,
).Should(BeTrue(), "AutoScalingRunnerSet EphemeralRunnerSet and AutoScalingListener resources should be cached before deletion")

// Delete the AutoScalingRunnerSet
err := k8sClient.Delete(ctx, autoscalingRunnerSet)
err = k8sClient.Delete(ctx, autoscalingRunnerSet)
Expect(err).NotTo(HaveOccurred(), "failed to delete AutoScalingRunnerSet")

// Check if the listener is deleted
Expand Down Expand Up @@ -320,6 +344,15 @@ var _ = Describe("Test AutoScalingRunnerSet controller", Ordered, func() {
autoscalingRunnerSetTestTimeout,
autoscalingRunnerSetTestInterval,
).Should(Succeed(), "AutoScalingRunnerSet should be deleted")

Eventually(
func() bool {
return resourceCacheStateHasMainObjectEntries(resourceCache.ephemeralRunnerSet, created) ||
resourceCacheStateHasMainObjectEntries(resourceCache.autoscalingListener, created)
},
autoscalingRunnerSetTestTimeout,
autoscalingRunnerSetTestInterval,
).Should(BeFalse(), "AutoScalingRunnerSet EphemeralRunnerSet and AutoScalingListener resources should be removed from cache after deletion")
})
})

Expand Down Expand Up @@ -961,6 +994,7 @@ var _ = Describe("Test AutoScalingController updates", Ordered, func() {
ControllerNamespace: autoscalingNS.Name,
DefaultRunnerScaleSetListenerImage: "ghcr.io/actions/arc",
ResourceBuilder: ResourceBuilder{
ResourceCache: newTestResourceCache(),
SecretResolver: secretresolver.New(mgr.GetClient(), multiClient),
},
}
Expand Down Expand Up @@ -1078,6 +1112,7 @@ var _ = Describe("Test AutoscalingController creation failures", Ordered, func()
ControllerNamespace: autoscalingNS.Name,
DefaultRunnerScaleSetListenerImage: "ghcr.io/actions/arc",
ResourceBuilder: ResourceBuilder{
ResourceCache: newTestResourceCache(),
SecretResolver: secretresolver.New(mgr.GetClient(), scalefake.NewMultiClient()),
},
}
Expand Down Expand Up @@ -1205,6 +1240,7 @@ var _ = Describe("Test client optional configuration", Ordered, func() {
ControllerNamespace: autoscalingNS.Name,
DefaultRunnerScaleSetListenerImage: "ghcr.io/actions/arc",
ResourceBuilder: ResourceBuilder{
ResourceCache: newTestResourceCache(),
SecretResolver: secretresolver.New(mgr.GetClient(), multiclient.NewScaleset()),
},
}
Expand Down Expand Up @@ -1400,6 +1436,7 @@ var _ = Describe("Test client optional configuration", Ordered, func() {
ControllerNamespace: autoscalingNS.Name,
DefaultRunnerScaleSetListenerImage: "ghcr.io/actions/arc",
ResourceBuilder: ResourceBuilder{
ResourceCache: newTestResourceCache(),
SecretResolver: secretresolver.New(mgr.GetClient(), scalefake.NewMultiClient(
scalefake.WithClient(
scalefake.NewClient(
Expand Down Expand Up @@ -1647,6 +1684,7 @@ var _ = Describe("Test external permissions cleanup", Ordered, func() {
ControllerNamespace: autoscalingNS.Name,
DefaultRunnerScaleSetListenerImage: "ghcr.io/actions/arc",
ResourceBuilder: ResourceBuilder{
ResourceCache: newTestResourceCache(),
SecretResolver: secretresolver.New(mgr.GetClient(), scalefake.NewMultiClient()),
},
}
Expand Down Expand Up @@ -1807,6 +1845,7 @@ var _ = Describe("Test external permissions cleanup", Ordered, func() {
ControllerNamespace: autoscalingNS.Name,
DefaultRunnerScaleSetListenerImage: "ghcr.io/actions/arc",
ResourceBuilder: ResourceBuilder{
ResourceCache: newTestResourceCache(),
SecretResolver: secretresolver.New(mgr.GetClient(), scalefake.NewMultiClient()),
},
}
Expand Down Expand Up @@ -2017,6 +2056,7 @@ var _ = Describe("Test resource version and build version mismatch", func() {
ControllerNamespace: autoscalingNS.Name,
DefaultRunnerScaleSetListenerImage: "ghcr.io/actions/arc",
ResourceBuilder: ResourceBuilder{
ResourceCache: newTestResourceCache(),
SecretResolver: secretresolver.New(mgr.GetClient(), scalefake.NewMultiClient()),
},
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,7 @@ func (r *EphemeralRunnerReconciler) Reconcile(ctx context.Context, req ctrl.Requ
}
}

log.Info("Successfully removed finalizer after cleanup")
r.ResourceCache.Delete(&ephemeralRunner)
return ctrl.Result{}, nil
}

Expand Down
Loading
Loading