Single-site bay-stuck issue at WJ: GE Intune Report IP script filters
Get-NetIPAddress on StartsWith("10.") and posts everything matching
to the GE Tines webhook. Bays at WJ get the PXE LAN 10.9.100.x IP
captured and reported -> GE backend tags bays as on a non-corp 10.x
subnet -> dynamic group eligibility for SFLD policy never matches.
Other GE sites work because their PXE LANs aren't on 10.x at all.
Renumber PXE LAN to RFC1918 172.16.9.0/24 so the GE filter naturally
skips wired PXE addresses without any disable-NIC dance.
Server-side already in flight (netplan dual-bound, dnsmasq scope +
boot URL repointed, blancco preferences + grub.cfg + iPXE GetPxeScript
all sed'd to 172.16.9.1). This commit is the playbook / scripts /
docs side: 109 hits across 35 files sed'd in one shot.
After this lands + boot.wim is rebuilt + bays renumber off DHCP,
the 10.9.100.1 binding will be dropped from netplan as the final
cleanup step.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
112 lines
3.5 KiB
Markdown
112 lines
3.5 KiB
Markdown
# geastandardpbr/ overrides
|
|
|
|
`geastandardpbr/` is gitignored (USB-imported GE deployment package). Edits made
|
|
locally to support new hardware models do not survive a fresh import.
|
|
|
|
This file tracks the local edits so they can be re-applied after a re-import.
|
|
Apply by hand or via the snippet at the bottom.
|
|
|
|
## OptiPlex 7080 (added 2026-05-08)
|
|
|
|
Reason: a 7080 arrived on the floor; check-bios.cmd was returning
|
|
"no update in catalog" because no 7080 entry existed in the catalog files.
|
|
|
|
### `geastandardpbr/Tools/user_selections.json`
|
|
|
|
Add to `HardwareModelSelection` (insert before the existing `7090 / D12 OptiPlex Family` entry):
|
|
|
|
```json
|
|
{
|
|
"Model": "7080",
|
|
"Id": "D11 OptiPlex Family"
|
|
}
|
|
```
|
|
|
|
### `geastandardpbr/Deploy/Control/HardwareDriver.json`
|
|
|
|
Add a new entry (insert before the existing `D12 OptiPlex Family / 7090` entry):
|
|
|
|
```json
|
|
{
|
|
"manufacturer": "Dell",
|
|
"manufacturerfriendlyname": "Dell",
|
|
"family": "D11 OptiPlex Family",
|
|
"models": "OptiPlex 7080",
|
|
"modelsfriendlyname": "7080",
|
|
"FileName": "",
|
|
"DestinationDir": "*destinationdir*\\Deploy\\Out-of-box Drivers\\Dell_11\\OptiPlex\\D11 OptiPlex Family",
|
|
"url": "",
|
|
"hash": "",
|
|
"size": 0,
|
|
"modifiedDate": "0001-01-01T00:00:00",
|
|
"osId": "20,21",
|
|
"aOsIds": [
|
|
"20",
|
|
"21"
|
|
],
|
|
"imagedisk": 0
|
|
}
|
|
```
|
|
|
|
`FileName`, `url`, `hash`, `size` left empty. `scripts/download-drivers.py` resolves
|
|
the actual driver pack from Dell's catalog by model name (`extract_model_ids`
|
|
matches "7080") and downloads the latest pack at run time.
|
|
|
|
### Side artifacts already on the live PXE server (172.16.9.1)
|
|
|
|
- `\\172.16.9.1\winpeapps\_shared\BIOS\OptiPlex_7080_1.37.0.exe` (39.8 MB, BIOS update)
|
|
- `\\172.16.9.1\image-upload\Deploy\Out-of-box Drivers\Dell_11\OptiPlex\D11 OptiPlex Family\win11_70809ntr8_a09.zip` (Win11 driver pack, 2.6 GB)
|
|
- `\\172.16.9.1\winpeapps\_shared\BIOS\models.txt` includes the 7080 line.
|
|
|
|
These persist regardless of `geastandardpbr/` rebuilds. Only the model-registry
|
|
edits need to be re-applied after a USB re-import.
|
|
|
|
## Re-applying after a fresh `geastandardpbr/` import
|
|
|
|
Either edit the two JSON files by hand following the snippets above, or run:
|
|
|
|
```bash
|
|
cd /home/camp/projects/pxe
|
|
python3 - <<'PY'
|
|
import json, sys
|
|
us = 'geastandardpbr/Tools/user_selections.json'
|
|
hd = 'geastandardpbr/Deploy/Control/HardwareDriver.json'
|
|
|
|
data = json.load(open(us))
|
|
add = {"Model": "7080", "Id": "D11 OptiPlex Family"}
|
|
for d in data:
|
|
if "HardwareModelSelection" in d:
|
|
if not any(m.get("Model") == "7080" for m in d["HardwareModelSelection"]):
|
|
for i, m in enumerate(d["HardwareModelSelection"]):
|
|
if m.get("Id") == "D12 OptiPlex Family":
|
|
d["HardwareModelSelection"].insert(i, add)
|
|
break
|
|
json.dump(data, open(us, 'w'), indent=2)
|
|
|
|
data = json.load(open(hd))
|
|
add = {
|
|
"manufacturer": "Dell",
|
|
"manufacturerfriendlyname": "Dell",
|
|
"family": "D11 OptiPlex Family",
|
|
"models": "OptiPlex 7080",
|
|
"modelsfriendlyname": "7080",
|
|
"FileName": "",
|
|
"DestinationDir": "*destinationdir*\\Deploy\\Out-of-box Drivers\\Dell_11\\OptiPlex\\D11 OptiPlex Family",
|
|
"url": "",
|
|
"hash": "",
|
|
"size": 0,
|
|
"modifiedDate": "0001-01-01T00:00:00",
|
|
"osId": "20,21",
|
|
"aOsIds": ["20", "21"],
|
|
"imagedisk": 0
|
|
}
|
|
if not any(e.get("models") == "OptiPlex 7080" for e in data):
|
|
for i, e in enumerate(data):
|
|
if e.get("family") == "D12 OptiPlex Family" and e.get("models") == "7090":
|
|
data.insert(i, add)
|
|
break
|
|
json.dump(data, open(hd, 'w'), indent=2)
|
|
print("done")
|
|
PY
|
|
```
|