Commit Graph
28 Commits
Author SHA1 Message Date
evangelostsak 9eed8525e8 fix(wireguard): enable the service everywhere and drop the test image entry 2026-10-18 13:56:06 +02:00
evangelostsak 5ccf9551da feat(wireguard): declare the CLI test's host image and move the role to beta 2026-10-18 01:01:08 +02:00
evangelostsak b7d709499d test(wireguard): the CLI test requires the container engine
A row that deploys only svc-net-wireguard installs no engine, and the test
builds its three hosts as inner containers. Verified on a freshly created dev
container with no engine: the role skipped the mesh-less host, the
prerequisite installed the engine, and all 20 checks passed.
2026-10-16 21:26:17 +02:00
evangelostsak 64cacad4b9 refactor: drop rationale and narration from roles/svc-net-wireguard/meta/secrets.yml 2026-10-16 19:10:01 +02:00
evangelostsak 93adab0f47 fix(wireguard): the CLI test runs on the controller only
It builds three hosts from the repository the deploy runs from, which only
the controller holds. A swarm node, and the lab's backup host deployed in
its own compose play, no longer run it.
2026-10-16 13:55:11 +02:00
evangelostsak 5de5a82498 test(wireguard): give the CLI test a 30 minute budget 2026-10-16 03:40:16 +02:00
evangelostsak 54dfa643d4 docs(wireguard): describe the full meshes between Compose hosts 2026-10-16 03:40:16 +02:00
evangelostsak 7aea11f964 feat(wireguard): declare the mesh fields, empty
networks.meshes is where a deployment declares its meshes and
networks.interfaces where the mesh CLI records each host's own. Both ship
empty: the platform declares no mesh.
2026-10-14 15:03:40 +02:00
evangelostsak bf9dc12ac7 refactor(wireguard): remove the generated mesh contract
It was rewritten from whatever declarations a run used, so a local run left
the working tree dirty.
2026-10-14 15:03:40 +02:00
evangelostsak da35a34bba chore(wireguard): regenerate the contract with the primary flag 2026-10-14 11:23:22 +02:00
evangelostsak d04144eaa5 docs(svc-net-wireguard): drop the contract header
The file is the contract. Why a validator wants one is not the
contract's business.
2026-10-05 12:43:23 +02:00
evangelostsak d8307d38d5 docs(svc-net-wireguard): point the role at its upstream
The blanket info-media nocheck claimed WireGuard has no consumer-facing
upstream, which is wrong: wireguard.com is the project's own site and the
README table renders it as the role's link.
2026-09-26 01:14:10 +02:00
evangelostsak 188e4bd307 refactor(svc-net-wireguard): collapse the per-mesh keys into one 2026-09-25 22:35:22 +02:00
evangelostsak 45868f7721 fix(svc-net-wireguard): sort the package names ascending
test_packages_sorted requires ascending order within every distro key, and
procps was appended after wireguard-tools in all three.
2026-09-19 17:16:23 +02:00
evangelostsak 5d74b76c0d fix(svc-net-wireguard): declare procps as a role dependency
Enabling forwarding on the hub goes through ansible.posix.sysctl, which
shells out to the sysctl binary. Minimal RedHat and Arch images ship no
procps, so the hub failed with 'Failed to find required executable sysctl'
after every interface had already rendered.
2026-09-19 15:57:44 +02:00
evangelostsak 61a0575094 fix(wireguard): declare the mesh owner in the role contract
The entry now names the host it belongs to, so the validator has to know the
key exists.
2026-09-19 11:16:39 +02:00
evangelostsak 234f458b31 fix(wireguard): pin the mesh keys against the generic credential rotation
The rotation gate wipes every generated credential so the next deploy has to
carry it. That is right for a per-host secret and wrong for this one: the mesh
keys are correlated across hosts, and the writer that mints them runs once per
round, before the first deploy. Wiped and not rewritten, the update pass would
render an interface with an empty PrivateKey.

