Commit graph

168 commits

Author SHA1 Message Date
CTO Agent
6541502682 docs(stalwart): Clarify LoadBalancer was working all along via hostPort
Investigation revealed that k3s ServiceLB uses hostPort bindings on nodes'
public IPs, not the misleading EXTERNAL-IP VIP (10.42.1.1) shown in kubectl.

External connectivity was working correctly the entire time. The confusion
was caused by misinterpreting the flannel pod network IP in the EXTERNAL-IP
field as meaning external traffic couldn't reach the service.

Verified all SMTP/IMAP ports responding correctly with proper Stalwart banners.

Related: DEV-235

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-07-13 20:12:11 +00:00
CTO Agent
ae3f164987 fix(stalwart): Add externalTrafficPolicy: Local to LoadBalancer services
Root cause: ArgoCD continuously reverts the LoadBalancer services to use
externalTrafficPolicy: Cluster (the k8s default), causing k3s to assign
internal flannel VXLAN IPs (10.42.1.x) instead of the node public IPs.

With externalTrafficPolicy: Cluster, traffic can be routed to any node,
and k3s's service controller assigns the flannel overlay IPs. This breaks
external connectivity because those IPs are not routable from outside.

With externalTrafficPolicy: Local, traffic is only routed to pods on the
same node, and k3s assigns the node's actual public IP to the LoadBalancer.

This was the missing piece from the reliability hardening in commit b0f2acf.
Without this in git, any manual kubectl patch is reverted by ArgoCD sync.

Evidence: stalwart-smtp and stalwart-imap both showing LoadBalancer IPs:
10.42.1.1, 10.42.1.2, 10.42.1.3, 10.42.1.5 (internal flannel IPs)

Related: DEV-230, DEV-231, DEV-233, DEV-235

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-07-13 20:03:49 +00:00
CTO Agent
c755bc1a45 Document SMTP/IMAP external access issue and solution options
Root cause: k3s ServiceLB assigns internal VIPs (10.42.1.x) that are not
publicly routable. External traffic to mail.basicstack.de cannot reach the
SMTP/IMAP services.

Investigation shows:
- Web-UI works (goes through Traefik IngressRoute)
- SMTP/IMAP ports have correct firewall rules
- iptables DNAT rules exist but don't help external traffic
- Internal connectivity works correctly
- LoadBalancer 'external IPs' are actually pod network IPs

Three solution options documented:
A. NodePort + iptables REDIRECT (recommended)
B. Deploy MetalLB for true LoadBalancer IPs
C. Hetzner Cloud LoadBalancers (not recommended, cost)

Awaiting approval on approach before implementing fix.

Related: DEV-235

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-07-13 20:00:19 +00:00
CTO Agent
c84411d99f Add comprehensive Stalwart stability check procedure
This document establishes operational rules and diagnostic playbooks for
Stalwart stability monitoring and incident response.

Key sections:
- Critical operational rules (repository as single point of truth)
- Requirement to read git history before any investigation
- Current 7-day stability check procedures (DEV-235)
- Known issues and their fixes (k3s networking, commit b0f2acf)
- Diagnostic playbook for SMTP/IMAP/Web-UI issues
- Issue documentation template
- Evidence requirements for verification completion

This ensures all future investigations follow documented procedures and
avoid repeated debugging cycles.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-07-13 19:56:35 +00:00
CTO Agent
c429df27ea Enable auto-sync for bookstack application
Configure Argo CD to automatically sync bookstack from the repository,
ensuring the repository remains the single source of truth.

Changes:
- Added automated sync policy with prune and selfHeal
- prune: removes resources no longer in repo
- selfHeal: reverts manual cluster changes back to repo state

