Commit Graph
14682 Commits
Author SHA1 Message Date
evangelostsak 529c5ace4f feat(env): declare the underlay flag in the env SPOT
The dotenv generator refuses a passthrough key the SPOT does not
declare, so an unset variable stays an explicit empty rather than a name
nothing owns.
2026-10-07 09:54:32 +02:00
evangelostsak 0470491e1d feat(swarm-test): pass the underlay flag to the matrix
Same hand-off the vpn axis already uses.
2026-10-07 09:54:32 +02:00
evangelostsak 89b8a8c8d2 feat(env): carry the underlay flag into the runner
The swarm matrix reads it from the environment the passthrough builds.
2026-10-07 09:54:32 +02:00
evangelostsak 1b28f87b37 feat(swarm-test): add the SSH-on-underlay arm
INFINITO_SWARM_SSH_UNDERLAY runs the mesh up and gated while the deploy
stays on the underlay addresses over SSH. Unset, nothing changes.
2026-10-07 09:54:32 +02:00
evangelostsak d792519725 feat(mesh-cli): move the transport to SSH without moving the address
keep_address switches the connection, the user, the key and the ssh
args exactly as the mesh switch does, and leaves ansible_host where it was.
Against the other two transports that isolates the cost of leaving the local
connection from the cost of the tunnel.
2026-10-07 09:54:32 +02:00
evangelostsak 95cfc8b7bd fix(ansible): profile every task, not the slowest 300
The callback truncated its summary, so a deploy's per-task table was
only ever its own top 300. Comparing two transports needs the tasks the
truncation dropped, and 'all' is a value the plugin handles explicitly.
2026-10-07 09:54:32 +02:00
kevinveenbirkenbach 056bb99a14 Merge remote-tracking branch 'origin/main' into update/version-sources-web-app-wordpress-20261005-950916f 2026-10-07 02:58:03 +02:00
kevinveenbirkenbachandClaude Opus 5.5 d0ec38017a fix(test-e2e-cli): name the negotiated MCP protocol version on requests
MCP Adapter 0.7.0 for WordPress refuses a request that follows
initialize without the MCP-Protocol-Version header: 'Invalid Request:
MCP-Protocol-Version header is required for a 2025-06-18 session'. The
contract probe never sent it, so the CLI test of web-app-wordpress
failed at tools/list.

The probe now keeps the version the server answers initialize with and
sends it on every later request of the streamable HTTP transport, which
the specification asks of a client since 2025-06-18.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-07 02:58:03 +02:00
kevinveenbirkenbach 0ecb2bc4fc Merge remote-tracking branch 'origin/main' into update/version-sources-web-app-moodle-20261005-4f455e2 2026-10-07 02:31:33 +02:00
kevinveenbirkenbach a4fbf247c9 Merge remote-tracking branch 'origin/main' into fix/web-app-prometheus/blackbox-targets/792 2026-10-07 02:31:23 +02:00
kevinveenbirkenbach 17c3c4ae14 Merge remote-tracking branch 'origin/main' into fix/code-scanning-alerts/807 2026-10-07 02:31:18 +02:00
kevinveenbirkenbach cebe5d8379 Merge remote-tracking branch 'origin/main' into update/docker-image-versions-web-app-nextcloud-20261002-798c076 2026-10-07 02:31:14 +02:00
kevinveenbirkenbach fc1e1d794f Merge remote-tracking branch 'origin/main' into update/version-sources-web-app-prometheus-20261005-fc0bcb7 2026-10-07 02:31:12 +02:00
kevinveenbirkenbach 1a2e923933 Merge remote-tracking branch 'origin/main' into update/version-sources-web-app-flowise-20261005-3730e0c 2026-10-07 02:31:12 +02:00
kevinveenbirkenbach bddf76afbd Merge remote-tracking branch 'origin/main' into update/version-sources-web-app-n8n-20261005-dde2ead 2026-10-07 02:31:12 +02:00
kevinveenbirkenbach f58de792b8 Merge remote-tracking branch 'origin/main' into update/docker-image-versions-web-app-chess-20261006-a4a4f62 2026-10-07 02:31:11 +02:00
kevinveenbirkenbach bf88bf356c Merge remote-tracking branch 'origin/main' into update/docker-image-versions-web-app-pixelfed-20261006-a258621 2026-10-07 02:31:11 +02:00
kevinveenbirkenbach 5d1edd263f Merge pull request #809 from infinito-nexus/update/version-sources-web-app-gitea-20261005-709f14e
update(versions): update pins with a declared source (web-app-gitea)
2026-10-07 02:22:55 +02:00
kevinveenbirkenbach 21aab1108b Merge pull request #845 from infinito-nexus/update/docker-image-versions-svc-db-elasticsearch-20261007-aa4b8ef
update(images): update Docker image versions (svc-db-elasticsearch)
2026-10-07 02:19:26 +02:00
kevinveenbirkenbach 766f4c4fa0 Merge pull request #846 from infinito-nexus/update/docker-image-versions-web-app-gitea-20261007-0c30c20
update(images): update Docker image versions (web-app-gitea)
2026-10-07 02:19:02 +02:00
infinito-nexus-updater[bot] eecdeecb9f update(images): update Docker image versions (web-app-gitea) 2026-10-07 00:16:10 +00:00
infinito-nexus-updater[bot] 426ab1ea2a update(images): update Docker image versions (svc-db-elasticsearch) 2026-10-07 00:16:03 +00:00
kevinveenbirkenbach 703b13b900 Merge remote-tracking branch 'origin/main' into update/version-sources-web-app-gitea-20261005-709f14e 2026-10-07 02:10:25 +02:00
kevinveenbirkenbachandClaude Opus 5.5 9413aeba08 fix(web-app-gitea): give the MCP sidecar a healthcheck that can run
gitea-mcp-server 1.8.0 is the first release that ships a HEALTHCHECK,
and it is written in shell form for an image that has no shell. Every
probe ends in 'exec: "/bin/sh": no such file or directory', the
container turns unhealthy after three attempts, and Swarm replaces the
task about every 72 seconds, so the service never converges.

