Commit Graph
14682 Commits
Author SHA1 Message Date
kevinveenbirkenbach 32891be285 fix(sys-service): avoid false failure by trimming systemctl status output
https://chatgpt.com/share/6973ddfd-68dc-800f-bbae-74170b45de92
2026-01-23 21:45:42 +01:00
kevinveenbirkenbach d971fd0fd6 fix(docker-compose): make compose_f_args role-aware for override + domain-aware for TLS
https://chatgpt.com/share/6973d900-93f4-800f-8d54-08c21f4a8f58
2026-01-23 21:24:27 +01:00
kevinveenbirkenbach 5405701818 fix(docker-compose): make compose lookup plugins robust to templated vars in unit tests
Render docker_compose via templar when available (fallback when _templar is missing) and coerce YAML/JSON strings to dicts in compose_f_args and compose_ca_inject_cmd.
Prevents AnsibleTaggedStr type errors at runtime and avoids NoneType templar crashes in unit tests.

https://chatgpt.com/share/6973d2de-92e0-800f-8279-3e5c9d804c67
2026-01-23 20:58:13 +01:00
kevinveenbirkenbach 204c028d6a feat(domains): add has_domain filter and guard self-signed CA handling
- introduce has_domain filter reusing get_domain logic
- prevent self-signed CA role execution if no domain is defined
- add unit tests for has_domain filter

https://chatgpt.com/share/6973cdf7-f7fc-800f-901b-4de186a3637c
2026-01-23 20:37:22 +01:00
kevinveenbirkenbach 8e68dd5c1b feat(docker-compose): add infinito-compose wrapper and switch repair scripts to it
Deploy /usr/local/bin/infinito-compose to auto-detect .env and compose override files.
Refactor sys-ctl-rpr-docker-{hard,soft} to use the wrapper consistently.
Update unit tests to match wrapper-based command building.

https://chatgpt.com/share/6973c64c-b560-800f-8915-cbb786c51714
2026-01-23 20:04:38 +01:00
kevinveenbirkenbach 4dbbcec106 feat(docker-compose): add dynamic CA trust injection for self-signed TLS
Introduce docker-compose-ca role with CA wrapper and inject script, add CA-aware compose override handling, and refactor compose pull/run logic to support multi-file projects. Update handlers, lookups, paths, and unit tests to consistently resolve TLS-driven CA injection without implicit defaults.

https://chatgpt.com/share/6973c00c-139c-800f-8ddb-e7d0cf5043fc
2026-01-23 19:36:55 +01:00
kevinveenbirkenbach ba85625ad1 Tmp deactivated TLS for CI again 2026-01-23 11:21:14 +01:00
kevinveenbirkenbach 8bdf43ee87 Minor improvements 2026-01-23 11:17:53 +01:00
kevinveenbirkenbach cfc52f1deb Added linebreak 2026-01-23 08:59:15 +01:00
kevinveenbirkenbach f047ee2c7f fix(mariadb): enforce database user password via ALTER USER in CI path
https://chatgpt.com/share/6972d567-3f00-800f-a3c4-730b99304b59
2026-01-23 02:56:47 +01:00
kevinveenbirkenbach ed11ab1c52 fix(tls): make TLS_SELFSIGNED_SCOPE a global var and require it in cert_plan
https://chatgpt.com/share/6972d189-4b80-800f-947b-a4f23b5a21f5
2026-01-23 02:40:18 +01:00
kevinveenbirkenbach c3cde19b47 fix(sys-front-tls-selfsigned): make SAN drift detection safe and deterministic
Split SAN comparison into multiple set_fact tasks to avoid self-references,
handle missing certificates correctly, and regenerate self-signed certs
when SANs change or no cert exists.

https://chatgpt.com/share/6972cdc8-5c78-800f-a356-c349b3d7d2be
2026-01-23 02:24:17 +01:00
kevinveenbirkenbach c3c54ce043 refactor(tls): split resolution and certificate planning, add global self-signed SAN support
- Extract shared TLS logic into module_utils/tls_common
- Introduce cert_plan lookup for certificate paths and SAN computation
- Simplify tls_resolve to strict protocol/port/domain resolution only
- Add global self-signed certificate scope covering all domains
- Mount self-signed cert base into OpenResty container
- Update Nginx templates to use cert_plan for ssl_certificate paths
- Add comprehensive unit tests for tls_common, tls_resolve, and cert_plan

