docs(runbooks): fit the UPS battery and rack the shelf switch - #158
Merged
Conversation
The APCRBC115 cartridge and the 1U shelf arrive tomorrow. Both are one purchase (#93 with #110), the rack visit has an order that matters, and the step that matters most is not a physical one: the `UpsSelfTestFailed` silence 54f1715c-e57b-4322-8a6d-5435bc8e1bd8 runs until 2026-09-20, and between fitting the pack and that date it would suppress the alert on a UPS that can finally report honestly — a faulty or badly seated new pack included. Writes the procedure down before the boxes are open rather than reconstructing it at the rack: - a baseline capture first, so the after-state is provably different rather than assumed; a charge still reading exactly 100 and a runtime still at exactly 63 is the signature of a card that cannot see the pack - shelf, then the switch onto UPS power, then the pack — the middle step is the one that closes #110, since a relocated switch left on a wall socket is tidier and no better protected - delete the silence before the self-test, not after - read the self-test from the NMC and from Prometheus, so the scrape path is verified too - scheduled self-tests on the card, because donePass is the last result and not a fresh one Queries Prometheus rather than snmpget throughout: the community would otherwise sit on the command line where ps can read it. Nothing here claims a fitted battery. The documents that currently assert there is none are correct until the runbook succeeds, so they are listed as a post-fit checklist — with the panel-count coupling in check_docs.py flagged — rather than flipped now. Refs #93, #110 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Dr2JeeWbEEcEgZxupT2xd1
6 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What changed
Adds
docs/runbooks/fit-the-ups-battery.md— the procedure for tomorrow's rack visit, covering the APCRBC115 pack (#93) and the 1U shelf (#110) as the one job they were bought to be. Linked fromdocs/roadmap.md(both items),docs/observability.mdand the README file tree.Nothing in the running lab changes. No config, dashboard or rule is touched.
Why
The pack and the shelf arrive tomorrow, and the step that matters most is not a physical one.
UpsSelfTestFailedis silenced in Alertmanager until 2026-09-20 (54f1715c-e57b-4322-8a6d-5435bc8e1bd8). Between fitting the pack and that date, the silence would suppress the alert on a UPS that can finally report honestly — including a new pack that is faulty or badly seated, which is exactly the failure you have just introduced and most want to hear about. #93 says to delete it by hand and not let it expire; this puts that in the place you would actually look while standing at the rack.The order of operations matters too, in a way that is easy to get wrong: moving the TP-Link onto the shelf without moving its power onto a UPS-fed outlet is tidier and no better protected —
prometheusandoracleare laptops, so they still ride out a mains cut and go deaf. That is the whole of #110, and it is one step in the middle of the visit.Written before the boxes are open rather than reconstructed at the rack.
Some specifics the runbook is opinionated about:
100and a runtime still at exactly63afterwards is the signature of a card that cannot see the new pack — not a coincidence to explain away.snmpget. The community would otherwise sit on the command line wherepscan read it, which is the hazardscripts/snmp-verify.shwas written around.ups.rules.yaml,docs/security.mdand the dashboard banner are correct until the runbook succeeds. They are listed as a post-fit checklist inside it, with the coupling flagged: deleting the banner panel changes the dashboard's panel count, andscripts/check_docs.pyasserts every panel count quoted in prose against the live JSON.Blast radius
Documentation only.
secrets/*.sops.yamlVerification
make validate— all available checks pass:Six checks skipped locally for missing binaries and no docker daemon (promtool, amtool, alloy, loki, yamllint, shellcheck, gitleaks) — CI runs the full set. The change is Markdown only, so nothing skipped covers it.
The new file enters
check_docs.py'sPROSEtuple automatically via thedocs/runbooks/*.mdglob, which is why it carries no counted claim: a count describing the post-fit state would fail CI today.make validatepassesdocs/, service README, ordocs/roadmap.md)Generated by Claude Code