Skip to content

Commit 86d9fd2

Browse files
committed
Added SIG enable\disable images
1 parent e4b8909 commit 86d9fd2

File tree

2 files changed

+102
-15
lines changed

2 files changed

+102
-15
lines changed

samples/ClassroomLabs/Modules/Library/Az.LabServices.psm1

Lines changed: 67 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1024,15 +1024,79 @@ function Get-AzLabAccountSharedImage {
10241024
param(
10251025
[parameter(Mandatory = $true, HelpMessage = "Lab Account to get shared images from", ValueFromPipeline = $true)]
10261026
[ValidateNotNullOrEmpty()]
1027-
$LabAccount
1027+
$LabAccount,
1028+
1029+
[Parameter(Mandatory = $false, ValueFromPipelineByPropertyName = $true, HelpMessage = "Are the images enabled? Enabled = Yes, and Disabled = No")]
1030+
[ValidateSet('Enabled', 'Disabled', 'All')]
1031+
[string] $EnableState = "Enabled"
10281032
)
10291033

10301034
begin { . BeginPreamble }
10311035
process {
10321036
try {
1037+
10331038
foreach ($la in $LabAccount) {
10341039
$uri = (ConvertToUri -resource $la) + "/SharedImages"
1035-
return InvokeRest -Uri $uri -Method 'Get' | Where-Object { $_.properties.EnableState -eq 'Enabled' }
1040+
1041+
if ($EnableState -eq "All") {
1042+
$response = InvokeRest -Uri $uri -Method 'Get'
1043+
}
1044+
else {
1045+
$response = InvokeRest -Uri $uri -Method 'Get' | Where-Object { $_.properties.EnableState -eq $EnableState }
1046+
}
1047+
1048+
return $response
1049+
}
1050+
}
1051+
catch {
1052+
Write-Error -ErrorRecord $_ -EA $callerEA
1053+
}
1054+
}
1055+
end { }
1056+
}
1057+
1058+
function Set-AzLabAccountSharedImage {
1059+
[CmdletBinding()]
1060+
param(
1061+
[parameter(Mandatory = $true, HelpMessage = "Shared image to update.", ValueFromPipeline = $true)]
1062+
[ValidateNotNullOrEmpty()]
1063+
$SharedImage,
1064+
1065+
[Parameter(Mandatory = $false, ValueFromPipelineByPropertyName = $true, HelpMessage = "Should this image be enabled? Enabled = Yes, and Disabled = No")]
1066+
[ValidateSet('Enabled', 'Disabled')]
1067+
[string] $EnableState = "Enabled"
1068+
)
1069+
1070+
begin { . BeginPreamble }
1071+
process {
1072+
try {
1073+
1074+
foreach ($image in $SharedImage) {
1075+
$ResourceGroupName = $image.id.split('/')[4]
1076+
$LabAccountName = $image.id.split('/')[8]
1077+
$LabAccount = Get-AzLabAccount -ResourceGroupName $ResourceGroupName -LabAccountName $LabAccountName
1078+
1079+
Write-Verbose "Image to update:\n$($image | ConvertTo-Json)"
1080+
1081+
$body = @{
1082+
id = $image.id
1083+
name = $image.name
1084+
properties =
1085+
@{
1086+
EnableState = $EnableState
1087+
sharedGalleryId = $image.properties.sharedGalleryId
1088+
osType = $image.properties.osType
1089+
imageType = $image.properties.imageType
1090+
displayName = $image.properties.displayName
1091+
definitionName = $image.properties.definitionName
1092+
}
1093+
} | ConvertTo-Json
1094+
1095+
$uri = (ConvertToUri -resource $LabAccount) + "/SharedImages/"+ $image.name
1096+
1097+
$updatedImage = InvokeRest -Uri $uri -Method 'PUT' -Body ($body)
1098+
Write-Verbose "Updated image\n$($updatedImage | ConvertTo-Json)"
1099+
return WaitProvisioning -uri $uri -delaySec 60 -retryCount 120
10361100
}
10371101
}
10381102
catch {
@@ -1709,6 +1773,7 @@ Export-ModuleMember -Function Get-AzLabAccount,
17091773
Get-AzLab,
17101774
New-AzLab,
17111775
Get-AzLabAccountSharedImage,
1776+
Set-AzLabAccountSharedImage,
17121777
Get-AzLabAccountGalleryImage,
17131778
Remove-AzLab,
17141779
Get-AzLabTemplateVM,

samples/ClassroomLabs/Modules/Library/Tools/LabCreationLibrary.psm1

Lines changed: 35 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)