feat: services bundle and collection documentation #8
No reviewers
Labels
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: Digitalboard/digitalboard.core#8
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "feat/services-bundle-and-docs"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Bundles the self-hosted service roles from the GymBurgdorf PoC and brings the whole collection's documentation up to standard.
Service roles
Multi-domain routing, split-horizon host rewrites, OIDC bootstrap/hardening, optional authentik ForwardAuth, idempotent provisioning and ACME-DNS knobs across the deployed services.
Collection documentation (latest commit)
Multi-agent review of every role README against its defaults, tasks and templates. Replaces ansible-galaxy init placeholders and corrects docs that had drifted from the code.
Correctness fixes found during review:
License normalized to MIT-0 across galaxy.yml, role meta and READMEs to match the SPDX headers.
* `authentik_host_rewrite_domains`: extra hostnames that reach the authentik container but make it generate URLs (OIDC issuer, reset links) as if requested from the canonical `authentik_domains[0]`. Each entry gets its own traefik router and a URL-based loadbalancer service that disables passHostHeader and pins X-Forwarded-Host via middleware, so server-to-server calls on internal FQDNs keep traffic in the LAN while the iss claim stays aligned with the public host. Uses a network alias on the canonical FQDN so traefik (sharing the network) resolves the URL upstream to this very container. * proxy-app blueprint: - `mode` (default `forward_single`) lets callers pick between proxy, forward_single and forward_domain providers in one template. - `allowed_groups`: when set, emit one PolicyBinding per group on the application; authentik OR-evaluates bindings, so users in any listed group pass and others are denied. Existing inventories with an empty list see no behavioural change.* bootstrap: `garage layout show` truncates node IDs to 16 chars, but the membership check compared against the full hex. After the first successful join, subsequent runs no longer found the short ID in `layout show` and re-issued `layout assign`, marking the task changed every time. Compare against both the truncated and the full form so a configured node stays detected. Also tag the read-only `garage node id` / `layout show` probes with `changed_when: false`. * provision keys: the old parser sliced `stdout_lines[1:]` to drop the header but missed that INFO log lines and ANSI escapes can interleave with table rows. Replace with an explicit `^GK[0-9a-fA-F]+` filter after stripping ANSI, so probe-output noise no longer corrupts the existing-keys set and triggers spurious `key new` calls. * provision buckets: same class of fix — match `^[0-9a-f]{16}\s` data rows instead of slicing `[2:]`, which broke when the table header wasn't exactly two lines. * provision permissions: pre-read `bucket info` for each (key, bucket) pair and only run `bucket allow` when the current `RWO` flag set for that key ID doesn't already match the desired permissions. Previously `bucket allow` ran unconditionally and reported changed every play. * `changed_when: false` on all read-only probes (`key list`, `key info`, `bucket list`).Rename roles/OpnForm → roles/opnform so the role resolves as digitalboard.core.opnform (Ansible collection convention is lowercase). Update tests/test.yml reference accordingly. Add automated admin user creation via POST /api/register, gated on opnform_admin_email + opnform_admin_password. Idempotent through a prior login probe. Without these vars the manual setup page flow is preserved. Add automated OIDC IdentityConnection setup via the per-workspace /api/open/workspaces/{id}/oidc-connections endpoint, gated on opnform_oidc_enabled. Hard-coupled to the admin bootstrap (the API requires an authenticated admin token); validation block fails fast if OIDC is enabled without admin credentials. Supports both an explicit opnform_oidc_group_role_mappings list and a fallback opnform_oidc_admin_group convenience var. Convert opnform_oidc_scopes from space-separated string to YAML list to match OpnForm's API expectation. Rewrite README "First login" and "OIDC setup" sections to reflect that self-hosted OpnForm does not ship a pre-seeded admin and to document the new bootstrap paths. BREAKING CHANGE: opnform_oidc_scopes changed from space-separated string to YAML list. Inventories that override it must update from "openid profile email" to [openid, profile, email].The router rule joined send_domains with ', ' which is the v2 syntax ('Host(`a`, `b`)'). Traefik v3 expects each Host() to be its own matcher joined with the explicit '||' OR operator. With v3 the comma form is silently ignored — only the first host actually matches. Match the pattern already used in the authentik, drawio and nextcloud roles in this collection.testto feat: services bundle and collection documentation03bf0efe44to3236ca332f