This resolves the manual sync requirement and ensures continuous
synchronization without data loss.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-07-12 17:17:53 +00:00
CTO Agent
36b794a94e Document mysql-data-encrypted PVC as pre-existing, unmanaged resource
The mysql-data-encrypted PVC exists in the cluster and is working correctly,
but attempting to manage it through Argo CD causes sync failures because the
PVC is already bound and its spec is immutable. Leaving it unmanaged while
documenting its existence.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-07-12 17:13:26 +00:00
CTO Agent
0e5566d3b9 Add missing mysql-data-encrypted PVC definition to bookstack manifests
The MySQL deployment was referencing a PVC that wasn't defined in the
manifests. This PVC exists in the cluster but wasn't tracked by Argo CD.
Adding the definition ensures Argo CD can properly manage all resources
and prevents sync issues.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-07-12 17:11:14 +00:00
CTO Agent
c32e04c840 Add managed label to argocd sealed secrets
Adds the sealedsecrets.bitnami.com/managed: "true" label to all three
argocd sealed secrets (argocd-oidc-secret, repo-basicstack-org,
repo-stack-basicstack-de) to fix Health Degraded status in Argo CD.

This follows the same fix pattern applied in DEV-291, DEV-290, and DEV-289.

Closes DEV-293

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-07-12 16:32:34 +00:00
fa581374b2 apps/opencloud/openldap-deployment.yaml aktualisiert 2026-07-12 16:02:10 +00:00
ea7b1d64a4 apps/pocket-id/deployment.yaml aktualisiert
Update to version v2.10.0
2026-07-12 14:53:18 +00:00
CTO Agent
3149867b9b Add IgnoreExtraneous annotation to Pocket ID sealed secret template
This tells Argo CD to ignore the unsealed secret created by the sealed-secrets controller, preventing the health status from being degraded.

This is the same fix applied in DEV-289 and DEV-290 for Forgejo and Argo.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-07-12 14:49:32 +00:00
CTO Agent
2cdbd04848 Add Pocket ID migration verification and rollout guide
Documents the complete migration process, safety measures, and verification steps
for the Pocket ID Argo CD migration.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-07-12 14:36:50 +00:00
CTO Agent
794cf51d0c Add Pocket ID deployment manifests for Argo CD GitOps
Migrated Pocket ID deployment from manual kubectl to GitOps. All existing resources
will be adopted by Argo CD without recreation, preserving data and configuration.

Key safety measures:
- PVC has Delete=false annotation to prevent data loss
- Existing sealed secret reused for ENCRYPTION_KEY
- TLS certificate managed by cert-manager (not in Git)
- All OIDC clients and user data preserved in existing PVC

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-07-12 14:35:28 +00:00
66905ba424 apps/forgejo/forgejo-postgres-secret-sealed.yaml aktualisiert 2026-07-12 14:10:45 +00:00
CTO Agent
b0fce8e16b Add managed annotation to forgejo-postgres-secret SealedSecret
Adds sealedsecrets.bitnami.com/managed annotation to ensure proper
lifecycle management by the sealed-secrets controller. This is a
non-destructive fix that improves secret synchronization without
touching encrypted data or affecting access.

Related: DEV-290, DEV-289

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-07-12 14:03:31 +00:00
CTO Agent
08030791c1 Add Forgejo deployment manifests for Argo CD GitOps
Migrate all Forgejo deployment resources from cluster to Git repository:
- Forgejo Deployment with PostgreSQL backend
- Forgejo Service and Ingress with TLS
- Forgejo PersistentVolumeClaim (5Gi)
- PostgreSQL StatefulSet and Service
- Backup CronJob (daily at 03:00 UTC, 14-day retention)

All existing PVCs (forgejo-data, postgres-data-forgejo-postgres-0) and
Pocket-ID SSO configuration are preserved. No data loss expected.

The Argo CD Application (app-forgejo.yaml) is already configured to
sync from apps/forgejo/ path in this repository.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-07-12 13:55:47 +00:00
CTO Agent
2ae7e30041 Add managed label to mysql sealed secret
This adds the sealedsecrets.bitnami.com/managed: "true" label to the
mysql sealed secret to fix Health Degraded status in Argo CD.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-07-12 12:16:48 +00:00
CTO Agent
0523d6e0c6 Fix Bookstack OIDC client ID to match Pocket ID configuration
The deployment was using client ID "bookstack" which does not exist in
Pocket ID. Updated to use the actual client ID from Pocket ID.

