diff --git a/src/internal/controller/zitadelcluster_controller.go b/src/internal/controller/zitadelcluster_controller.go index 2cbfaf9..6c33fa7 100644 --- a/src/internal/controller/zitadelcluster_controller.go +++ b/src/internal/controller/zitadelcluster_controller.go @@ -192,7 +192,7 @@ func (r *ZitadelClusterReconciler) Reconcile(ctx context.Context, req ctrl.Reque } if err := errBundle.ErrorOrNil(); err != nil { - return ctrl.Result{}, fmt.Errorf("error reconciling %s: %v", p.Name, err) + return ctrl.Result{RequeueAfter: 2 * time.Minute}, fmt.Errorf("error reconciling %s: %v", p.Name, err) } } if !result.IsZero() { @@ -203,7 +203,7 @@ func (r *ZitadelClusterReconciler) Reconcile(ctx context.Context, req ctrl.Reque if err := r.patchStatus(ctx, &zitadel, r.patcher(ctx, &zitadel)); err != nil && !errors.IsNotFound(err) { return ctrl.Result{}, err } - return ctrl.Result{RequeueAfter: 5 * time.Minute}, nil + return ctrl.Result{RequeueAfter: 2 * time.Minute}, nil } func (r *ZitadelClusterReconciler) setSpecDefaults(ctx context.Context, zitadel *zitadelv1alpha1.ZitadelCluster) (ctrl.Result, error) { @@ -462,27 +462,67 @@ func (r *ZitadelClusterReconciler) reconcileSMTPConfig(ctx context.Context, zita if err != nil { return ctrl.Result{}, err } - adminRequest := &adm.AddSMTPConfigRequest{ - SenderAddress: zitadel.Spec.SMTPConfig.SenderAddress, - SenderName: zitadel.Spec.SMTPConfig.SenderName, - Tls: zitadel.Spec.SMTPConfig.TLS, - Host: zitadel.Spec.SMTPConfig.Host, + resp, err := adminClient.GetSMTPConfig(ctx, &adm.GetSMTPConfigRequest{}) + if err != nil { + return ctrl.Result{}, fmt.Errorf("Error getting SMTP config: %v", err) } - if zitadel.Spec.SMTPConfig.User != nil && zitadel.Spec.SMTPConfig.Password != nil { + if resp.SmtpConfig != nil { + adminRequest := &adm.UpdateSMTPConfigRequest{ + SenderAddress: zitadel.Spec.SMTPConfig.SenderAddress, + SenderName: zitadel.Spec.SMTPConfig.SenderName, + Tls: zitadel.Spec.SMTPConfig.TLS, + Host: zitadel.Spec.SMTPConfig.Host, + } + + if zitadel.Spec.SMTPConfig.User != nil && zitadel.Spec.SMTPConfig.Password != nil { + adminRequest.User = *zitadel.Spec.SMTPConfig.User + } + if zitadel.Spec.SMTPConfig.ReplyToAddress != nil { + adminRequest.ReplyToAddress = *zitadel.Spec.SMTPConfig.ReplyToAddress + } + passwordSecret, err := r.RefResolver.SecretKeyRef(ctx, zitadel.Spec.SMTPConfig.Password.SecretKeyRef, zitadel.Namespace) if err != nil { return ctrl.Result{}, err } - adminRequest.Password = passwordSecret - adminRequest.User = *zitadel.Spec.SMTPConfig.User - } - if zitadel.Spec.SMTPConfig.ReplyToAddress != nil { - adminRequest.ReplyToAddress = *zitadel.Spec.SMTPConfig.ReplyToAddress + if _, err = adminClient.UpdateSMTPConfig(ctx, adminRequest); err != nil { + if !strings.Contains(err.Error(), "No changes") { + return ctrl.Result{}, fmt.Errorf("Could not update SMTP config: %v", err) + } + } + if zitadel.Spec.SMTPConfig.Password != nil { + if _, err = adminClient.UpdateSMTPConfigPassword(ctx, &adm.UpdateSMTPConfigPasswordRequest{ + Password: passwordSecret, + }); err != nil { + if !strings.Contains(err.Error(), "No changes") { + return ctrl.Result{}, fmt.Errorf("Could not update SMTP config: %v", err) + } + } + } + } else { + adminRequest := &adm.AddSMTPConfigRequest{ + SenderAddress: zitadel.Spec.SMTPConfig.SenderAddress, + SenderName: zitadel.Spec.SMTPConfig.SenderName, + Tls: zitadel.Spec.SMTPConfig.TLS, + Host: zitadel.Spec.SMTPConfig.Host, + } + if zitadel.Spec.SMTPConfig.User != nil && zitadel.Spec.SMTPConfig.Password != nil { + passwordSecret, err := r.RefResolver.SecretKeyRef(ctx, zitadel.Spec.SMTPConfig.Password.SecretKeyRef, zitadel.Namespace) + if err != nil { + return ctrl.Result{}, err + } + adminRequest.Password = passwordSecret + adminRequest.User = *zitadel.Spec.SMTPConfig.User + } + if zitadel.Spec.SMTPConfig.ReplyToAddress != nil { + adminRequest.ReplyToAddress = *zitadel.Spec.SMTPConfig.ReplyToAddress + } + + if _, err = adminClient.AddSMTPConfig(ctx, adminRequest); err != nil { + return ctrl.Result{}, fmt.Errorf("Could not add SMTP config: %v", err) + } } - if _, err = adminClient.AddSMTPConfig(ctx, adminRequest); err != nil { - return ctrl.Result{}, fmt.Errorf("Could not add SMTP config: %v", err) - } return ctrl.Result{}, nil }