https://chatgpt.com/share/6972c568-9e8c-800f-b89a-a0061966f9a8
2026-01-23 01:48:31 +01:00
kevinveenbirkenbach 5e25e5859c refactor(web-app-desktop): derive card URLs via tls_resolve instead of WEB_PROTOCOL
- Remove legacy WEB_PROTOCOL dependency from docker_cards lookup
- Build application URLs using strict tls_resolve lookup
- Align desktop card URL generation with new TLS layer
- Update unit tests to stub tls_resolve and validate TLS-based behavior
- Drop WEB_PROTOCOL-related test cases

https://chatgpt.com/share/6972b832-8284-800f-8b86-f1a32061c09f
2026-01-23 00:52:14 +01:00
kevinveenbirkenbach 0b9f71463c refactor(tls): replace legacy tls filters with strict tls_resolve lookup
- Remove deprecated filter_plugins/tls.py and all dependent filters
- Introduce strict lookup plugin lookup_plugins/tls_resolve.py as single TLS authority
- Migrate all roles, templates, vars, and tasks to use tls_resolve (protocols, ports, URLs, cert paths)
- Enforce explicit TLS context (domains, applications, TLS_ENABLED, TLS_MODE)
- Support letsencrypt and self_signed with SAN handling and per-app overrides
- Update TLS provider roles to assert resolver state instead of setting facts
- Add comprehensive unit tests for tls_resolve lookup

https://chatgpt.com/share/6972b49b-b074-800f-a323-dd9fe69d02eb
2026-01-23 00:36:46 +01:00
kevinveenbirkenbach 49246fb3d8 test(local): reset inventory before init
Rename test-local-init to test-local-reset and wipe inventory directory
before recreating it to ensure clean local test runs.

https://chatgpt.com/share/69729492-8afc-800f-99f1-823512d8604e
2026-01-22 22:20:13 +01:00
kevinveenbirkenbach fb5abced91 refactor(tls): modularize TLS into orchestrator and providers 2026-01-22 21:38:31 +01:00
kevinveenbirkenbach 54ad6a501b refactor(tls): split tls layer into orchestrator + providers
https://chatgpt.com/share/697286d6-d400-800f-a67b-425981fa5781
2026-01-22 21:21:34 +01:00
kevinveenbirkenbach 9fdb0cddd0 Replace global WEB_PROTOCOL / WEB_PORT / WEBSOCKET_PROTOCOL logic
with explicit per-application TLS resolution.

Key changes:
- Introduce sys-front-tls-layer as the single TLS abstraction
- Centralize certificate paths via TLS_CERT_FILE / TLS_KEY_FILE / TLS_CA_FILE
- Replace sys-svc-letsencrypt SSL templates with generic TLS layer includes
- Add tls_* Jinja filters (enabled, mode, protocol, port, websocket)
- Resolve TLS mode per application (letsencrypt | self_signed | off)
- Remove implicit defaults and WEB_* globals to fail fast on misconfiguration
- Support self-signed certificates with SAN awareness
- Make TLS behavior explicit and consistent across all roles

This decouples application logic from certificate providers and
allows switching TLS flavor without touching app roles.

https://chatgpt.com/share/69727c61-8e68-800f-a267-473a7e627978
2026-01-22 20:36:49 +01:00
kevinveenbirkenbach 61992289e4 fix(openresty): ignore UTF-8 log decode errors in debug handler
https://chatgpt.com/share/69726bda-0950-800f-9913-eaab74abdadd
2026-01-22 19:26:22 +01:00
kevinveenbirkenbach f52f49118a Disable 'proxy_hide_header Strict-Transport-Security;' when TLS disabled 2026-01-22 16:26:37 +01:00
kevinveenbirkenbach fae7b82243 feat(security): introduce strong_password filter backed by ValueGenerator
- add strong_password Jinja2 filter as thin wrapper around ValueGenerator
- enforce password policy (upper, lower, digit, special, min length)
- replace insecure ascii-only password lookup with strong_password filter
- update CLI setup users and unit tests accordingly
- harden inventory sample password example

https://chatgpt.com/share/69722c7e-ebe0-800f-a9ab-a3e21b43269c
2026-01-22 14:56:05 +01:00
kevinveenbirkenbach 95a240962a fix(bbb): stabilize freeswitch startup in dev (iptables REJECT chain + etherpad prebuild)
- Prebuild etherpad image in dev runtime to avoid local startup errors
- Override freeswitch entrypoint in dev to ensure missing iptables REJECT chain
  does not crash the container (Docker-in-Docker compatibility)

