Skip to content

feat: mark the adopted HA VM 2000 describe-only (#325) - #8

Merged
ChrisonSimtian merged 1 commit into
mainfrom
feat/describe-only-marker
Jul 28, 2026
Merged

feat: mark the adopted HA VM 2000 describe-only (#325)#8
ChrisonSimtian merged 1 commit into
mainfrom
feat/describe-only-marker

Conversation

@ChrisonSimtian

Copy link
Copy Markdown
Contributor

Applies spec.manage: describe-only to VM 2000, the adopted HAOS install.

Requires the engine + schema support in Chrison-Homelab/Homelab#327merge that first. This PR's validate check will fail until it lands, because the pinned schema-v1 artifact doesn't know the manage field yet and both specs are additionalProperties: false.

Why

This repo's README, stack.yaml and CLAUDE.md have always described VM 2000 as "describe-only" and "never re-provisioned by converge --apply". That was prose — nothing enforced it. An unscoped converge --apply on this stack proposed a SetConfig against a hand-built HAOS install, and the only thing preventing it was remembering to pass --only.

Now: plan reports DESCRIBE-ONLY instead of perpetual drift, --apply reports SKIPPED, and naming it in --only doesn't override either.

Verified live once #327 was built locally:

▸ homeassistant  (vmid 2000, node hpe-01) — DESCRIBE-ONLY (adopted; documented, never written)
--only homeassistant --apply  →  0 applied, 0 no-change, 1 skipped, 0 failed

Deliberately NOT applied to CT 4100

It reads like the other adopted member, but it's stopped and tagged retired — Mate runs on the podman host now (podman-host/quadlets/leapmotor-mate.container). Its shape is dead weight pending the CT's deletion, not an adopted member worth protecting, and marking it describe-only would assert something false. It stays a legitimate drift entry; CLAUDE.md now says why.

Also

Corrected one thing I'd written before checking: the comment claimed destroy would refuse this member. converge --destroy is CT-scoped and doesn't touch VM members at all, so destroy was never a risk here. The marker does make destroy refuse a describe-only LXC.

VM 2000 is a hand-built HAOS install that predates this stack, so its live config
can never fully match the shape describing it. Converge read that difference as
drift on every run, and an unscoped `converge --apply` on SmartHome proposed a
SetConfig against it.

This repo's README, stack.yaml and CLAUDE.md have always called it
"describe-only", but that was prose. The only thing actually preventing a write
was the operator remembering to pass --only. `spec.manage: describe-only` moves
the constraint into the shape:

  plan    → DESCRIBE-ONLY (adopted; documented, never written), not drift
  apply   → SKIPPED, and naming it in --only does NOT override that

Destroy was never a risk for this particular member — `converge --destroy` is
CT-scoped and doesn't touch VM members at all — so the comment says so rather
than implying a protection that wasn't in play. The marker does make destroy
refuse a describe-only LXC.

Verified live: `converge stacks/SmartHome` now reports VM 2000 as DESCRIBE-ONLY
where it previously said SetConfig, and `--only homeassistant --apply` reports
1 skipped / 0 applied.

Deliberately NOT applied to CT 4100. It looks like the other adopted member, but
it is stopped and tagged `retired` — Mate runs on the podman host now
(podman-host/quadlets/leapmotor-mate.container). Its shape is dead weight pending
the CT's deletion, not an adopted member to protect, and marking it describe-only
would assert something false. Noted in CLAUDE.md instead.

Requires the engine support in Chrison-Homelab/Homelab#325.
@ChrisonSimtian
ChrisonSimtian merged commit 769c65c into main Jul 28, 2026
1 of 2 checks passed
@ChrisonSimtian
ChrisonSimtian deleted the feat/describe-only-marker branch July 28, 2026 11:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant