From 0b6b07b86715943d73a07f1e0d1e24f9fbae527e Mon Sep 17 00:00:00 2001 From: Volodymyr Zotov Date: Sun, 8 Jun 2025 12:48:55 -0500 Subject: [PATCH] Requeue after 1 munute if faced reate limit error from 1password --- internal/controller/deployment_controller.go | 12 +++++++++--- internal/controller/onepassworditem_controller.go | 8 ++++++++ 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/internal/controller/deployment_controller.go b/internal/controller/deployment_controller.go index db3b2f4..032e8f8 100644 --- a/internal/controller/deployment_controller.go +++ b/internal/controller/deployment_controller.go @@ -28,8 +28,8 @@ import ( "context" "fmt" "regexp" - - "sigs.k8s.io/controller-runtime/pkg/reconcile" + "strings" + "time" kubeSecrets "github.com/1Password/onepassword-operator/pkg/kubernetessecrets" "github.com/1Password/onepassword-operator/pkg/logs" @@ -46,6 +46,7 @@ import ( "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/client/apiutil" logf "sigs.k8s.io/controller-runtime/pkg/log" + "sigs.k8s.io/controller-runtime/pkg/reconcile" ) var logDeployment = logf.Log.WithName("controller_deployment") @@ -102,7 +103,12 @@ func (r *DeploymentReconciler) Reconcile(ctx context.Context, req ctrl.Request) } // Handles creation or updating secrets for deployment if needed if err = r.handleApplyingDeployment(deployment, deployment.Namespace, annotations, req); err != nil { - return ctrl.Result{}, err + if strings.Contains(err.Error(), "rate limit") { + reqLogger.V(logs.InfoLevel).Info("1Password rate limit hit. Requeuing after 1 minute.") + return ctrl.Result{RequeueAfter: time.Minute}, nil + } else { + return ctrl.Result{}, err + } } return ctrl.Result{}, nil } diff --git a/internal/controller/onepassworditem_controller.go b/internal/controller/onepassworditem_controller.go index d38e55b..edc502a 100644 --- a/internal/controller/onepassworditem_controller.go +++ b/internal/controller/onepassworditem_controller.go @@ -27,6 +27,8 @@ package controller import ( "context" "fmt" + "strings" + "time" onepasswordv1 "github.com/1Password/onepassword-operator/api/v1" kubeSecrets "github.com/1Password/onepassword-operator/pkg/kubernetessecrets" @@ -103,6 +105,12 @@ func (r *OnePasswordItemReconciler) Reconcile(ctx context.Context, req ctrl.Requ // Handles creation or updating secrets for deployment if needed err = r.handleOnePasswordItem(onepassworditem, req) + if err != nil { + if strings.Contains(err.Error(), "rate limit") { + reqLogger.V(logs.InfoLevel).Info("1Password rate limit hit. Requeuing after 1 minute.") + return ctrl.Result{RequeueAfter: time.Minute}, nil + } + } if updateStatusErr := r.updateStatus(onepassworditem, err); updateStatusErr != nil { return ctrl.Result{}, fmt.Errorf("cannot update status: %s", updateStatusErr) }