From 049dd7bde672ceea35435da2d79339bb92fdbd78 Mon Sep 17 00:00:00 2001 From: cproudlock Date: Thu, 6 Aug 2026 11:03:12 -0400 Subject: [PATCH] startnet: map the per-PCTYPE media view for shopfloor builds Maps Z: to _media\ instead of the shared gea-shopfloor media, so PESetup's unfiltered CopyPackages stages only this type's payload rather than every shopfloor payload on every bay. The mapping is validated rather than assumed: it probes Z:\Deploy\Control\HardwareDriver.json, which resolves only when the view exists AND its symlinks are intact, so a dangling view cannot image silently off a half-mapped drive. On any failure it falls back to the shared media with a console warning - the bay still images, it just stages the union, which is exactly today's behaviour. That fallback also covers the second WJ PXE box, which has no _media views yet. Z: is freed before the mapping. A leftover mapping makes net use fail with "device already in use", and the probe would then pass against the OLD media - a silent wrong-payload build, which is the failure this change exists to prevent. Views are built by scripts/build-pctype-media.py. --- playbook/startnet.cmd | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/playbook/startnet.cmd b/playbook/startnet.cmd index 5298a7c..b134482 100644 --- a/playbook/startnet.cmd +++ b/playbook/startnet.cmd @@ -318,6 +318,33 @@ echo. echo Starting GEA Shopfloor setup... start "FlatApp" %SYSTEMDRIVE%\GESetup\FlatSetupLoader.exe for /l %%i in (1,1,2000000) do rem +REM --- Per-PCTYPE media view ----------------------------------------------- +REM PESetup's CopyPackages copies the WHOLE of \Deploy\Applications to +REM the target, recursively, with no filtering and no manifest (see +REM docs/PESETUP-INTERNALS.md). One shared shopfloor media therefore hands +REM every shopfloor payload to every bay whatever its type. +REM _media\ is that same media rebuilt out of symlinks by +REM scripts/build-pctype-media.py, carrying only this type's payload. It is +REM built once, server-side, and never mutated per session: bays image +REM concurrently and CopyPackages is fail-fast, so changing a path mid-copy +REM would fail some OTHER bay's imaging. +if "%PCTYPE%"=="" goto gea_shopfloor_media_shared +REM Free Z: first. A leftover mapping makes net use fail with "device already +REM in use" and the probe below would then pass against the OLD media. +net use Z: /delete /y >NUL 2>&1 +net use Z: \\172.16.9.1\winpeapps\_media\%PCTYPE% /user:pxe-upload pxe /persistent:no >NUL 2>&1 +REM Probe a file that only resolves when the view exists AND its symlinks are +REM intact. A dangling view must not image silently off a half-mapped drive. +if exist "Z:\Deploy\Control\HardwareDriver.json" goto end +echo. +echo WARNING: no usable per-type media at _media\%PCTYPE%. +echo Falling back to the shared shopfloor media, so EVERY shopfloor +echo payload will be staged on this bay, not just this type's. +echo Imaging is otherwise unaffected. Tell the PXE admin. +echo. +net use Z: /delete /y >NUL 2>&1 + +:gea_shopfloor_media_shared net use Z: \\172.16.9.1\winpeapps\gea-shopfloor /user:pxe-upload pxe /persistent:no goto end