Skip to content

Commit f40fbc0

Browse files
fix(docs+menu): purge all invented category references; wire 7-category dispatch
- README.md, docs/validation/*, docs/reference/environment-checker.md: remove all references to cut categories (10=SSL, 11=squatter, 12=hardware, 6=infra-device, 7=Service Bus, 8=NTP-UDP); replace with grounded 7-category set - mkdocs.yml: fix site_description (remove "hardware") + fix site_url to azurelocal.cloud - Start-AzlBeacon.ps1: update all Invoke-ValidationEngine category arrays to 7- category numbering; remove ipPool prompts + squatter references from Local Identity and Network/Firewall menu paths Zero invented-test references remain in src/ or docs/. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013AZySkzowyq4Ne2hrSRRAL
1 parent 0a28203 commit f40fbc0

8 files changed

Lines changed: 57 additions & 86 deletions

File tree

README.md

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# AzL Beacon
22

3-
**Pre-deployment endpoint, network, and hardware readiness validation for Azure Local.**
3+
**Pre-deployment endpoint and network readiness validation for Azure Local.**
44

55
Boots from iDRAC Virtual Media or USB — no installed OS, no domain join, no licensing required.
66
Boot it on bare metal before you touch the deployment wizard. Know your environment is ready.
@@ -9,22 +9,17 @@ Boot it on bare metal before you touch the deployment wizard. Know your environm
99

1010
## What it does
1111

12-
On boot, `Start-AzlValidation.ps1` runs automatically and sweeps 12 validation categories:
12+
On boot, `Start-AzlValidation.ps1` runs 7 validation categories grounded in Microsoft and Dell source documents:
1313

1414
| # | Category | What it checks |
1515
|---|---|---|
1616
| 1 | Basic network | NIC up, IP assigned, gateway reachable |
1717
| 2 | DNS | Forward/reverse lookups, TCP/UDP port 53, AD domain resolution |
1818
| 3 | NTP | w32tm stripchart + clock skew check (5-minute limit) |
19-
| 4 | Active Directory ports | LDAP 389, LDAPS 636, Kerberos 88, RPC 135, DNS 53, SRV records |
20-
| 5 | Azure endpoint sweep | TCP + HTTPS probe for 120+ Arc, AKS, auth, monitoring, CRL endpoints |
21-
| 6 | Infrastructure devices | Firewall, switches, iDRAC, OpenGear reachability |
22-
| 7 | Service Bus WebSocket | TCP 443 to `*.servicebus.windows.net` (Arc resource bridge) |
23-
| 8 | NTP UDP 123 | Raw UDP NTP packet probe |
24-
| 9 | Environment Checker | Microsoft's `Invoke-AzStackHciConnectivityValidation` (official validator) |
25-
| 10 | SSL inspection | Cert chain root authority — detects FortiGate deep inspection (deployment blocker) |
26-
| 11 | Deployment prerequisites | IP pool squatter scan, DNS-not-in-K8s-range sanity check |
27-
| 12 | Hardware self-checks | TPM 2.0, Secure Boot, disk count, storage pools, NIC count, CPU virt, memory |
19+
| 4 | Active Directory ports | LDAP 389, LDAPS 636, Kerberos 88, RPC 135, DNS 53, SRV records (AD path only) |
20+
| 5 | Azure endpoint sweep | TCP + HTTPS probe — Azure Local firewall requirements + EastUS HCI + Dell OEM endpoints |
21+
| 6 | Environment Checker | `Invoke-AzStackHciConnectivityValidation` + `Invoke-AzStackHciNetworkValidation` (Microsoft's official validators) |
22+
| 7 | Arc integration | `Invoke-AzStackHciArcIntegrationValidation` (optional — requires Azure device-code sign-in) |
2823

2924
Results land at `X:\results\` on the WinPE RAM drive in JSON format. Copy off before reboot.
3025

docs/reference/environment-checker.md

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,9 @@ AzL Beacon bundles and calls the Microsoft `AzStackHci.EnvironmentChecker` Power
1212

1313
| Validator | Cmdlet | When called |
1414
|---|---|---|
15-
| Connectivity | `Invoke-AzStackHciConnectivityValidation` | Category 9, all paths |
16-
| Network | `Invoke-AzStackHciNetworkValidation` | Category 9, Local Identity path |
17-
| Hardware | `Invoke-AzStackHciHardwareValidation` | Category 12 (partial — CIM-based) |
18-
| Arc integration | `Invoke-AzStackHciArcIntegrationValidation` | Optional — requires Azure sign-in |
15+
| Connectivity | `Invoke-AzStackHciConnectivityValidation` | Category 6, all paths |
16+
| Network | `Invoke-AzStackHciNetworkValidation` | Category 6, all paths |
17+
| Arc integration | `Invoke-AzStackHciArcIntegrationValidation` | Category 7 — optional, requires Azure sign-in |
1918

2019
## WinPE limitations
2120

@@ -25,9 +24,8 @@ The following validators **cannot run in WinPE** and are deferred to post-OS (St
2524
|---|---|---|
2625
| Active Directory | Requires RSAT AD/GPO modules | Run `Invoke-AzStackHciExternalActiveDirectoryValidation` from a domain-joined staging server |
2726

28-
## SSL inspection behavior
29-
30-
The Environment Checker detects SSL deep-inspection before testing connectivity. If the TLS chain contains a private/unknown root CA, `Invoke-AzStackHciConnectivityValidation` raises an error and aborts. Beacon's Category 10 (SSL inspection detection) runs the same check independently so you know before invoking the module.
27+
!!! warning "SSL inspection — note"
28+
`Invoke-AzStackHciConnectivityValidation` raises an error if it detects SSL deep-inspection (private root CA in the TLS chain). If you see this failure, work with your network team to exempt Azure Local node IPs from SSL inspection before re-running.
3129

3230
## Post-OS environment checker (Stage 2)
3331

docs/validation/active-directory.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,9 @@ Select **option 1** from the Beacon main menu to validate readiness for an AD-jo
2020
| **2 — DNS** | DNS TCP/UDP 53 reachability, forward resolution of Azure endpoints and AD domain FQDN, reverse lookups of DC IPs |
2121
| **3 — NTP** | Clock skew check (must be < 5 minutes) |
2222
| **4 — AD ports** | TCP probe per DC: LDAP 389, Kerberos 88, RPC 135, DNS 53, LDAPS 636; DNS SRV `_ldap._tcp.dc._msdcs.<domain>` |
23-
| **5 — Endpoint sweep** | All 121 Azure Local + Arc + Dell endpoints (TCP + HTTPS for critical) |
24-
| **9 — EnvChecker** | `Invoke-AzStackHciConnectivityValidation` (Microsoft's connectivity validator) |
23+
| **5 — Endpoint sweep** | Azure Local + Arc + Dell endpoints (TCP + HTTPS for critical) |
24+
| **6 — EnvChecker** | `Invoke-AzStackHciConnectivityValidation` + `Invoke-AzStackHciNetworkValidation` |
25+
| **7 — Arc** | Optional: `Invoke-AzStackHciArcIntegrationValidation` (requires Azure device-code sign-in) |
2526

2627
## Active Directory preparation requirements
2728

docs/validation/index.md

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -27,19 +27,20 @@ AzL Beacon presents a **split menu** at boot. Choose the path that matches your
2727
└─────────────────────────────────────────────────────┘
2828
```
2929

30-
## All 12 validation categories
30+
## 7 validation categories
3131

3232
| Category | Name | Paths |
3333
|---|---|---|
3434
| 1 | Basic network connectivity (NIC, IP, gateway) | All |
35-
| 2 | DNS (forward/reverse/UDP) | All |
35+
| 2 | DNS (forward/reverse/TCP/UDP) | All |
3636
| 3 | NTP time-skew | All |
3737
| 4 | Active Directory ports (LDAP/Kerberos/RPC/DNS/LDAPS + SRV) | AD, Full-AD |
38-
| 5 | Azure endpoint sweep (121 endpoints) | All |
39-
| 6 | Infrastructure device reachability | Networking, Full |
40-
| 7 | Service Bus WebSocket probe | Networking, Full |
41-
| 8 | NTP UDP port 123 | Networking, Full |
42-
| 9 | AzStackHci.EnvironmentChecker (connectivity + network validators) | All |
43-
| 10 | SSL deep-inspection detection | All |
44-
| 11 | Deployment prerequisite sanity (IP pool, Kubernetes subnet) | Local Identity, Full |
45-
| 12 | Hardware self-checks (TPM, Secure Boot, NIC, CPU, storage) | Networking, Full |
38+
| 5 | Azure endpoint sweep | All |
39+
| 6 | AzStackHci.EnvironmentChecker (connectivity + network validators) | All |
40+
| 7 | Arc integration (optional — requires Azure device-code login) | Optional on all paths |
41+
42+
All test targets derive from the three Microsoft/Dell source documents:
43+
44+
- [Azure Local firewall requirements](https://github.com/MicrosoftDocs/azure-stack-docs/blob/main/azure-local/concepts/firewall-requirements.md)
45+
- [EastUS HCI endpoints](https://github.com/Azure/AzureStack-Tools/blob/master/HCI/EastUSendpoints/eastus-hci-endpoints.md)
46+
- [Dell OEM endpoints](https://github.com/Azure/AzureStack-Tools/blob/master/HCI/OEMEndpoints/Dell/DellAzureLocalEndpoints.md)

docs/validation/local-identity.md

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,6 @@ Local Identity deployment uses a local administrator account and Azure Key Vault
2626
|---|---|---|
2727
| DNS server IP(s) | `10.10.0.10, 8.8.8.8` | Yes |
2828
| Azure Key Vault FQDN | `kv-iic-beacon.vault.azure.net` | Optional (enables KV endpoint probe) |
29-
| Node IP pool start | `10.10.1.100` | Optional (enables squatter scan) |
30-
| Node IP pool end | `10.10.1.120` | Optional |
3129

3230
## Tests run
3331

@@ -37,10 +35,8 @@ Local Identity deployment uses a local administrator account and Azure Key Vault
3735
| **2 — DNS** | DNS TCP/UDP 53, forward resolution of Azure management endpoints |
3836
| **3 — NTP** | Clock skew |
3937
| **5 — Endpoint sweep** | Azure Local, Arc, and Key Vault service endpoints |
40-
| **9 — EnvChecker** | `Invoke-AzStackHciConnectivityValidation` + `Invoke-AzStackHciNetworkValidation` |
41-
| **10 — SSL inspection** | TLS chain root-CA check (FortiGate detection) |
42-
| **11 — Prereq sanity** | IP pool squatter scan, DNS-not-in-Kubernetes-reserved-range check |
43-
| **Key Vault** | Manual TCP 443 probe to the Key Vault FQDN (if provided) |
38+
| **6 — EnvChecker** | `Invoke-AzStackHciConnectivityValidation` + `Invoke-AzStackHciNetworkValidation` |
39+
| **7 — Arc** | Optional: `Invoke-AzStackHciArcIntegrationValidation` |
4440

4541
!!! note "Category 4 (AD ports) is skipped"
4642
AD port tests are not applicable and not run in the Local Identity path.

docs/validation/network-firewall.md

Lines changed: 15 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,25 @@ This path runs everything except the AD port tests (Category 4). It's ideal for:
88

99
- Verifying firewall policy before any identity configuration
1010
- Checking endpoint reachability from the management VLAN
11-
- Detecting SSL deep-inspection on the outbound path
12-
- Hardware self-checks (TPM, Secure Boot, NICs)
11+
- Confirming DNS and NTP are reachable
1312

1413
## What you are prompted for
1514

1615
| Input | Example | Required |
1716
|---|---|---|
1817
| Management gateway IP | `10.10.0.1` | Optional (uses DHCP-detected if blank) |
1918
| DNS server IP(s) | `10.10.0.10` | Optional |
20-
| IP pool start | `10.10.1.100` | Optional (enables squatter scan) |
21-
| IP pool end | `10.10.1.120` | Optional |
19+
20+
## Tests run
21+
22+
| Category | Tests |
23+
|---|---|
24+
| **1 — Network** | NIC status, IP assigned, gateway ping |
25+
| **2 — DNS** | DNS TCP/UDP 53, forward resolution of key Azure endpoints |
26+
| **3 — NTP** | Clock skew (must be < 5 minutes) |
27+
| **5 — Endpoint sweep** | All Azure Local + Arc + Dell endpoints |
28+
| **6 — EnvChecker** | `Invoke-AzStackHciConnectivityValidation` + `Invoke-AzStackHciNetworkValidation` |
29+
| **7 — Arc** | Optional |
2230

2331
## Firewall requirements — Azure Local
2432

@@ -33,20 +41,7 @@ The endpoint sweep tests all endpoints from these sources:
3341
!!! tip "See the full list"
3442
See [Endpoint List](../reference/endpoints.md) for every endpoint tested.
3543

36-
## SSL deep-inspection detection
37-
38-
Category 10 detects **FortiGate SSL deep inspection** (or any transparent proxy that re-signs TLS). Azure Local **cannot deploy** through an SSL inspection device because the TLS certificate chain will not match Microsoft's expected root CAs.
39-
40-
If Category 10 fails:
41-
42-
1. Work with your network team to create a firewall bypass/exemption for Azure Local node IPs
43-
2. Verify the exemption: Beacon re-runs Category 10 and should show the correct DigiCert/Microsoft root
44-
45-
## Kubernetes reserved subnets
46-
47-
Category 11 checks that your planned IP pool does not overlap with Kubernetes-reserved ranges:
48-
49-
- `10.96.0.0/12` — Kubernetes service CIDR
50-
- `10.244.0.0/16` — Pod network CIDR
44+
## Microsoft documentation
5145

52-
DNS server IPs must also not fall within these ranges.
46+
- [Azure Local firewall requirements](https://learn.microsoft.com/azure/azure-local/concepts/firewall-requirements)
47+
- [Azure Arc network requirements](https://learn.microsoft.com/azure/azure-arc/servers/network-requirements)

mkdocs.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
site_name: AzL Beacon
2-
site_description: Pre-deployment endpoint, network, and hardware readiness validation for Azure Local.
2+
site_description: Pre-deployment endpoint and network readiness validation for Azure Local.
33
site_author: Azure Local Cloud
4-
site_url: https://azurelocal.github.io/azurelocal-beacon/
4+
site_url: https://azurelocal.cloud/azurelocal-beacon/
55
repo_url: https://github.com/AzureLocal/azurelocal-beacon
66
repo_name: AzureLocal/azurelocal-beacon
77

src/Start-AzlBeacon.ps1

Lines changed: 13 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ function Show-Banner {
129129
Write-BeaconLine ' Azure Local Pre-Deployment Validation' -Color White
130130
Write-BeaconLine ' v1.0.0-pre | Dell AX 16G | HCS Platform' -Color DarkGray
131131
Write-BeaconLine ''
132-
Write-BeaconLine ' Pre-deployment endpoint, network, and hardware' -Color DarkGray
132+
Write-BeaconLine ' Pre-deployment endpoint and network' -Color DarkGray
133133
Write-BeaconLine ' readiness validation for Azure Local.' -Color DarkGray
134134
Write-BeaconLine ''
135135
}
@@ -221,8 +221,8 @@ function Invoke-ADMenu {
221221
Write-BeaconLine ' Running Active Directory validation (Categories 1-4 + Connectivity)...' -Color Cyan
222222
Write-BeaconLine ''
223223

224-
# Categories: 1=Network, 2=DNS, 3=NTP, 4=AD ports, 5=Endpoint sweep, 9=EnvChecker(connectivity)
225-
Invoke-ValidationEngine -Categories @('1', '2', '3', '4', '5', '9')
224+
# Categories: 1=Network, 2=DNS, 3=NTP, 4=AD ports, 5=Endpoint sweep, 6=EnvChecker, 7=Arc(optional)
225+
Invoke-ValidationEngine -Categories @('1', '2', '3', '4', '5', '6')
226226

227227
Write-BeaconLine ''
228228
Write-BeaconLine ' AD validation complete. Results in X:\results\' -Color Green
@@ -248,26 +248,18 @@ function Invoke-LocalIdentityMenu {
248248
$kvFqdn = Prompt-Optional 'Azure Key Vault FQDN (e.g. kv-beacon-01.vault.azure.net)' -Default ''
249249
Write-BeaconLine ''
250250

251-
$ipPoolStart = Prompt-Optional 'Planned node IP pool start (for squatter scan, optional)'
252-
$ipPoolEnd = Prompt-Optional 'Planned node IP pool end (for squatter scan, optional)'
253-
Write-BeaconLine ''
254-
255-
Write-BeaconLine ' Running Local Identity validation (Categories 1-3, 5, 9-11)...' -Color Cyan
251+
Write-BeaconLine ' Running Local Identity validation (Categories 1-3, 5-6)...' -Color Cyan
256252
Write-BeaconLine ' Skipping AD port tests (Category 4) — not needed for Local Identity.' -Color DarkGray
257253
Write-BeaconLine ''
258254

259255
$overrides = @{
260256
dnsServers = $dnsServers
261257
adDomainFqdn = '' # Not needed — suppresses DNS domain lookup in Cat-2
262258
}
263-
if ($ipPoolStart -and $ipPoolEnd) {
264-
$overrides['ipPoolStart'] = $ipPoolStart
265-
$overrides['ipPoolEnd'] = $ipPoolEnd
266-
}
267259
Write-ValidationConfigOverrides -Overrides $overrides
268260

269-
# Categories: 1=Network, 2=DNS, 3=NTP, 5=Endpoint sweep, 9=EnvChecker(connectivity), 10=SSL, 11=Prereq sanity
270-
Invoke-ValidationEngine -Categories @('1', '2', '3', '5', '9', '10', '11')
261+
# Categories: 1=Network, 2=DNS, 3=NTP, 5=Endpoint sweep, 6=EnvChecker(connectivity+network), 7=Arc(optional)
262+
Invoke-ValidationEngine -Categories @('1', '2', '3', '5', '6')
271263

272264
# Key Vault endpoint check — manual TCP probe if FQDN provided
273265
if ($kvFqdn) {
@@ -306,31 +298,24 @@ function Invoke-LocalIdentityMenu {
306298
function Invoke-NetworkFirewallMenu {
307299
Write-BeaconHeader 'Networking and Firewall Validation'
308300
Write-BeaconLine ' Validates physical network, endpoint reachability (Azure Local + Arc + Dell),' -Color White
309-
Write-BeaconLine ' SSL deep-inspection detection, IP-pool squatter scan, and hardware.' -Color White
301+
Write-BeaconLine ' DNS, NTP, and the Microsoft Environment Checker.' -Color White
310302
Write-BeaconLine ''
311303

312304
$gwIp = Prompt-Optional 'Management gateway IP (leave blank to use DHCP-detected)'
313305
$dnsRaw = Prompt-Optional 'DNS server IP(s) — comma-separated (leave blank to use current)'
314306
$dnsServers = if ($dnsRaw) { @($dnsRaw -split ',' | ForEach-Object { $_.Trim() } | Where-Object { $_ -ne '' }) } else { @() }
315307
Write-BeaconLine ''
316-
$ipPoolStart = Prompt-Optional 'IP pool start for squatter scan (optional)'
317-
$ipPoolEnd = Prompt-Optional 'IP pool end for squatter scan (optional)'
318-
Write-BeaconLine ''
319308

320309
$overrides = @{}
321310
if ($gwIp) { $overrides['managementGateway'] = $gwIp }
322311
if ($dnsServers.Count -gt 0) { $overrides['dnsServers'] = $dnsServers }
323-
if ($ipPoolStart -and $ipPoolEnd) {
324-
$overrides['ipPoolStart'] = $ipPoolStart
325-
$overrides['ipPoolEnd'] = $ipPoolEnd
326-
}
327312
if ($overrides.Count -gt 0) { Write-ValidationConfigOverrides -Overrides $overrides }
328313

329-
Write-BeaconLine ' Running Networking/Firewall validation (Categories 1-3, 5-12)...' -Color Cyan
314+
Write-BeaconLine ' Running Networking/Firewall validation (Categories 1-3, 5-6)...' -Color Cyan
330315
Write-BeaconLine ''
331316

332317
# All categories except Cat-4 (AD ports — not relevant for a network-focused run)
333-
Invoke-ValidationEngine -Categories @('1', '2', '3', '5', '6', '7', '8', '9', '10', '11', '12')
318+
Invoke-ValidationEngine -Categories @('1', '2', '3', '5', '6')
334319

335320
Write-BeaconLine ''
336321
Write-BeaconLine ' Networking and Firewall validation complete. Results in X:\results\' -Color Green
@@ -377,8 +362,8 @@ Invoke-AzStackHciArcIntegrationValidation ``
377362
#region ── Full Sweep ──
378363

379364
function Invoke-FullSweep {
380-
Write-BeaconHeader 'Full Readiness Sweep — All Categories'
381-
Write-BeaconLine ' Runs all 12 validation categories plus the Microsoft Environment Checker.' -Color White
365+
Write-BeaconHeader 'Full Readiness Sweep — All 7 Categories'
366+
Write-BeaconLine ' Runs all 7 validation categories including the Microsoft Environment Checker.' -Color White
382367
Write-BeaconLine ' Choose deployment path to include the correct identity tests:' -Color DarkGray
383368
Write-BeaconLine ''
384369
Write-BeaconLine ' A) Active Directory (includes Category 4 AD port tests)' -Color White
@@ -390,10 +375,10 @@ function Invoke-FullSweep {
390375

391376
$sweepCategories = if ($pathChoice -eq 'L' -or $pathChoice -eq 'l') {
392377
Write-BeaconLine ' Running full sweep — Local Identity path (skipping AD port tests)...' -Color Cyan
393-
@('1', '2', '3', '5', '6', '7', '8', '9', '10', '11', '12')
378+
@('1', '2', '3', '5', '6', '7')
394379
} else {
395380
Write-BeaconLine ' Running full sweep — Active Directory path (all categories)...' -Color Cyan
396-
@('1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12')
381+
@('1', '2', '3', '4', '5', '6', '7')
397382
}
398383

399384
Write-BeaconLine ''

0 commit comments

Comments
 (0)