The role now declares the probe itself, in exec form and with the port
the sidecar listens on: without it the probe asks 8080 whatever the
server uses. The command took that port from the adapter's entry, it
now reads the sidecar's own.

The adapter waits for a healthy sidecar, so a probe that cannot pass
fails a compose deploy as well and not only a Swarm one.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-07 02:10:25 +02:00
kevinveenbirkenbach 402aa2fe9d Merge remote-tracking branch 'origin/main' into update/version-sources-web-app-moodle-20261005-4f455e2 2026-10-07 02:10:13 +02:00
kevinveenbirkenbachandClaude Opus 5.5 d1eee3e26f fix(web-app-moodle): run Moodle 5.3 and upgrade existing sites to it
The pin moved from 4.5.11 to 5.3.0, and the role fitted neither a new
install nor an existing one.

Moodle 5 serves from public/ and routes every other path through
r.php. nginx now uses public/ as its root, hands unknown paths to the
router and passes PATH_INFO for scripts with slash arguments, and
config.php declares the router as configured. The paths the role checks
and writes (version.php, auth, webservice, the OIDC plugin) moved below
public/, the URL of the OIDC plugin stays auth/oidc. The source archive
no longer contains vendor/, so the image installs the Composer
dependencies it declares. The OIDC plugin is pinned to v5.2.1, the
newest release.

An existing site kept its old code: the entrypoint filled the code
volume once and never again. It now records the release it copied and
replaces the tree when the image carries another one, and a new task
runs admin/cli/upgrade.php. Plugins that were installed through the web
interface are not carried over, the README says how to ship them.