This fixes the "Record not found" error when attempting to login via
Pocket ID.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-07-12 11:51:18 +00:00
CTO Agent
2e8bb89261 Update Bookstack OIDC configuration and fix Ingress hostname
- Fix Ingress rule host from bookstack.basicstack.de to books.basicstack.de
- Update OIDC issuer from pocket-id.basicstack.de to auth.basicstack.de
- Enable AUTH_AUTO_INITIATE for seamless SSO
- Update OIDC_NAME from "Pocket-ID" to "Pocket ID"

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-07-12 11:42:22 +00:00
CTO Agent
a882636043 Fix Bookstack hostname from bookstack.basicstack.de to books.basicstack.de
Updated APP_URL environment variable and Ingress configuration to use the correct hostname books.basicstack.de.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-07-12 11:40:46 +00:00
CTO Agent
bfbd791103 Fix bookstack deployment to use existing resources
- Change MySQL from StatefulSet to Deployment to match existing setup
- Use existing PVC mysql-data-encrypted (contains live data) instead of creating new mysql-data
- Add PersistentVolumeClaim for bookstack-config to persist APP_KEY and configuration
- Remove duplicate MySQL resource definitions
- Align with current working deployment while making Forgejo the source of truth

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-07-12 11:24:21 +00:00
CTO Agent
62c4398787 Add complete Bookstack deployment manifests
Added comprehensive Kubernetes deployment for Bookstack including:
- MySQL StatefulSet with PersistentVolumeClaim (10Gi encrypted storage)
- MySQL Service (ClusterIP)
- Bookstack Deployment with OIDC/Pocket-ID integration
- Bookstack Service (ClusterIP)
- Ingress with TLS certificate (bookstack.basicstack.de)

The deployment uses existing sealed secrets for MySQL credentials and
Bookstack OIDC client secret. Bookstack is configured with proper
health checks and resource limits.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-07-12 11:14:33 +00:00
CTO Agent
4149802477 Remove old stack-basicstack-de complex sync manifest
The old recursive directory sync has been replaced with individual
Application manifests. The Application resource was deleted from the
cluster and this file is no longer needed.

Related: DEV-287

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-07-12 10:49:25 +00:00
CTO Agent
f0dd8d8d04 ArgoCD: Replace complex stack sync with individual application syncs
Migrated from single recursive directory sync to individual Application
manifests for better control and visibility.

Changes:
- Created app-*.yaml for each application (10 apps)
- Disabled auto-sync on all apps for safe migration
- Disabled old app-stack-basicstack-de.yaml complex sync
- Updated app-argocd.yaml to disable auto-sync during migration
- Added ARGOCD-MIGRATION.md with migration plan and next steps
- Updated apps/README.md to document new structure

Each app now needs:
1. Manual sync verification
2. Health check
3. Auto-sync enablement (tracked in separate tasks)

Related: DEV-287

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-07-12 10:44:41 +00:00
CTO Agent
08292bd449 Fix Argo CD sealed secrets namespace mismatch
Re-sealed the three Argo CD secrets with namespace: argocd instead of
namespace: paperclip to match the kustomization.yaml deployment target.

The sealed-secrets controller was failing to unseal these because they
were encrypted for the 'paperclip' namespace but Kustomize was deploying
them to the 'argocd' namespace. Sealed secrets use strict scope by
default, so namespace/name must match exactly.

Fixed files:
- apps/argocd/argocd-oidc-secret-sealed.yaml
- apps/argocd/repo-basicstack-org-secret-sealed.yaml
- apps/argocd/repo-stack-basicstack-de-secret-sealed.yaml

