Properly reconcile SMTP

[ZITADOPER-1]
This commit is contained in:
Haim Kortovich
2024-05-16 16:59:40 -05:00
parent 24d26a2a9f
commit bcdd2f2b8e

View File

@@ -192,7 +192,7 @@ func (r *ZitadelClusterReconciler) Reconcile(ctx context.Context, req ctrl.Reque
} }
if err := errBundle.ErrorOrNil(); err != nil { 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() { 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) { if err := r.patchStatus(ctx, &zitadel, r.patcher(ctx, &zitadel)); err != nil && !errors.IsNotFound(err) {
return ctrl.Result{}, 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) { 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 { if err != nil {
return ctrl.Result{}, err return ctrl.Result{}, err
} }
adminRequest := &adm.AddSMTPConfigRequest{ resp, err := adminClient.GetSMTPConfig(ctx, &adm.GetSMTPConfigRequest{})
SenderAddress: zitadel.Spec.SMTPConfig.SenderAddress, if err != nil {
SenderName: zitadel.Spec.SMTPConfig.SenderName, return ctrl.Result{}, fmt.Errorf("Error getting SMTP config: %v", err)
Tls: zitadel.Spec.SMTPConfig.TLS,
Host: zitadel.Spec.SMTPConfig.Host,
} }
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) passwordSecret, err := r.RefResolver.SecretKeyRef(ctx, zitadel.Spec.SMTPConfig.Password.SecretKeyRef, zitadel.Namespace)
if err != nil { if err != nil {
return ctrl.Result{}, err return ctrl.Result{}, err
} }
adminRequest.Password = passwordSecret if _, err = adminClient.UpdateSMTPConfig(ctx, adminRequest); err != nil {
adminRequest.User = *zitadel.Spec.SMTPConfig.User if !strings.Contains(err.Error(), "No changes") {
} return ctrl.Result{}, fmt.Errorf("Could not update SMTP config: %v", err)
if zitadel.Spec.SMTPConfig.ReplyToAddress != nil { }
adminRequest.ReplyToAddress = *zitadel.Spec.SMTPConfig.ReplyToAddress }
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 return ctrl.Result{}, nil
} }