OSDCloudRE: support creating the RE partition from a local / UNC ISO (without Azure)

Aperta
#402 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
56/100
Tipo di issue
Funzionalità
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
powershell
Ambito
backend

Direzione di ricerca

Start in Public/OSDCloud/OSDCloudRE.ps1 and compare Invoke-OSDCloudRE with Start-OSDCloudREAzure, following how the boot image is selected, downloaded, and used to size the partition. Check OSDeploy/OSD.psd1 for the export list. Done means a local or UNC ISO can use the new wrapper while the existing Azure flow still works; the issue gives no test file, so verify both paths using the module's existing checks.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

Is your feature request related to a problem? Please describe.
OSDCloudRE can currently only be created from an ISO stored in Azure Storage (Start-OSDCloudREAzure → Invoke-OSDCloudRE). In environments where the boot ISO is already on the device (copied by a software distribution / DSC / Intune), on a file share, or where Azure Storage isn't available, there is no supported way to build OSDCloudRE. Invoke-OSDCloudRE has no parameters, stops when AzOSDCloudBootImage is empty, always downloads into C:\OSDCloud\Azure\..., and sizes the partition from the Azure blob (New-OSDCloudREVolume -IsoSize $Global:OSDCloudRE.AzOSDCloudBootImage.Length). So overriding BootImage via $Global:MyOSDCloudRE doesn't work either.

I currently work around this with a local copy of the OSDCloudRE functions, which I have to re-check on every OSD release.

Describe the solution you'd like
A small, backwards-compatible change in Public/OSDCloud/OSDCloudRE.ps1 (tested against 26.10.16.1):

  1. Invoke-OSDCloudRE gets an optional -LocalISOPath parameter (also settable via $Global:MyOSDCloudRE.LocalISOPath).
  2. If LocalISOPath is set, the Azure checks and download are skipped and BootImage is the local file. Otherwise the existing Azure flow is unchanged.
  3. The partition is sized from $Global:OSDCloudRE.BootImage.Length, which is the same value as the blob length in the Azure case.
  4. A new exported wrapper, Start-OSDCloudRELocal -ISOPath <path>, mirrors the admin / not-WinPE checks of Start-OSDCloudREAzure.
Start-OSDCloudRELocal -ISOPath 'D:\OSDCloud\OSDCloud.iso'
Start-OSDCloudRELocal -ISOPath '\\server\share\OSDCloud.iso'

The core of the change in Invoke-OSDCloudRE:

param (
    [System.String]
    #Path to an OSDCloud ISO on a local drive or UNC share. Azure Storage is not used when set
    $LocalISOPath
)
# ...
if (-not $Global:OSDCloudRE.LocalISOPath -and -not $Global:OSDCloudRE.AzOSDCloudBootImage) {
    Write-Warning "[$(Get-Date -format s)] A Boot Image is required to run this function"
    Break
}
# ...
#region Local ISO or Azure Storage Image Download
if ($Global:OSDCloudRE.LocalISOPath) {
    if (-not (Test-Path -Path $Global:OSDCloudRE.LocalISOPath -PathType Leaf)) {
        Write-Warning "[$(Get-Date -format s)] Unable to find $($Global:OSDCloudRE.LocalISOPath)"
        Break
    }
    $Global:OSDCloudRE.BootImage = Get-Item -Path $Global:OSDCloudRE.LocalISOPath -ErrorAction Stop | Select-Object -First 1
}
elseif ($Global:OSDCloudRE.AzOSDCloudBootImage) {
    # existing Azure download, unchanged
}
# ...
$Global:OSDCloudRE.Volume = New-OSDCloudREVolume -IsoSize $Global:OSDCloudRE.BootImage.Length -ErrorAction Stop

The full diff is about 80 lines, mostly the new Start-OSDCloudRELocal function and its help, plus one line in OSD.psd1 FunctionsToExport. I'm happy to open a PR if you're open to the idea, and to adjust the naming (e.g. Start-OSDCloudREISO / -ImagePath) to whatever fits the module best.

Describe alternatives you've considered

  • Maintaining a private copy of the OSDCloudRE functions with this change. This is what I do today, but it drifts from upstream with each release.
  • Uploading the ISO to Azure Storage just to satisfy Start-OSDCloudREAzure. That's not possible in offline or Azure-less environments, and it means downloading an ISO that is already on the device.
Lingua principale
PowerShell
Stelle
251
Fork
102
Merge medio
2m
PR unite (30g)
4

Preparare l'ambiente

Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di OSDeploy/OSD

Tutte le issue di OSDeploy/OSD

Issue simili

Altre issue su Backend & API Design

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.