Root cause: DEV-284 investigation revealed controller error logs showing
"no key could decrypt secret" for all three Argo CD sealed secrets.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-07-12 10:11:39 +00:00
CTO Agent
03da09370d fix(argocd): add Forgejo SSH host key to argocd-ssh-known-hosts-cm
When Argo CD manages its own install manifest, it overwrites the live
argocd-ssh-known-hosts-cm with the upstream defaults (GitHub/GitLab/etc),
losing the Forgejo internal service key. Add the forgejo.forgejo.svc.cluster.local
host key so self-management doesn't break repo access after each sync.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-07-12 09:50:34 +00:00
CTO Agent
314c3e794e fix(argocd): enable server-side apply for argocd self-managed Application
The Argo CD CRDs exceed the 262144-byte annotation limit that client-side
apply imposes via last-applied-configuration. Server-side apply bypasses
this limit and is required for Argo CD to manage its own large CRDs.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-07-12 09:46:08 +00:00
CTO Agent
16f060b151 fix(argocd): merge duplicate data: keys in argocd-cm ConfigMap
The argocd-cm document had two separate data: sections — one at the top
with resource customizations and one at the bottom with url/oidc.config.
This is invalid YAML and caused kustomize build to fail with
"mapping key data already defined". Merged url and oidc.config into the
single data: block to fix the argocd Application sync error.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-07-12 09:41:38 +00:00
CTO Agent
146b206e80 revert: restore argocd/** exclusion in stack-basicstack-de
Removing the exclusion caused the root app to apply argocd raw manifests
directly (bypassing kustomize), breaking namespace resolution. The correct
self-management design is: app-argocd.yaml Application is picked up by the
root app, which then delegates to the argocd Application managing apps/argocd/
via kustomize. The exclusion of argocd/** prevents double-applying resources.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-07-12 09:39:51 +00:00
CTO Agent
40e864b71f feat(argocd): enable self-management by removing argocd exclusion
Remove the 'argocd/**' exclusion from the root stack Application so that
Argo CD manages its own configuration via the app-of-apps pattern.
The apps/argocd/ directory already contains all manifests (install, ingress,
sealed secrets) and app-argocd.yaml defines the dedicated argocd Application.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-07-12 09:37:47 +00:00
CTO Agent
3eb4c7fe92 Fix argocd-rbac-cm ConfigMap YAML structure
Move metadata.name and app.kubernetes.io/part-of label from data section
to proper metadata section.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-07-12 09:35:28 +00:00
CTO Agent
1ed15d98ea Fix argocd-cm ConfigMap YAML structure
Move metadata.name and app.kubernetes.io/part-of label from data section
to proper metadata section. This was causing kustomize build failures.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-07-12 09:34:28 +00:00
CTO Agent
a4657317f2 Simplify argocd exclusion pattern to fix discovery issue
Change from multiline exclude with **/ pattern to simple single-line
'argocd/**' pattern relative to apps/ path.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-07-12 09:29:53 +00:00
CTO Agent
7b6a0064b9 Move Application manifests to apps root for proper self-management
Move all Application manifests (app-*.yaml) out of apps/argocd/ to apps/
to avoid chicken-and-egg issue where Applications couldn't update themselves.