rotatable: false says who owns them. The mesh rotates when the writer is asked
to rotate it, as one atomic pass over every member, which is the only way a
mesh can rotate without partitioning.
2026-09-19 09:01:05 +02:00
evangelostsak b2edd9ba4d fix(wireguard): declare the generated mesh block in the role contract
Every key a host_vars file carries under applications.<role> must exist in that
role's meta tree, and the mesh is generated rather than authored, so the
inventory validator rejected it: 'Missing default for svc-net-wireguard:
meshes.swarm.address' and one line per key on every member.

It surfaced only at the rotation gate, which revalidates, so the first pass of
a round looked clean and the update pass aborted before any task ran.

meta/<topic>.yml maps to applications.<app>.<topic>, so declaring the shape in
meta/meshes.yml is enough. Values stay empty because the writer supplies them,
and peers is a list, which the validator does not walk.
2026-09-19 07:45:54 +02:00
evangelostsak af23a2798b feat(wireguard): declare the per-mesh private keys as plain credentials
Declared so the config-lookup validator can resolve the path before a deploy,
and plain so the per-host credential generator leaves the value to the
cross-host mesh pass: the public half has to appear in a different host's peer
list, which no single-host generator can arrange.

On a worker the data-mesh key stays unset, because only the manager, the NFS
server and the backup host are members of that plane.
2026-09-18 10:33:48 +02:00
evangelostsak b347ab841f feat(wireguard): declare the wireguard-tools package per distro
Userspace tooling only; the data path is the in-kernel module, which every
supported distro ships.
2026-09-18 10:33:22 +02:00
evangelostsak 26e299cc48 feat(wireguard): declare the service as host-mode and swarm-only
Host mode, because the interfaces are kernel objects rather than containers,
and enabled only when DEPLOYMENT_MODE is swarm so a compose deploy neither
installs the tooling nor runs the gate.
2026-09-18 10:02:53 +02:00
evangelostsak 6a35e0cc2d feat(wireguard): mark the role as having no consumer-facing upstream
WireGuard is a kernel protocol rather than a product with a landing page, so
the media requirement is suppressed the same way svc-storage-nfs-server does
for NFS.
2026-09-18 09:53:34 +02:00
evangelostsak 1063a0bde9 feat(wireguard): add the galaxy metadata for svc-net-wireguard 2026-09-18 09:53:15 +02:00
evangelostsak c40d7aa6da chore(wireguard): remove the role and its references to start fresh
The consolidated svc-net-wireguard role, its requirement document and the three
references that only existed to support it go away together: the lint ignore for
a load failure inside its tasks, the requirements index entry, and the tunnel
subnet variable nothing else consumed.

Left in place deliberately: the WireGuard mention in the svc-net category
description, which is upstream prose about networking roles in general rather
than anything this role owned.
2026-09-18 00:30:39 +02:00
evangelostsak e242a28876 feat(svc-net-wireguard): flavor model, central subnet, NAT-on-host, beta lifecycle
Replaces mode+nat with a flavor list [server|client|nat]; declares the WireGuard internal subnet in group_vars/all/08_networks.yml; makes the masquerade task idempotent and applied on the deployed host (drops the DOCKER_IN_CONTAINER gate); bumps svc-net-wireguard and test-e2e-cli to lifecycle beta. (Revision 2 of req 026, PR #323 review.)
2026-07-09 13:47:46 +02:00
evangelostsak 1f6fe72288 chore(svc-net-wireguard): set role author to Evangelos Tsakoudis 2026-07-09 13:47:45 +02:00
evangelostsak 8f13d4e964 fix(svc-net-wireguard): move subnet to 192.168.205.0/24
192.168.204.0/24 now collides with web-app-seaweedfs from upstream.
2026-07-09 13:47:45 +02:00
evangelostsak 3cd7a8b69f feat(svc-net-wireguard): add Docker role meta and vars 2026-07-09 13:47:45 +02:00