Add organization manifests

[ZITADOPER-1]
This commit is contained in:
Haim Kortovich
2024-05-16 20:15:14 -05:00
parent 3a691bb491
commit 56ec6aa9b1
3 changed files with 93 additions and 9 deletions

View File

@@ -91,19 +91,31 @@ func newWrappedOrganizationReconciler(client client.Client, refResolver *zitadel
}
func (wr *wrappedOrganizationReconciler) Reconcile(ctx context.Context, ztdClient *management.Client) error {
// TODO: check if org exists first
resp, err := ztdClient.AddOrg(ctx, &pb.AddOrgRequest{
Name: wr.organization.Name,
zitadelCluster, err := wr.refResolver.ZitadelCluster(ctx, &wr.organization.Spec.ZitadelClusterRef, wr.organization.Namespace)
if err != nil {
return err
}
orgRes, err := ztdClient.GetOrgByDomainGlobal(ctx, &pb.GetOrgByDomainGlobalRequest{
Domain: strings.ToLower(fmt.Sprintf("%s.%s", wr.organization.Name, zitadelCluster.Spec.Host)),
})
if err != nil {
if strings.Contains(err.Error(), "AlreadyExists") {
return nil
if !strings.Contains(err.Error(), "not found") {
return fmt.Errorf("Error getting org: %v", err)
}
return fmt.Errorf("error creating organization in Zitadel: %v", err)
}
patch := ctrlClient.MergeFrom(wr.organization.DeepCopy())
wr.organization.Status.OrgId = resp.Id
return wr.Client.Status().Patch(ctx, wr.organization, patch)
// TODO: add initial user
if orgRes == nil {
resp, err := ztdClient.AddOrg(ctx, &pb.AddOrgRequest{
Name: strings.ToLower(wr.organization.Name),
})
if err != nil {
return fmt.Errorf("error creating organization in Zitadel: %v", err)
}
patch := ctrlClient.MergeFrom(wr.organization.DeepCopy())
wr.organization.Status.OrgId = resp.Id
return wr.Client.Status().Patch(ctx, wr.organization, patch)
}
return nil
}
func (wr *wrappedOrganizationReconciler) PatchStatus(ctx context.Context, patcher condition.Patcher) error {

View File

@@ -153,6 +153,10 @@ func (r *ZitadelClusterReconciler) Reconcile(ctx context.Context, req ctrl.Reque
Name: "DefaultInstance",
Reconcile: r.reconcileDefaultInstance,
},
{
Name: "DefaultOrgManifest",
Reconcile: r.reconcileOrgManifest,
},
{
Name: "SMTPConfig",
Reconcile: r.reconcileSMTPConfig,
@@ -457,6 +461,31 @@ func (r *ZitadelClusterReconciler) reconcileDefaultInstance(ctx context.Context,
return ctrl.Result{}, nil
}
func (r *ZitadelClusterReconciler) reconcileOrgManifest(ctx context.Context, zitadel *zitadelv1alpha1.ZitadelCluster) (ctrl.Result, error) {
key := types.NamespacedName{
Name: zitadel.Name,
Namespace: zitadel.Namespace,
}
desiredOrganization, err := r.Builder.BuildOrganization(builder.OrganizationOpts{
Key: key,
Zitadel: zitadel,
}, zitadel)
if err != nil {
return ctrl.Result{}, fmt.Errorf("error building default organization: %v", err)
}
var existingOrganization zitadelv1alpha1.Organization
if err := r.Get(ctx, key, &existingOrganization); err != nil {
if !errors.IsNotFound(err) {
return ctrl.Result{}, fmt.Errorf("error getting Organization: %v", err)
}
if err := r.Create(ctx, desiredOrganization); err != nil {
return ctrl.Result{}, fmt.Errorf("error creating Organization: %v", err)
}
}
return ctrl.Result{}, nil
}
func (r *ZitadelClusterReconciler) reconcileSMTPConfig(ctx context.Context, zitadel *zitadelv1alpha1.ZitadelCluster) (ctrl.Result, error) {
adminClient, err := zitadelClient.NewAdminClient(ctx, zitadel, *r.RefResolver)
if err != nil {
@@ -707,6 +736,7 @@ func (r *ZitadelClusterReconciler) SetupWithManager(mgr ctrl.Manager) error {
Owns(&corev1.Service{}).
Owns(&corev1.ConfigMap{}).
Owns(&corev1.Secret{}).
Owns(&zitadelv1alpha1.Organization{}).
WithOptions(controller.Options{RateLimiter: workqueue.NewItemExponentialFailureRateLimiter(time.Millisecond*500, time.Minute*3)}).
Complete(r)
}