https://chatgpt.com/share/6972262f-4318-800f-8bf8-f4166900f3a5
2026-01-22 14:28:56 +01:00
kevinveenbirkenbach 0eb7071a49 fix(local-tests): force python3 for local inventory init and stabilize runtime vars
- Force PYTHON=python3 for test-local-init to avoid missing venv python
- Rename test-local-inventory-init-all target to test-local-init
- Fix JSON quoting for --vars in local deploy scripts
- Add RUNTIME default to group_vars
- Improve debug output for initial host vars
- Update user hint in local run script

https://chatgpt.com/share/697222e1-5edc-800f-b9ab-511d8afc3142
2026-01-22 14:14:50 +01:00
kevinveenbirkenbach bac0393a3e test(integration): fix false positives for applications.<attr>() and add exact error location
- Skip Python attribute matches that are used as method calls (e.g. applications.setdefault(...))
- Add line and column information to assertion errors
- Print the exact source line for faster debugging of invalid application references

https://chatgpt.com/share/697215ce-df3c-800f-b81f-641c75939e7f
2026-01-22 13:19:19 +01:00
kevinveenbirkenbach b334a5c98d fix(cli): ensure project root on sys.path when running cli/__main__.py directly
- Prevent accidental import of installed "cli" package from site-packages
- Make `python3 cli/__main__.py ...` behave identical to `python -m cli ...`
- Add env.development to .dockerignore to match .gitignore

https://chatgpt.com/share/69720fd6-a1c8-800f-b1e2-6909aa63643a
2026-01-22 13:13:01 +01:00
kevinveenbirkenbach d2694566e5 feat(runtime): add development runtime marker and unified runtime detection
- introduce env.development marker for local dev runtime
- add cli.meta.runtime module with library API and CLI entrypoint
- detect runtime via ACT/GitHub/marker with explicit RUNTIME override
- use env.development as docker-compose env override
- pass RUNTIME=dev into development inventory generation
- add make setup-development helper

https://chatgpt.com/share/69720fd6-a1c8-800f-b1e2-6909aa63643a
2026-01-22 12:53:42 +01:00
kevinveenbirkenbach 792b78fe44 fix(ci): allow optional Docker Hub login in mirror workflow
Copy Docker Hub secrets into job env and use env.* in if-condition.
This fixes GitHub Actions validation error caused by using secrets.*
directly in step conditions.

https://chatgpt.com/share/6972020d-afc4-800f-8713-917767b3ac73
2026-01-22 11:54:57 +01:00
kevinveenbirkenbach 4b712c22cb feat(compose): load optional env.local as override for env.ci
https://chatgpt.com/share/697200be-e96c-800f-a8d3-b89b75b6e37c
2026-01-22 11:49:31 +01:00
kevinveenbirkenbach 94a68a0bf0 Added hint for ipv6 2026-01-22 11:21:04 +01:00
kevinveenbirkenbach b8a3deaaf3 ci(mirror): add nightly and reusable GHCR mirror workflow (never-fail)
Add a scheduled (06:00 UTC), manual and reusable workflow to mirror Docker Hub
images to GHCR using skopeo. The job runs best-effort and never fails the pipeline,
with optional Docker Hub authentication and configurable namespace/prefix.

https://chatgpt.com/share/6971e6cf-be18-800f-9419-589fd3e22c3d
2026-01-22 11:16:01 +01:00
kevinveenbirkenbach 221c1c67aa feat(cli): add flexible docker image mirror resolver and sync system
Introduce a modular mirror subsystem with:
- canonical ImageRef model
- shared discovery & normalization logic for Docker Hub images
- pluggable registry providers (GHCR, Gitea-ready)
- inventory resolver for mirrored image paths
- skopeo-based mirror sync implementation

Design follows SRP/KISS principles and allows future registry backends.

https://chatgpt.com/share/6971e6cf-be18-800f-9419-589fd3e22c3d
2026-01-22 09:58:48 +01:00
kevinveenbirkenbach 4cabf905b4 Deleted deprecated classes 2026-01-22 09:38:11 +01:00
kevinveenbirkenbach 8d3fe20d5f fix(openproject): stabilize startup, cap rails threads, run migrations before settings
- ensure OpenProject runs in production mode only
- wait for web container before applying settings
- run pending migrations automatically before rails runner
- apply settings via rails runner stdin (robust quoting & booleans)
- introduce thread/db pool cap to prevent OOM (OPENPROJECT_DB_POOL / RAILS_MAX_THREADS)
- fix admin creation runner env handling
- wire application_id correctly into docker roles
- disable unnecessary git pull for openldap docker role
- remove obsolete Development.md

This prevents OpenProject boot crashes caused by excessive thread/db pools
derived from dynamic Postgres sizing and makes role execution deterministic.

