Files
pxe-server/webapp/static/qr-render.js
cproudlock ce604adcda Renumber PXE LAN from 10.9.100.0/24 to 172.16.9.0/24
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>
2026-05-14 16:30:32 -04:00

43 lines
1.5 KiB
JavaScript

// QR render helper. Scans for any element with data-qr="<text>" and renders
// a Kazuhiko Arase qrcode-generator QR into it as inline <img>. Size is
// controlled via data-qr-size="N" (px square, default 96). Error-correction
// level via data-qr-ec="L|M|Q|H" (default M).
//
// The qrcode-generator lib (loaded before this script) exposes a global
// `qrcode()` factory: typeNumber 0 = auto, ec = 'L'|'M'|'Q'|'H'.
(function () {
function render(el) {
var text = el.getAttribute('data-qr') || '';
if (!text) return;
if (el.dataset.qrRendered === '1') return;
var size = parseInt(el.getAttribute('data-qr-size') || '96', 10);
var ec = el.getAttribute('data-qr-ec') || 'M';
try {
var qr = qrcode(0, ec);
qr.addData(text);
qr.make();
// createImgTag(cellSize, margin)
// 4-cell margin keeps the QR scannable per spec; cell size derived from
// requested pixel size and module count.
var modules = qr.getModuleCount();
var cellSize = Math.max(1, Math.floor(size / (modules + 8)));
el.innerHTML = qr.createImgTag(cellSize, 4);
el.dataset.qrRendered = '1';
el.title = 'Scan: ' + text;
} catch (e) {
el.textContent = '[QR error]';
}
}
function scan() {
var nodes = document.querySelectorAll('[data-qr]');
for (var i = 0; i < nodes.length; i++) render(nodes[i]);
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', scan);
} else {
scan();
}
})();