A site installed with 5.3 forces login by default, which 4.5 did not,
so its start page answers 303 to the login page and the webserver
health check refused it. The role declares 200 and 303 as the codes
that check accepts: 200 is what an upgraded site keeps answering.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-07 02:10:13 +02:00
kevinveenbirkenbach 469ac4a8b4 Merge remote-tracking branch 'origin/main' into fix/web-app-prometheus/blackbox-targets/792 2026-10-07 02:06:46 +02:00
kevinveenbirkenbach 546eb9397b Merge remote-tracking branch 'origin/main' into fix/code-scanning-alerts/807 2026-10-07 02:06:42 +02:00
kevinveenbirkenbach 6038122c93 Merge remote-tracking branch 'origin/main' into update/docker-image-versions-web-app-nextcloud-20261002-798c076 2026-10-07 02:06:35 +02:00
kevinveenbirkenbach 2cff077409 Merge remote-tracking branch 'origin/main' into update/version-sources-web-app-prometheus-20261005-fc0bcb7 2026-10-07 02:06:32 +02:00
kevinveenbirkenbach e790cc8aeb Merge remote-tracking branch 'origin/main' into update/version-sources-web-app-flowise-20261005-3730e0c 2026-10-07 02:06:32 +02:00
kevinveenbirkenbach 63133f065b Merge remote-tracking branch 'origin/main' into update/version-sources-web-app-n8n-20261005-dde2ead 2026-10-07 02:06:32 +02:00
kevinveenbirkenbach 0dab98a8ac Merge remote-tracking branch 'origin/main' into update/docker-image-versions-web-app-chess-20261006-a4a4f62 2026-10-07 02:06:32 +02:00
kevinveenbirkenbach e682da6faa Merge remote-tracking branch 'origin/main' into update/docker-image-versions-web-app-pixelfed-20261006-a258621 2026-10-07 02:06:32 +02:00
kevinveenbirkenbach c5f7909c59 Merge pull request #839 from infinito-nexus/update/docker-image-versions-svc-ai-ollama-20261006-03a0e71
update(images): update Docker image versions (svc-ai-ollama)
2026-10-07 02:01:11 +02:00
kevinveenbirkenbach 09566e3eab Merge remote-tracking branch 'origin/main' into fix/web-app-prometheus/blackbox-targets/792 2026-10-07 01:51:25 +02:00
kevinveenbirkenbach d287e55964 Merge remote-tracking branch 'origin/main' into fix/code-scanning-alerts/807 2026-10-07 01:51:19 +02:00
kevinveenbirkenbach 4beefaf601 Merge remote-tracking branch 'origin/main' into update/docker-image-versions-web-app-nextcloud-20261002-798c076 2026-10-07 01:51:12 +02:00
kevinveenbirkenbach 73180e869e Merge branch 'main' of github.com:infinito-nexus/core 2026-10-07 01:47:52 +02:00
kevinveenbirkenbachandClaude Opus 5.5 f4b5b7be25 test(lint): require memory parameters to follow the container limit
A heap, a cache size or a PHP limit written as a literal drifts away
from the mem_limit its service declares. The lint scans roles/ and
group_vars/ for the known spellings of such parameters and requires
each value to reach lookup('service_memory_mb'), or the Node lookup for
the V8 heap, on its own line or through the variables it reads.

It follows names inside {{ }} and $NAME through the definitions of the
role and of group_vars, reads a command list, a folded scalar and a
wrapped expression as one line, and counts a literal fallback as a
literal. A sidecar snippet has to name its own role as provider.

It knows a list of spellings and layouts. A parameter written another
way is not seen.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-07 01:43:25 +02:00
kevinveenbirkenbachandClaude Opus 5.5 1f72f59ec1 fix(web-app-nextcloud): size PHP's memory from the container, not the host
PHP_MEMORY_LIMIT and PHP_OPCACHE_MEMORY_CONSUMPTION were both the host's
RAM divided by 30, read from two keys in meta/services.yml: 533M on a
16 GB host, 2133M on a 64 GB one, beside a container limited to 3g either
way. They are now half and an eighth of that limit through
lookup('service_memory_mb'), which renders 1536M and 384M on every host.

The lookup sits in env.j2 and the two meta keys are gone. It reads the
applications payload, and meta/services.yml is part of that payload, so
a call from there would run back into the render that asked for it.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-07 01:41:55 +02:00
kevinveenbirkenbachandClaude Opus 5.5 b56b0551aa fix(web-app-wordpress): size PHP's memory_limit from the container, not the upload
upload.ini set memory_limit to WORDPRESS_MAX_UPLOAD_SIZE, the same 256M
as upload_max_filesize and post_max_size, so the memory a request may
use depended on how large an upload may be. It is now a quarter of the
service's mem_limit through lookup('service_memory_mb'), which renders
384M beside the 1.5g container. The upload sizes keep their variable.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-07 01:40:20 +02:00
kevinveenbirkenbachandClaude Opus 5.5 ba5c4b0060 docs(atlassian): describe the heap as a share of the container limit
The Confluence and Jira READMEs said the JVM heap was derived from host
RAM with safe caps. It is 70 % of the service's mem_limit for
JVM_MAXIMUM_MEMORY and 35 % for JVM_MINIMUM_MEMORY, and the caps of the
old filter no longer exist.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-07 01:38:12 +02:00
kevinveenbirkenbachandClaude Opus 5.5 462bc4ccf0 fix(web-app-shopware): keep the init memory limit in the role's env file
The init service received INIT_PHP_MEMORY_LIMIT through an inline
environment block in the compose template. It moves to templates/env.j2,
which the container base hands to every Shopware container as env_file.
Only files/shell/init.sh reads the variable, behind a `:?` guard, so the
other containers seeing it changes nothing.

