fix(deploy): track installed device manager release generation

This commit is contained in:
Codex
2026-08-11 21:01:37 +03:00
parent 0f44cca27d
commit 35c37de586
3 changed files with 121 additions and 2 deletions
+44 -1
View File
@@ -9455,6 +9455,46 @@ def validate_device_plane_manager_release_payload(
)
def installed_device_plane_manager_compose_sha256():
root = DEVICE_PLANE_ROOT
v1 = root / DEVICE_PLANE_MANAGER_CONTROL_PLANE_REL
v2 = root / DEVICE_PLANE_MANAGER_RELEASE_V2_REL
# A successful v2 overlay intentionally leaves the immutable v1 release
# descriptor as predecessor evidence. Prefer the highest installed
# generation, but validate its exact schema/security boundary before using
# the generation-specific Compose digest. During a failed v2 apply,
# rollback removes the candidate-only v2 descriptor before rebuilding the
# restored v1 runtime, so the same lookup follows the restored source.
if v2.exists() or v2.is_symlink():
descriptor = read_strict_json(
v2,
"installed Device Manager release v2 descriptor",
max_bytes=16 * 1024,
)
validate_device_plane_manager_release_descriptor(
descriptor,
schema_version="nodedc.device-plane.device-manager-release.v2",
boundaries=expected_device_plane_manager_release_v2_boundaries(),
)
return DEVICE_PLANE_MANAGER_RELEASE_V2_COMPOSE_SHA256
if v1.exists() or v1.is_symlink():
descriptor = read_strict_json(
v1,
"installed Device Manager release v1 descriptor",
max_bytes=16 * 1024,
)
validate_device_plane_manager_release_descriptor(
descriptor,
schema_version="nodedc.device-plane.device-manager-release.v1",
boundaries=expected_device_plane_manager_release_v1_boundaries(),
)
return DEVICE_PLANE_MANAGER_RELEASE_V1_COMPOSE_SHA256
die("installed Device Manager release descriptor is missing")
def validate_device_plane_manager_failed_control_plane_payload(payload_dir):
descriptor = read_strict_json(
payload_dir / DEVICE_PLANE_MANAGER_FAILED_CONTROL_PLANE_REL,
@@ -14829,11 +14869,14 @@ def component_compose_files(
if component == "device-plane":
manager_overlay = DEVICE_PLANE_ROOT / DEVICE_PLANE_MANAGER_COMPOSE_REL
if manager_overlay.exists() or manager_overlay.is_symlink():
expected_manager_compose_sha256 = (
installed_device_plane_manager_compose_sha256()
)
if (
manager_overlay.is_symlink()
or not manager_overlay.is_file()
or sha256_file(manager_overlay)
!= DEVICE_PLANE_MANAGER_COMPOSE_SHA256
!= expected_manager_compose_sha256
):
die("installed Device Manager Compose drift detected")
files = (*files, manager_overlay)