Skip to content

Commit

Permalink
temp-fix: disable dynamic controller during deletion of promise
Browse files Browse the repository at this point in the history
- temporary fix until kubernetes-sigs/controller-runtime#1884 is resolved
  once resolved, delete dynamic controller rather than disable

Co-authored-by: Abby Bangser <abby@syntasso.io>
  • Loading branch information
aclevername and abangser committed Nov 15, 2022
1 parent 97eb10a commit d7e961e
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 3 deletions.
9 changes: 8 additions & 1 deletion controllers/dynamic_resource_request_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -58,14 +58,21 @@ type dynamicResourceRequestController struct {
xaasRequestPipeline []string
log logr.Logger
finalizers []string
uid string
enabled *bool
}

//+kubebuilder:rbac:groups="",resources=pods,verbs=create;list;watch;delete
//+kubebuilder:rbac:groups="",resources=serviceaccounts,verbs=create

func (r *dynamicResourceRequestController) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
logger := r.log.WithValues(r.promiseIdentifier, req.NamespacedName)
if !*r.enabled {
//temporary fix until https://github.com/kubernetes-sigs/controller-runtime/issues/1884 is resolved
//once resolved, this won't be necessary since the dynamic controller will be deleted
return ctrl.Result{}, nil
}

logger := r.log.WithValues("uid", r.uid, r.promiseIdentifier, req.NamespacedName)
resourceRequestIdentifier := fmt.Sprintf("%s-%s-%s", r.promiseIdentifier, req.Namespace, req.Name)

unstructuredCRD := &unstructured.Unstructured{}
Expand Down
14 changes: 12 additions & 2 deletions controllers/promise_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ type PromiseReconciler struct {
ApiextensionsClient *clientset.Clientset
Log logr.Logger
Manager ctrl.Manager
DynamicControllers map[string]*bool
}

const (
Expand Down Expand Up @@ -308,7 +309,10 @@ func (r *PromiseReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ct
unstructuredCRD := &unstructured.Unstructured{}
unstructuredCRD.SetGroupVersionKind(crdToCreateGvk)

//delete dyanmic controller before CRD
//temporary fix until https://github.com/kubernetes-sigs/controller-runtime/issues/1884 is resolved
//once resolved, delete dynamic controller rather than disable
enabled := true
r.DynamicControllers[string(promise.GetUID())] = &enabled
dynamicResourceRequestController := &dynamicResourceRequestController{
client: r.Manager.GetClient(),
scheme: r.Manager.GetScheme(),
Expand All @@ -317,6 +321,8 @@ func (r *PromiseReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ct
promiseClusterSelector: promise.Spec.ClusterSelector,
xaasRequestPipeline: promise.Spec.XaasRequestPipeline,
log: r.Log,
uid: getShortUuid(),
enabled: &enabled,
}

ctrl.NewControllerManagedBy(r.Manager).
Expand Down Expand Up @@ -345,7 +351,11 @@ func (r *PromiseReconciler) deletePromise(ctx context.Context, promise *v1alpha1
return ctrl.Result{RequeueAfter: fastRequeue}, err
}

//delete dynamic controller
//temporary fix until https://github.com/kubernetes-sigs/controller-runtime/issues/1884 is resolved
//once resolved, delete dynamic controller rather than disable
if enabled, exists := r.DynamicControllers[string(promise.GetUID())]; exists {
*enabled = false
}

if controllerutil.ContainsFinalizer(promise, clusterSelectorsConfigMapCleanupFinalizer) {
logger.Info("deleting resources associated with finalizer", "finalizer", clusterSelectorsConfigMapCleanupFinalizer)
Expand Down
1 change: 1 addition & 0 deletions controllers/suite_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@ var _ = BeforeSuite(func() {
ApiextensionsClient: apiextensionClient,
Client: k8sManager.GetClient(),
Log: ctrl.Log.WithName("controllers").WithName("PromiseReconciler"),
DynamicControllers: map[string]*bool{},
}).SetupWithManager(k8sManager)
Expect(err).ToNot(HaveOccurred())

Expand Down
1 change: 1 addition & 0 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,7 @@ func main() {
Client: mgr.GetClient(),
Log: ctrl.Log.WithName("controllers").WithName("Promise"),
Manager: mgr,
DynamicControllers: map[string]*bool{},
}).SetupWithManager(mgr); err != nil {
setupLog.Error(err, "unable to create controller", "controller", "Promise")
os.Exit(1)
Expand Down

0 comments on commit d7e961e

Please sign in to comment.