The lookup names 'init' instead of service_name, which is bound in the
compose template but not in env.j2. The value stays 1024M.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-07 01:37:17 +02:00
kevinveenbirkenbachandClaude Opus 5.5 333c9fe6d7 fix(web-app-snipe-it): take LDAP_MEM_LIM from the container limit
LDAP_MEM_LIM was a literal 500M beside a 2g container. It is now a
quarter of the service's mem_limit through lookup('service_memory_mb'),
the share the seed command of this role already uses. That renders 512M.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-07 01:32:57 +02:00
kevinveenbirkenbachandClaude Opus 5.5 3fb237a143 fix(search): keep the search heaps at the size they had
The heaps of the central Elasticsearch, Zammad's Elasticsearch and
Magento's OpenSearch follow their container through the lookup, so far
at half of the limit. That doubled them to 2048, 1024 and 1024 MiB.
Xms equals Xmx, so each container claims that heap from its start, and
the central one locks it in memory.

A quarter of the limit gives 1024, 512 and 512 MiB, the sizes these
engines ran with before. The heap still follows the limit.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-07 01:32:05 +02:00
kevinveenbirkenbachandClaude Opus 5.5 45d956e5ea fix(sidecars): cap an engine's sidecar at its provider's size
A Redis sidecar whose consumer declares no services.redis.mem_limit
runs in a container that inherits the consumer's primary entity limit.
Since the lookup replaced the old filter, maxmemory followed that limit
and rose from 204 MiB to between 819 and 3276 MiB in 17 roles.

lookup('service_memory_mb', ..., provider=<role>) caps the result at
the same share of the provider's own limit when the application does
not declare one for that service. A declared limit is not capped, and a
container smaller than the provider keeps its own share. The Redis
sidecar passes provider='svc-db-redis': those 17 roles get 409 MiB, the
seven with a 256 MiB container stay at 204.

The lookup now rejects unknown options and a provider that is no role
or declares no limit for the service, so a misspelled option fails
instead of silently lifting the cap.

The memcached sidecar's literal -m 64 takes the same lookup and keeps
its value.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-07 01:30:01 +02:00
kevinveenbirkenbachandClaude Opus 5.5 e6be88bf97 fix(postgres): size the buffers from the Postgres container, in its own role
shared_buffers, work_mem and maintenance_work_mem were a quarter, half
and a twentieth of the host's RAM, while the Postgres container is
limited to 6g. On a 64 GB host that asked for 15997 MB of shared
buffers inside it. They are now the same shares of the container's
mem_limit through lookup('service_memory_mb'): 1536 MB, 3072 MB divided
by max_connections, and 307 MB.

The three variables move from group_vars/all/17_resource.yml into the
role's vars. They no longer describe the host, and only the role's
compose template reads them. Their *_MB helpers and POSTGRES_TOTAL_RAM_MB
had no other reader and are gone. An inventory can no longer override
the three values; the knob is services.postgres.mem_limit.

Discourse's db_shared_buffers was a literal 4096MB, all of the 4g the
role declares. It becomes a quarter of that limit, 1024MB. It only
applies when Discourse runs its bundled database.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-07 01:28:43 +02:00
kevinveenbirkenbach b98e41e84d Merge pull request #814 from infinito-nexus/update/version-sources-web-app-stalwart-20261005-966a4cc
update(versions): update pins with a declared source (web-app-stalwart)
2026-10-07 00:47:41 +02:00
kevinveenbirkenbach 865c7565f3 Merge pull request #820 from infinito-nexus/update/docker-image-versions-svc-db-qdrant-20261005-0d33343
update(images): update Docker image versions (svc-db-qdrant)
2026-10-07 00:45:50 +02:00