Skip to content

Commit 89d9385

Browse files
committed
docs: Sprint 30 INT-01 CHANGELOG v1.26.0 + TODO INT-01 marked done
- CHANGELOG.md: v1.26.0 (FreeIPA<->Keycloak LDAP federation) - docs/IT-STACK-TODO.md: INT-01 marked [x] DONE
1 parent 07061a6 commit 89d9385

2 files changed

Lines changed: 25 additions & 2 deletions

File tree

CHANGELOG.md

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,30 @@ This project adheres to [Keep a Changelog](https://keepachangelog.com/en/1.1.0/)
99
## [Unreleased]
1010

1111
### Planned — Next Up
12-
- Integration milestone implementations (SSO federations, cross-service APIs) — issues created, work in GitHub
12+
- INT-02 Nextcloud ↔ Keycloak OIDC
13+
- INT-03 Mattermost ↔ Keycloak OIDC
14+
- Remaining SSO integrations (INT-04 through INT-08b)
15+
16+
---
17+
18+
## [1.26.0] — 2026-03-03
19+
20+
### Added — Sprint 30: INT-01 FreeIPA ↔ Keycloak LDAP Federation
21+
22+
**Ansible (`it-stack-ansible`):**
23+
- `roles/freeipa/tasks/keycloak-svc-account.yml` — creates `uid=keycloak-svc` read-only service account in FreeIPA: kinit, `ipa user-add`, vault password, `ldappasswd` reset, `ldapmodify` sysaccounts + ACI, bind verification
24+
- `roles/keycloak/tasks/ldap-federation.yml` — full idempotent federation pipeline: kcadm auth → realm check → create LDAP component (`vendor: rhds`, FreeIPA DN paths) → group mapper → 5 attribute mappers (email, firstName, lastName, phone, title) → map `admins``realm-admin` → full sync → assert `federationLink`
25+
- `roles/keycloak/templates/group-mapper.json.j2` — Jinja2 template for LDAP group mapper (`groupOfNames`, `READ_ONLY`, inherits from `federation_id` fact)
26+
- `roles/keycloak/templates/ldap-federation.json.j2` — fixed `uuidLDAPAttribute` from `uid` to `ipaUniqueID` (FreeIPA-correct)
27+
- `roles/keycloak/tasks/main.yml` — added `ldap-federation.yml` import with `keycloak_enable_ldap_federation` guard
28+
- `roles/freeipa/tasks/main.yml` — added `keycloak-svc-account.yml` import with `freeipa_create_keycloak_svc` guard
29+
- `roles/keycloak/tasks/realm.yml` — removed duplicate stub LDAP block; replaced with NOTE comment pointing to `ldap-federation.yml`
30+
31+
**Integration test (`it-stack-keycloak`):**
32+
- `docker/openldap-seed.ldif` — FreeIPA-compatible LDAP seed: `cn=accounts`, `cn=users,cn=accounts`, `cn=groups,cn=accounts`, 3 test users (`testadmin`, `testuser1`, `testuser2`) with `inetOrgPerson`, groups `cn=admins` and `cn=ipausers` with `groupOfNames`
33+
- `docker/docker-compose.integration.yml` — added `ldap-seed` init service (seeds FreeIPA-like LDIF into OpenLDAP); updated Keycloak `depends_on` to `ldap-seed: service_completed_successfully`
34+
- `tests/labs/test-lab-02-05.sh` — full rewrite with 13 sections: OpenLDAP seed verification (3 users, 2 groups, readonly bind), FreeIPA-style LDAP federation creation, group mapper, full sync, `federationLink` assertion, `testadmin` sync check, `admins` group sync, OIDC clients, client credentials, OIDC discovery, SAML descriptor, MailHog, app services
35+
- `.github/workflows/ci.yml` — lab-05-smoke: updated job name, added `python3` to toolchain, reordered wait steps (OpenLDAP first → Keycloak), extended timeout to 240s
1336

1437
---
1538

docs/IT-STACK-TODO.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -386,7 +386,7 @@ All 5 repos have:
386386
> **GitHub Issues created** via `create-integration-issues.ps1` (Sprint 29) — checkboxes below track *implementation* status.
387387
388388
### SSO Integrations (via Keycloak)
389-
- [ ] FreeIPA ↔ Keycloak LDAP Federation
389+
- [x] FreeIPA ↔ Keycloak LDAP Federation**INT-01 DONE** (Sprint 30: Ansible tasks + integration test)
390390
- [ ] Nextcloud ↔ Keycloak OIDC
391391
- [ ] Mattermost ↔ Keycloak OIDC
392392
- [ ] SuiteCRM ↔ Keycloak SAML

0 commit comments

Comments
 (0)