|
|
|
@@ -266,6 +266,9 @@ DEVICE_PLANE_MANAGER_RELEASE_V5_REL = (
|
|
|
|
|
DEVICE_PLANE_MANAGER_RELEASE_V6_REL = (
|
|
|
|
|
"deployment/device-manager-release-v6.json"
|
|
|
|
|
)
|
|
|
|
|
DEVICE_PLANE_MANAGER_RELEASE_V7_REL = (
|
|
|
|
|
"deployment/device-manager-release-v7.json"
|
|
|
|
|
)
|
|
|
|
|
DEVICE_PLANE_MANAGER_COMPOSE_REL = "docker-compose.device-manager.yml"
|
|
|
|
|
DEVICE_PLANE_EDGE_CORE_CHANNEL_BOOTSTRAP_REL = (
|
|
|
|
|
"deployment/device-edge-core-channel-bootstrap-v1.json"
|
|
|
|
@@ -391,6 +394,18 @@ DEVICE_PLANE_MANAGER_RELEASE_V6_PREDECESSOR_PATCH_ID = (
|
|
|
|
|
DEVICE_PLANE_MANAGER_RELEASE_V6_PREDECESSOR_ARTIFACT_SHA256 = (
|
|
|
|
|
"acc1d2ae2cda66861054826928c25d01a2428e688cc8132a9c381831bf29ab5a"
|
|
|
|
|
)
|
|
|
|
|
DEVICE_PLANE_MANAGER_RELEASE_V7_PREDECESSOR_PATCH_ID = (
|
|
|
|
|
"device-manager-release-v6-20260822-035"
|
|
|
|
|
)
|
|
|
|
|
DEVICE_PLANE_MANAGER_RELEASE_V7_PREDECESSOR_ARTIFACT_SHA256 = (
|
|
|
|
|
"193faabe930e2b3f212f8eb45288e39f850ec714528b28881095be654baf9a80"
|
|
|
|
|
)
|
|
|
|
|
DEVICE_PLANE_MANAGER_RELEASE_V7_CONTROL_CORE_PREDECESSOR_PATCH_ID = (
|
|
|
|
|
"device-control-core-release-v2-20260822-036"
|
|
|
|
|
)
|
|
|
|
|
DEVICE_PLANE_MANAGER_RELEASE_V7_CONTROL_CORE_PREDECESSOR_ARTIFACT_SHA256 = (
|
|
|
|
|
"8708cc4b59fa0cd5e9c6e6a7b2654ba01ea60271549167aca2631f94000d3da3"
|
|
|
|
|
)
|
|
|
|
|
DEVICE_PLANE_EDGE_CORE_CHANNEL_BOOTSTRAP_PREDECESSOR_PATCH_ID = (
|
|
|
|
|
"device-edge-core-channel-bootstrap-20260812-018"
|
|
|
|
|
)
|
|
|
|
@@ -458,6 +473,9 @@ DEVICE_PLANE_MANAGER_RELEASE_V5_COMPOSE_SHA256 = (
|
|
|
|
|
DEVICE_PLANE_MANAGER_RELEASE_V6_COMPOSE_SHA256 = (
|
|
|
|
|
DEVICE_PLANE_MANAGER_RELEASE_V5_COMPOSE_SHA256
|
|
|
|
|
)
|
|
|
|
|
DEVICE_PLANE_MANAGER_RELEASE_V7_COMPOSE_SHA256 = (
|
|
|
|
|
DEVICE_PLANE_MANAGER_RELEASE_V6_COMPOSE_SHA256
|
|
|
|
|
)
|
|
|
|
|
DEVICE_PLANE_MANAGER_FAVICON_SHA256 = {
|
|
|
|
|
"favicon.ico": (
|
|
|
|
|
"f8933114a85646335ea5c94944f56d3cd8c48a6032016719f7905ff244ec0aa2"
|
|
|
|
@@ -574,6 +592,11 @@ DEVICE_PLANE_MANAGER_RELEASE_V6_ENTRIES = (
|
|
|
|
|
"services/device-manager",
|
|
|
|
|
DEVICE_PLANE_MANAGER_RELEASE_V6_REL,
|
|
|
|
|
)
|
|
|
|
|
DEVICE_PLANE_MANAGER_RELEASE_V7_ENTRIES = (
|
|
|
|
|
DEVICE_PLANE_MANAGER_COMPOSE_REL,
|
|
|
|
|
"services/device-manager",
|
|
|
|
|
DEVICE_PLANE_MANAGER_RELEASE_V7_REL,
|
|
|
|
|
)
|
|
|
|
|
DEVICE_PLANE_MANAGER_RECONCILIATION_REL = (
|
|
|
|
|
"deployment/device-manager-control-plane-reconciliation-v1.json"
|
|
|
|
|
)
|
|
|
|
@@ -4007,6 +4030,7 @@ def allowed_payload_path(component, rel):
|
|
|
|
|
DEVICE_PLANE_MANAGER_RELEASE_V4_REL,
|
|
|
|
|
DEVICE_PLANE_MANAGER_RELEASE_V5_REL,
|
|
|
|
|
DEVICE_PLANE_MANAGER_RELEASE_V6_REL,
|
|
|
|
|
DEVICE_PLANE_MANAGER_RELEASE_V7_REL,
|
|
|
|
|
DEVICE_PLANE_EDGE_CORE_CHANNEL_BOOTSTRAP_REL,
|
|
|
|
|
DEVICE_PLANE_EDGE_CORE_CHANNEL_UPGRADE_REL,
|
|
|
|
|
DEVICE_PLANE_EDGE_CORE_CHANNEL_UPGRADE_V2_REL,
|
|
|
|
@@ -9582,6 +9606,7 @@ def is_device_plane_manager_control_plane_slice(component, entries):
|
|
|
|
|
DEVICE_PLANE_MANAGER_RELEASE_V4_ENTRIES,
|
|
|
|
|
DEVICE_PLANE_MANAGER_RELEASE_V5_ENTRIES,
|
|
|
|
|
DEVICE_PLANE_MANAGER_RELEASE_V6_ENTRIES,
|
|
|
|
|
DEVICE_PLANE_MANAGER_RELEASE_V7_ENTRIES,
|
|
|
|
|
)
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
@@ -9626,11 +9651,20 @@ def is_device_plane_manager_release_v6_slice(component, entries):
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def is_device_plane_manager_release_v7_slice(component, entries):
|
|
|
|
|
return (
|
|
|
|
|
component == "device-plane"
|
|
|
|
|
and entries is not None
|
|
|
|
|
and tuple(entries) == DEVICE_PLANE_MANAGER_RELEASE_V7_ENTRIES
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def is_device_plane_manager_persistent_release_slice(component, entries):
|
|
|
|
|
return (
|
|
|
|
|
is_device_plane_manager_release_v4_slice(component, entries)
|
|
|
|
|
or is_device_plane_manager_release_v5_slice(component, entries)
|
|
|
|
|
or is_device_plane_manager_release_v6_slice(component, entries)
|
|
|
|
|
or is_device_plane_manager_release_v7_slice(component, entries)
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -9882,6 +9916,33 @@ def expected_device_plane_manager_release_v6_boundaries():
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def expected_device_plane_manager_release_v7_boundaries():
|
|
|
|
|
return {
|
|
|
|
|
**expected_device_plane_manager_release_v6_boundaries(),
|
|
|
|
|
"predecessor": {
|
|
|
|
|
"kind": "release",
|
|
|
|
|
"patchId": DEVICE_PLANE_MANAGER_RELEASE_V7_PREDECESSOR_PATCH_ID,
|
|
|
|
|
"artifactSha256": (
|
|
|
|
|
DEVICE_PLANE_MANAGER_RELEASE_V7_PREDECESSOR_ARTIFACT_SHA256
|
|
|
|
|
),
|
|
|
|
|
},
|
|
|
|
|
"controlCorePredecessor": {
|
|
|
|
|
"patchId": (
|
|
|
|
|
DEVICE_PLANE_MANAGER_RELEASE_V7_CONTROL_CORE_PREDECESSOR_PATCH_ID
|
|
|
|
|
),
|
|
|
|
|
"artifactSha256": (
|
|
|
|
|
DEVICE_PLANE_MANAGER_RELEASE_V7_CONTROL_CORE_PREDECESSOR_ARTIFACT_SHA256
|
|
|
|
|
),
|
|
|
|
|
},
|
|
|
|
|
"commandFormLayout": "aligned-control-row-v1",
|
|
|
|
|
"secondaryEmptyTypography": "help-text-sm-v1",
|
|
|
|
|
"infrastructureHostProjection": (
|
|
|
|
|
"edge-registration-live-channel-v1"
|
|
|
|
|
),
|
|
|
|
|
"ontologyStatus": "generic-host-domain-candidate-not-canonical",
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def expected_device_plane_manager_release_boundaries():
|
|
|
|
|
# Compatibility name for the current release builder/tests. Immutable v1
|
|
|
|
|
# predecessors always use expected_device_plane_manager_release_v1_boundaries.
|
|
|
|
@@ -10400,6 +10461,7 @@ def validate_device_plane_manager_release_payload_contract(
|
|
|
|
|
"nodedc.device-plane.device-manager-release.v4",
|
|
|
|
|
"nodedc.device-plane.device-manager-release.v5",
|
|
|
|
|
"nodedc.device-plane.device-manager-release.v6",
|
|
|
|
|
"nodedc.device-plane.device-manager-release.v7",
|
|
|
|
|
):
|
|
|
|
|
required_compose.extend((
|
|
|
|
|
"NODEDC_DEVICE_MANAGER_PRESENTATION_PATH: "
|
|
|
|
@@ -10554,6 +10616,24 @@ def validate_device_plane_manager_release_v6_payload(
|
|
|
|
|
return descriptor
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def validate_device_plane_manager_release_v7_payload(
|
|
|
|
|
payload_dir,
|
|
|
|
|
*,
|
|
|
|
|
expected_release_id=None,
|
|
|
|
|
):
|
|
|
|
|
descriptor = validate_device_plane_manager_release_payload_contract(
|
|
|
|
|
payload_dir,
|
|
|
|
|
descriptor_rel=DEVICE_PLANE_MANAGER_RELEASE_V7_REL,
|
|
|
|
|
schema_version="nodedc.device-plane.device-manager-release.v7",
|
|
|
|
|
boundaries=expected_device_plane_manager_release_v7_boundaries(),
|
|
|
|
|
compose_sha256=DEVICE_PLANE_MANAGER_RELEASE_V7_COMPOSE_SHA256,
|
|
|
|
|
edge_channel=False,
|
|
|
|
|
expected_release_id=expected_release_id,
|
|
|
|
|
)
|
|
|
|
|
validate_device_plane_manager_v6_favicon_bundle(payload_dir)
|
|
|
|
|
return descriptor
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def validate_device_plane_manager_release_payload(
|
|
|
|
|
payload_dir,
|
|
|
|
|
*,
|
|
|
|
@@ -10565,12 +10645,18 @@ def validate_device_plane_manager_release_payload(
|
|
|
|
|
v4 = payload_dir / DEVICE_PLANE_MANAGER_RELEASE_V4_REL
|
|
|
|
|
v5 = payload_dir / DEVICE_PLANE_MANAGER_RELEASE_V5_REL
|
|
|
|
|
v6 = payload_dir / DEVICE_PLANE_MANAGER_RELEASE_V6_REL
|
|
|
|
|
v7 = payload_dir / DEVICE_PLANE_MANAGER_RELEASE_V7_REL
|
|
|
|
|
present = [
|
|
|
|
|
path for path in (v1, v2, v3, v4, v5, v6)
|
|
|
|
|
path for path in (v1, v2, v3, v4, v5, v6, v7)
|
|
|
|
|
if path.exists() or path.is_symlink()
|
|
|
|
|
]
|
|
|
|
|
if len(present) != 1:
|
|
|
|
|
die("Device Manager release descriptor cardinality mismatch")
|
|
|
|
|
if present[0] == v7:
|
|
|
|
|
return validate_device_plane_manager_release_v7_payload(
|
|
|
|
|
payload_dir,
|
|
|
|
|
expected_release_id=expected_release_id,
|
|
|
|
|
)
|
|
|
|
|
if present[0] == v6:
|
|
|
|
|
return validate_device_plane_manager_release_v6_payload(
|
|
|
|
|
payload_dir,
|
|
|
|
@@ -10866,6 +10952,7 @@ def installed_device_plane_manager_compose_sha256():
|
|
|
|
|
v4 = root / DEVICE_PLANE_MANAGER_RELEASE_V4_REL
|
|
|
|
|
v5 = root / DEVICE_PLANE_MANAGER_RELEASE_V5_REL
|
|
|
|
|
v6 = root / DEVICE_PLANE_MANAGER_RELEASE_V6_REL
|
|
|
|
|
v7 = root / DEVICE_PLANE_MANAGER_RELEASE_V7_REL
|
|
|
|
|
|
|
|
|
|
# A successful v2 overlay intentionally leaves the immutable v1 release
|
|
|
|
|
# descriptor as predecessor evidence. Prefer the highest installed
|
|
|
|
@@ -10873,6 +10960,19 @@ def installed_device_plane_manager_compose_sha256():
|
|
|
|
|
# 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 v7.exists() or v7.is_symlink():
|
|
|
|
|
descriptor = read_strict_json(
|
|
|
|
|
v7,
|
|
|
|
|
"installed Device Manager release v7 descriptor",
|
|
|
|
|
max_bytes=16 * 1024,
|
|
|
|
|
)
|
|
|
|
|
validate_device_plane_manager_release_descriptor(
|
|
|
|
|
descriptor,
|
|
|
|
|
schema_version="nodedc.device-plane.device-manager-release.v7",
|
|
|
|
|
boundaries=expected_device_plane_manager_release_v7_boundaries(),
|
|
|
|
|
)
|
|
|
|
|
return DEVICE_PLANE_MANAGER_RELEASE_V7_COMPOSE_SHA256
|
|
|
|
|
|
|
|
|
|
if v6.exists() or v6.is_symlink():
|
|
|
|
|
descriptor = read_strict_json(
|
|
|
|
|
v6,
|
|
|
|
@@ -12431,6 +12531,7 @@ def validate_device_plane_manager_v3_active_baseline(descriptor):
|
|
|
|
|
"nodedc.device-plane.device-manager-release.v4",
|
|
|
|
|
"nodedc.device-plane.device-manager-release.v5",
|
|
|
|
|
"nodedc.device-plane.device-manager-release.v6",
|
|
|
|
|
"nodedc.device-plane.device-manager-release.v7",
|
|
|
|
|
):
|
|
|
|
|
return None
|
|
|
|
|
|
|
|
|
@@ -12580,6 +12681,7 @@ def device_plane_manager_preserved_runtime_health_services(descriptor):
|
|
|
|
|
"nodedc.device-plane.device-manager-release.v4",
|
|
|
|
|
"nodedc.device-plane.device-manager-release.v5",
|
|
|
|
|
"nodedc.device-plane.device-manager-release.v6",
|
|
|
|
|
"nodedc.device-plane.device-manager-release.v7",
|
|
|
|
|
):
|
|
|
|
|
return (
|
|
|
|
|
"device-control-core",
|
|
|
|
@@ -12714,6 +12816,7 @@ def validate_device_plane_manager_activation_predecessor(
|
|
|
|
|
DEVICE_PLANE_MANAGER_RELEASE_V4_ENTRIES,
|
|
|
|
|
DEVICE_PLANE_MANAGER_RELEASE_V5_ENTRIES,
|
|
|
|
|
DEVICE_PLANE_MANAGER_RELEASE_V6_ENTRIES,
|
|
|
|
|
DEVICE_PLANE_MANAGER_RELEASE_V7_ENTRIES,
|
|
|
|
|
)
|
|
|
|
|
):
|
|
|
|
|
die("Device Manager release predecessor type mismatch")
|
|
|
|
@@ -12734,6 +12837,8 @@ def validate_device_plane_manager_activation_predecessor(
|
|
|
|
|
DEVICE_PLANE_MANAGER_RELEASE_V5_REL,
|
|
|
|
|
DEVICE_PLANE_MANAGER_RELEASE_V6_ENTRIES:
|
|
|
|
|
DEVICE_PLANE_MANAGER_RELEASE_V6_REL,
|
|
|
|
|
DEVICE_PLANE_MANAGER_RELEASE_V7_ENTRIES:
|
|
|
|
|
DEVICE_PLANE_MANAGER_RELEASE_V7_REL,
|
|
|
|
|
}.get(
|
|
|
|
|
tuple(predecessor_entries),
|
|
|
|
|
DEVICE_PLANE_MANAGER_CONTROL_PLANE_REL,
|
|
|
|
@@ -15113,6 +15218,7 @@ def validate_device_manager_control_plane_runtime(
|
|
|
|
|
require_edge_channel = edge_descriptor.is_file() and not edge_descriptor.is_symlink()
|
|
|
|
|
if require_persistent_data is None:
|
|
|
|
|
data_descriptors = (
|
|
|
|
|
DEVICE_PLANE_ROOT / DEVICE_PLANE_MANAGER_RELEASE_V7_REL,
|
|
|
|
|
DEVICE_PLANE_ROOT / DEVICE_PLANE_MANAGER_RELEASE_V6_REL,
|
|
|
|
|
DEVICE_PLANE_ROOT / DEVICE_PLANE_MANAGER_RELEASE_V5_REL,
|
|
|
|
|
DEVICE_PLANE_ROOT / DEVICE_PLANE_MANAGER_RELEASE_V4_REL,
|
|
|
|
@@ -21488,6 +21594,7 @@ def plan_artifact(artifact):
|
|
|
|
|
"nodedc.device-plane.device-manager-release.v4",
|
|
|
|
|
"nodedc.device-plane.device-manager-release.v5",
|
|
|
|
|
"nodedc.device-plane.device-manager-release.v6",
|
|
|
|
|
"nodedc.device-plane.device-manager-release.v7",
|
|
|
|
|
)
|
|
|
|
|
else "build+recreate:device-control-core,device-manager"
|
|
|
|
|
)
|
|
|
|
@@ -21504,6 +21611,7 @@ def plan_artifact(artifact):
|
|
|
|
|
"nodedc.device-plane.device-manager-release.v4",
|
|
|
|
|
"nodedc.device-plane.device-manager-release.v5",
|
|
|
|
|
"nodedc.device-plane.device-manager-release.v6",
|
|
|
|
|
"nodedc.device-plane.device-manager-release.v7",
|
|
|
|
|
)
|
|
|
|
|
else "preserved:device-gateway,device-postgres,"
|
|
|
|
|
"device-backhaul-target"
|
|
|
|
@@ -21516,6 +21624,7 @@ def plan_artifact(artifact):
|
|
|
|
|
"nodedc.device-plane.device-manager-release.v4",
|
|
|
|
|
"nodedc.device-plane.device-manager-release.v5",
|
|
|
|
|
"nodedc.device-plane.device-manager-release.v6",
|
|
|
|
|
"nodedc.device-plane.device-manager-release.v7",
|
|
|
|
|
)
|
|
|
|
|
print(
|
|
|
|
|
"device_manager_health_gate="
|
|
|
|
@@ -21538,15 +21647,30 @@ def plan_artifact(artifact):
|
|
|
|
|
if manager_schema in (
|
|
|
|
|
"nodedc.device-plane.device-manager-release.v5",
|
|
|
|
|
"nodedc.device-plane.device-manager-release.v6",
|
|
|
|
|
"nodedc.device-plane.device-manager-release.v7",
|
|
|
|
|
):
|
|
|
|
|
print(
|
|
|
|
|
"device_manager_overview_layout="
|
|
|
|
|
"mission-core-landing-stage-v1"
|
|
|
|
|
)
|
|
|
|
|
if manager_schema == (
|
|
|
|
|
"nodedc.device-plane.device-manager-release.v6"
|
|
|
|
|
if manager_schema in (
|
|
|
|
|
"nodedc.device-plane.device-manager-release.v6",
|
|
|
|
|
"nodedc.device-plane.device-manager-release.v7",
|
|
|
|
|
):
|
|
|
|
|
print("device_manager_favicon_set=nodedc-adaptive-v1")
|
|
|
|
|
if manager_schema == (
|
|
|
|
|
"nodedc.device-plane.device-manager-release.v7"
|
|
|
|
|
):
|
|
|
|
|
print("device_manager_command_form=aligned-control-row-v1")
|
|
|
|
|
print("device_manager_secondary_empty_text=help-text-sm-v1")
|
|
|
|
|
print(
|
|
|
|
|
"device_manager_infrastructure_hosts="
|
|
|
|
|
"edge-registration-live-channel-v1"
|
|
|
|
|
)
|
|
|
|
|
print(
|
|
|
|
|
"device_manager_host_ontology="
|
|
|
|
|
"candidate-not-canonical"
|
|
|
|
|
)
|
|
|
|
|
if device_plane_manager_activation_preflight["descriptor"].get(
|
|
|
|
|
"commandTransport"
|
|
|
|
|
) == "typed-service-ping-v1":
|
|
|
|
|