Architecture:
- apps/app-stack-basicstack-de.yaml: manages apps/** excluding argocd/**
- apps/app-argocd.yaml: manages apps/argocd/** via kustomize
- apps/app-basicstack-org.yaml: manages basicstack.org repo

This enables full self-management: all Applications can sync their own
configurations from git.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-07-12 09:27:28 +00:00
CTO Agent
68adf00375 Fix argocd exclusion pattern in stack Application
Fully exclude argocd directory from stack Application to prevent
namespace errors. The argocd Application (apps/app-argocd.yaml) handles
all argocd resources via kustomize.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-07-12 09:26:12 +00:00
CTO Agent
fe9301f891 Enable Argo CD self-management via dedicated Application
Create app-argocd Application to manage argocd resources using kustomize.
Update stack Application exclusion to allow Application manifests while
excluding direct resource management (prevents namespace errors from
directory recursion bypassing kustomization).

Architecture:
- stack Application manages Application manifests (app-*.yaml)
- argocd Application manages argocd resources via kustomize
- Both Applications can self-manage through this pattern

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-07-12 09:25:19 +00:00
CTO Agent
8f537b8f82 Test Argo CD self-management with argocd-cm annotation
Add test annotation to argocd-cm ConfigMap to verify that Argo CD
automatically syncs changes to its own configuration.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-07-12 09:22:39 +00:00
CTO Agent
ba748d6ab4 Enable Argo CD self-management by removing argocd exclusion
This allows the stack Application to manage Argo CD's own configuration
via GitOps, implementing the app-of-apps pattern.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-07-12 09:20:18 +00:00
CTO Agent
4f979d657e Add Argo CD Application for basicstack.org
Deploys the basicstack.org website from Forgejo repository.
- Uses internal Forgejo URL (forgejo.forgejo.svc.cluster.local)
- Automated sync with prune and selfHeal enabled
- Deploys to basicstack-web namespace

Closes DEV-272

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-07-12 09:19:28 +00:00
CTO Agent
f75b51c02d Add Argo CD Application for stack.basicstack.de GitOps management
Creates the Argo CD Application that manages all cluster infrastructure
applications from the stack.basicstack.de repository. Configuration:
- Points to cluster-internal Forgejo (forgejo.forgejo.svc.cluster.local)
- Excludes argocd directory to prevent self-management
- Enables selfHeal for automatic sync of changes
- Disables prune for manual deletion approval
- Deployed to the cluster and verified working

All existing services (Stalwart, Directus, Forgejo, BookStack, Pocket ID,
OpenCloud, Passbolt) remain operational. Some pods restarted due to applying
pending git changes (expected GitOps behavior).

Note: Warning about duplicate opencloud namespace definition in
openldap-deployment.yaml and opencloud-deployment.yaml - does not affect
functionality, can be addressed in follow-up cleanup.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-07-12 09:19:28 +00:00
CTO Agent
b874f3d184 Add memory limits to Argo CD components to prevent OOM incidents
Implements resource governance for all Argo CD components via kustomization
overlay. This prevents unlimited memory consumption that led to the control
plane resource exhaustion incident (DEV-281).

Resource limits applied:
- application-controller: 512Mi limit, 256Mi request
- repo-server: 512Mi limit, 256Mi request
- redis: 256Mi limit, 128Mi request
- server: 256Mi limit, 128Mi request
- notifications-controller: 128Mi limit, 64Mi request
- applicationset-controller: 256Mi limit, 128Mi request

The limits are based on observed usage patterns with headroom for growth
while preventing runaway memory consumption.

Usage: kubectl apply -k apps/argocd/

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-07-12 09:19:28 +00:00
CTO Agent
a95e638f6b Add Argo CD installation manifests with Pocket ID SSO
- Downloaded upstream Argo CD install.yaml from stable branch
- Customized for basicstack.de cluster:
  - Disabled dex deployment (using Pocket ID OIDC instead)
  - Added --insecure flag to argocd-server (TLS at Traefik ingress)
  - Configured OIDC integration with auth.basicstack.de
  - Added RBAC policy mapping argo_admins group to admin role
  - Mounted OIDC client credentials from argocd-oidc-secret
- Created Traefik ingress for argo.basicstack.de with cert-manager TLS

Sealed secrets for OIDC and repository credentials already in place.
Ready for deployment per DEV-249 plan.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-07-12 09:19:28 +00:00
CTO Agent
d1d2b77ef2 Add Argo CD sealed secrets for OIDC and repository access
Created three SealedSecrets for Argo CD integration:
- argocd-oidc-secret: Pocket ID OIDC client credentials
- repo-stack-basicstack-de: SSH deploy key for stack repository
- repo-basicstack-org: SSH deploy key for basicstack.org repository

Repository secrets include argocd.argoproj.io/secret-type label
for automatic Argo CD discovery.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-07-12 09:19:28 +00:00
CTO Agent
6cc1df6c66 Configure OpenCloud daily backup to Hetzner Object Storage
- Use existing basicstack-backup bucket with opencloud/ prefix
- Configure endpoint: https://hel1.your-objectstorage.com
- Add pod affinity to run on same node as OpenCloud (RWO volume requirement)
- Schedule: daily at 2:00 AM UTC
- Retention: last 7 days
- First backup verified successful: 110.611 MiB transferred

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-07-12 09:19:28 +00:00
Paperclip CTO
5e02c64dc4 docs: Add comprehensive Pocket ID OIDC client setup documentation
Document all four OIDC clients for OpenCloud:
- Web application (UUID-based client ID)
- Desktop client (OpenCloudDesktop)
- Android mobile (OpenCloudAndroid)
- iOS mobile (OpenCloudIOS)

Includes configuration details, security notes, and troubleshooting.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-07-11 12:03:44 +00:00
CTO Agent
d8cd3638fa Fix Stalwart backup CronJob to handle ReadWriteOnce PVC
Implement scale-down/backup/scale-up pattern to work around PVC access mode limitation.

Changes:
- Add RBAC (ServiceAccount, Role, RoleBinding) with statefulsets/scale and pods permissions
- Switch to alpine:3.19 base image with kubectl and restic
- Scale down StatefulSet to 0 replicas before backup
- Run restic backup while pod is stopped
- Scale back up to 1 replica with error handling
- Add cleanup trap to ensure scale-up even on failure
- Set 10-minute timeout and backoff limit

Tested successfully: backup completes in ~32 seconds with minimal downtime.
Resolves DEV-236.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-07-11 11:21:39 +00:00
CTO Agent
b0f2acf5f3 Stalwart reliability hardening: fix k3s service networking issues
Root cause: k3s service ClusterIP routing instability causing intermittent
failures despite healthy pods. This is the 5th incident - prior fixes treated
symptoms, not the systemic networking fragility.

Changes:
- Add startup probe (60s delay, prevents premature service registration)
- Fix backup job env var substitution (use shell ${VAR}, not K8s $(VAR))
- Add comprehensive monitoring (ServiceMonitor, PrometheusRule, blackbox probes)
- Add alerting for service failures, high latency, pod restarts, backup failures

Evidence:
- Pod healthy (4d15h uptime, 0 restarts) but service ClusterIP routing broken
- Direct pod IP worked, service ClusterIP failed with "Connection reset by peer"
- Iptables rules correct, endpoints correct, but packets not flowing
- Required pod restart + Traefik restart to restore service

Monitoring now tests full service path from outside cluster, not just pod health.
Will alert immediately on failures instead of relying on reactive discovery.

Related: DEV-213, DEV-221, DEV-223, DEV-224, DEV-230, DEV-231

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-07-11 11:06:36 +00:00
CTO Agent
07e2e476ce Fix IDM LDAP port from 9125 to 9236
Corrected the IDM LDAP listener port. Logs show IDM listening on
127.0.0.1:9236, not 9125.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-07-05 20:49:14 +00:00
CTO Agent
b4abe71c5d Restore LDAP environment variables for IDM
Restored LDAP-related environment variables. The configmap now uses
IDM password variables (OC_IDM_IDM_PASSWORD, OC_IDM_REVA_PASSWORD)
instead of the external LDAP passwords.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-07-05 20:47:59 +00:00
CTO Agent
6b49ba342a Configure graph/users/groups to use IDM's internal LDAP
OpenCloud's IDM service provides an internal LDAP server on localhost:9125.
Updated configuration to connect to IDM's LDAP instead of external OpenLDAP:
- Base DN: o=libregraph-idm (IDM's base DN)
- Graph binds as uid=libregraph,ou=sysusers,o=libregraph-idm
- Users/Groups bind as uid=reva,ou=sysusers,o=libregraph-idm
- Uses IDM service user passwords from secrets

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-07-05 20:47:34 +00:00