https://chatgpt.com/share/697135bd-7630-800f-8e1b-573305df86f6
2026-01-21 21:23:15 +01:00
kevinveenbirkenbach 23894072bf Solved linting hint 2026-01-21 20:29:45 +01:00
kevinveenbirkenbach 6af034a0a0 feat(dev-deploy): stream compose/ansible output with CI-aware TTY and tail buffers
https://chatgpt.com/share/69712357-7548-800f-9b51-7fd4c4207bef
2026-01-21 20:04:48 +01:00
kevinveenbirkenbach 5e097c02f1 fix(shellcheck): address lint findings across scripts
- openldap: use find instead of ls for module path detection
- docker-volumes health: robust whitelist parsing + quote vars
- btrfs health: quote path
- docker CLI installer: silence SC2031 false-positive for /etc/os-release vars
- test-dns: use loop counter
- chess: require APP_KEY_FILE env
- espocrm: log normalized seed flags to avoid unused vars
- shopware: disable SC2016 for php -r blocks (PHP vars in single quotes)
- fix script: add shebang + strict mode

https://chatgpt.com/share/69712026-7288-800f-b1d0-701e31754362
2026-01-21 19:51:12 +01:00
kevinveenbirkenbach 0266c1b773 Let shellcheck check all files 2026-01-21 19:36:37 +01:00
kevinveenbirkenbach 0b13b98316 feat(sys-svc-docker): auto-detect and configure dockerd MTU via automtu in dind
https://chatgpt.com/share/697112b2-0410-800f-93ff-9372b603d43f
2026-01-21 19:35:16 +01:00
kevinveenbirkenbach 29332570cb Added endline 2026-01-21 18:10:03 +01:00
kevinveenbirkenbach c9e05dcb6b test(local): print full app list in single line instead of sample
https://chatgpt.com/share/69710189-7df4-800f-a291-2979678ea198
2026-01-21 17:39:49 +01:00
kevinveenbirkenbach bdd6587bcc fix(ci): show deploy stdout/stderr and pass inventory_dir in run orchestrator
- Capture and print deploy stdout/stderr on failure (development/deploy.py)
- Forward INVENTORY_DIR into init and deploy handlers (development/run.py)
- Add missing when_down flag for up handler
- Print full traceback on orchestrator failure for CI visibility

https://chatgpt.com/share/6970fcf5-5860-800f-89ae-0d601405489b
2026-01-21 17:21:02 +01:00
kevinveenbirkenbach a89f74fac0 Included extra modul parameter 2026-01-21 16:02:18 +01:00
kevinveenbirkenbach 33ab4b61dc feat(dev-deploy): extract CoreDNS Corefile rendering into dedicated Python class
- Move Corefile rendering logic into CoreDNSCorefileRenderer
- Add atomic rendering via envsubst with validation and preview
- Enforce strict error handling for missing files, invalid paths and permissions
- Integrate renderer into development compose workflow
- Rename DNS make targets for consistency (dns-setup / dns-remove)
- Rename test-act target to test-act-all

https://chatgpt.com/share/6970e503-e818-800f-8724-d791a3abfb33
2026-01-21 15:38:54 +01:00
kevinveenbirkenbach 249103bb56 feat(ci): unify local act workflow with CI discovery logic and strict input resolver
- Use docker-up + ci-discover-output for local discover job (same as CI)
- Add strict input resolver (scripts/meta/resolve/input.sh) with enforced env contract
- Ensure ONLY_APP is always defined (may be empty, but never unset)
- Expose resolved inputs as workflow outputs for linear matrix deploy
- Enforce linear matrix execution via max-parallel: 1
- Align act helper scripts with linear matrix semantics

https://chatgpt.com/share/6970ba64-8c2c-800f-bb90-7edbe9168582
2026-01-21 12:37:03 +01:00
kevinveenbirkenbach 4cf54418ca Removed --missing 2026-01-21 03:34:06 +01:00
kevinveenbirkenbach 7bf8070ef7 fix(ci): remove unsupported --no-cache/--missing flags from distros.sh
The CI distros runner now only passes arguments supported by
cli.deploy.development run. This avoids argparse errors caused by
forwarding build-only flags that the orchestrator does not accept.

https://chatgpt.com/share/697030c4-f60c-800f-94b6-9128f87da57e
2026-01-21 02:49:48 +01:00
kevinveenbirkenbach 77bb22a1dd Forced python3 environment inside container 2026-01-21 02:45:39 +01:00
kevinveenbirkenbach 421a5cded5 deactivated slim 2026-01-21 02:36:42 +01:00
kevinveenbirkenbach d5aeac3885 Optimized name 2026-01-21 02:10:25 +01:00