personal_infra/ansible/infra
counterweight 85040d5f67
watchtower: remove from the estate, and with it ntfy
watchtower is being destroyed. Removed from [vps], with its host_vars, its push
token, and the six Gatus endpoints that referenced it (liveness, disk, two
systemd services, the ntfy DNS record and the ntfy HTTP check).

ntfy went with it - it ran nowhere else - so services/ntfy is deleted,
subdomains.ntfy and ntfy_topic are gone from group_vars, and the ntfy playbook
is out of site.yml. ntfy_topic already had no readers: the three infra/4xx plays
that used it were deleted when their checks were superseded.

Two things this exposed.

services/ntfy/deploy_ntfy_playbook.yml was pointing at the WRONG MACHINE. It
said `hosts: observability`, which resolves to the host `monitoring`
(64.226.70.190) - but ntfy ran on watchtower, and ntfy.contrapeso.xyz pointed
there. Running it would have installed ntfy on the new VPS. Moot now, but it is
the same stale-identity failure as the rest: the group meant watchtower when the
play was written, and nobody revisited it when the group changed. Watchtower was
in [vps] and NO role group at all, while running caddy, ntfy and Uptime Kuma -
nothing in the repo managed any of it.

More seriously: ntfy-emergency-app on vipy (avisame.contrapeso.xyz) sends its
notifications to https://ntfy.contrapeso.xyz, topic "emergencia". Destroying
watchtower breaks it, and it is an EMERGENCY notifier - it would fail silently
at exactly the moment it matters. That is NOT resolved here, deliberately:
standing ntfy up elsewhere, pointing at ntfy.sh, or retiring the app are all
decisions, not cleanups.

What this change does is make the break impossible to miss. The URL was derived
from subdomains.ntfy, so deleting that would have turned it into an undefined
variable buried in a template. It is now an explicit ntfy_service_url in the
app's own vars, still holding the old value, with the three options written
above it. The ntfy credentials stay in the vault because that app still needs
them - the vault was restored from HEAD and only watchtower's push token
removed, rather than re-handling the plaintext.

Verified: no reference to watchtower or its IP anywhere in the repo; Gatus down
from 91 to 85 endpoints, 85 UP, 0 DOWN.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-14 11:26:47 +02:00
..
nodito monitoring: retire the Uptime-Kuma-era checks, add ZFS pool capacity 2026-09-14 10:18:57 +02:00
01_user_and_access_setup_playbook.yml ansible: delete the duplicated vars files, move globals to group_vars/all 2026-09-13 20:58:46 +02:00
02_firewall_and_fail2ban_playbook.yml ansible: delete the duplicated vars files, move globals to group_vars/all 2026-09-13 20:58:46 +02:00
400_host_monitoring.yml monitoring: recover host checks for the whole estate, reported to Gatus 2026-09-14 08:54:10 +02:00
401_service_monitoring.yml monitoring: systemd services, domain expiry, DNS correctness, public endpoints 2026-09-14 09:33:57 +02:00
402_public_monitoring.yml watchtower: remove from the estate, and with it ntfy 2026-09-14 11:26:47 +02:00
403_service_probe_registration.yml uptime kuma: remove every live reference, repoint the probes to Gatus 2026-09-14 10:30:28 +02:00
409_remove_legacy_monitoring.yml monitoring: retire the Uptime-Kuma-era checks, add ZFS pool capacity 2026-09-14 10:18:57 +02:00
900_install_rsync.yml ansible: delete the duplicated vars files, move globals to group_vars/all 2026-09-13 20:58:46 +02:00
910_docker_playbook.yml new groups, stop using all 2026-09-11 21:51:50 +02:00
920_join_headscale_mesh.yml ansible: move the cross-host ports to host_vars, delete services_config.yml 2026-09-13 21:02:57 +02:00