@@ -338,13 +338,22 @@ function Publish-Labs {
338338 $ConfigObject
339339 )
340340
341- $lacs = $ConfigObject | Select-Object - Property ResourceGroupName, LabAccountName, SharedGalleryResourceGroupName, SharedGalleryName - Unique
341+ $lacs = $ConfigObject | Select-Object - Property ResourceGroupName, LabAccountName, SharedGalleryResourceId, EnableSharedGalleryImages | Sort-Object - Property ResourceGroupName, LabAccountName
342+ $lacNames = $lacs | Select-Object - Property ResourceGroupName, LabAccountName - Unique
343+
344+ # Get the first unique resource group\lab account and attempt to attach a shared gallery if one is specified in the csv. If the resource group\lab account exists
345+ # more than once in the csv, we only attempt to attach to the first one and skip the rest.
346+ $lacsToCreate = @ ()
347+ foreach ($lacName in $lacNames ){
348+ $lac = $lacs | Where-Object {$_.ResourceGroupName -eq $lacName.ResourceGroupName -and $_.LabAccountName -eq $lacName.LabAccountName } | Select-Object - First 1
349+ $lacsToCreate += $lac
350+ }
342351
343352 Write-Host " Operating on the following Lab Accounts:"
344- Write-Host $lacs
353+ Write-Host $lacsToCreate
345354
346355 $block = {
347- param ($path , $ResourceGroupName , $LabAccountName , $SharedGalleryResourceGroupName , $SharedGalleryName )
356+ param ($path , $ResourceGroupName , $LabAccountName , $SharedGalleryResourceId , $EnableSharedGalleryImages )
348357
349358 Set-StrictMode - Version Latest
350359 $ErrorActionPreference = ' Stop'
@@ -353,40 +362,54 @@ function Publish-Labs {
353362 Import-Module $modulePath
354363
355364 $labAccount = Get-AzLabAccount - ResourceGroupName $ResourceGroupName - LabAccountName $LabAccountName
356-
365+
357366 if ($labAccount -eq $null ){
358- $labAccount = New-AzLabAccount - ResourceGroupName $ResourceGroupName - LabAccountName $LabAccountName | Out-Null
367+ $labAccount = New-AzLabAccount - ResourceGroupName $ResourceGroupName - LabAccountName $LabAccountName
359368 Write-Host " $LabAccountName lab account created."
360369 }
361370 else {
362371 Write-Host " $LabAccountName lab account found - skipping create."
363372 }
364373
365- if ($SharedGalleryResourceGroupName -ne $null && $SharedGalleryName -ne $null ){
374+ if ($SharedGalleryResourceId -ne $null ){
366375
367376 $gallery = $labAccount | Get-AzLabAccountSharedGallery
368377 if ($gallery -ne $null ) {
369378 Write-Host " $LabAccountName lab account already has attached gallery $gallery ."
370379 }
371380 else {
372- $gallery = Get-AzGallery - ResourceGroupName $SharedGalleryResourceGroupName - Name $SharedGalleryName
381+ $gallery = Get-AzGallery - ResourceId $SharedGalleryResourceId
373382
374383 if ($gallery -ne $null ) {
375- Write-Host " $SharedGalleryName shared gallery found."
384+ Write-Host " $SharedGalleryResourceId shared gallery found."
376385 New-AzLabAccountSharedGallery - LabAccount $labAccount - SharedGallery $gallery
377- Write-Host " $SharedGalleryName shared gallery attached."
386+ Write-Host " $SharedGalleryResourceId shared gallery attached."
378387 }
379388 else {
380- Write-Host " $SharedGalleryName shared gallery not found - skipping attach."
389+ Write-Host " $SharedGalleryResourceId shared gallery not found - skipping attach."
381390 }
382391 }
392+
393+ Write-Host " Enabling images for lab account: $labAccount "
394+ if ($EnableSharedGalleryImages -ne $null )
395+ {
396+ $imageNames = $EnableSharedGalleryImages.Split (' ,' )
397+ }
398+
399+ Write-Host " Images to enable: $imageNames "
400+ $images = $labAccount | Get-AzLabAccountSharedImage - EnableState All
401+ foreach ($imageName in $imageNames )
402+ {
403+ $image = $images | Where-Object { $_.name -like $imageName } | Set-AzLabAccountSharedImage - EnableState Enabled
404+ Write-Host " Image enabled: $image "
405+ }
383406 }
384407 }
385408
386409 Write-Host " Starting lab accounts creation in parallel. Can take a while."
387410 $jobs = @ ()
388- $lacs | ForEach-Object {
389- $jobs += Start-ThreadJob - ScriptBlock $block - ArgumentList $PSScriptRoot , $_.ResourceGroupName , $_.LabAccountName , $_.SharedGalleryResourceGroupName , $_.SharedGalleryName - Name $_.LabAccountName - ThrottleLimit $ThrottleLimit
411+ $lacsToCreate | ForEach-Object {
412+ $jobs += Start-ThreadJob - ScriptBlock $block - ArgumentList $PSScriptRoot , $_.ResourceGroupName , $_.LabAccountName , $_.SharedGalleryResourceId , $_.EnableSharedGalleryImages - Name $_.LabAccountName - ThrottleLimit $ThrottleLimit
390413 }
391414
392415 $hours = 1
@@ -445,7 +468,6 @@ function Publish-Labs {
445468 }
446469 }
447470
448-
449471 # Needs to create resources in this order, aka parallelize in these three groups, otherwise we get contentions:
450472 # i.e. different jobs trying to create the same common resource (RG or lab account)
451473 New-ResourceGroups - ConfigObject $aggregateLabs
0 commit comments