Remove Storage Account and VHD refs (#8581)

This commit is contained in:
Shamil Mubarakshin
2023-10-18 19:11:46 +02:00
committed by GitHub
parent e78225c349
commit e9fc71683f
4 changed files with 23 additions and 241 deletions

View File

@@ -74,9 +74,6 @@ jobs:
$ManagedImageName = "${{ parameters.image_type }}-$(Build.BuildId)" $ManagedImageName = "${{ parameters.image_type }}-$(Build.BuildId)"
Write-Host "##vso[task.setvariable variable=ManagedImageName;]$ManagedImageName" Write-Host "##vso[task.setvariable variable=ManagedImageName;]$ManagedImageName"
$VhdName = "$ManagedImageName.vhd"
Write-Host "##vso[task.setvariable variable=VhdName;]$VhdName"
$TempResourceGroupName = "packer-temp-$ManagedImageName" $TempResourceGroupName = "packer-temp-$ManagedImageName"
Write-Host "##vso[task.setvariable variable=TempResourceGroupName;]$TempResourceGroupName" Write-Host "##vso[task.setvariable variable=TempResourceGroupName;]$TempResourceGroupName"
@@ -146,26 +143,6 @@ jobs:
-PrefixToPathTrim "$(TemplateDirectoryPath)" ` -PrefixToPathTrim "$(TemplateDirectoryPath)" `
-PrintTopNLongest 25 -PrintTopNLongest 25
- task: PowerShell@2
displayName: 'Convert managed image to VHD'
inputs:
targetType: filePath
filePath: ./images.CI/linux-and-win/convert-to-vhd.ps1
arguments: -SubscriptionId $(AZURE_SUBSCRIPTION) `
-Location $(AZURE_LOCATION) `
-ResourceGroupName $(AZURE_RESOURCE_GROUP) `
-ManagedImageName "$(ManagedImageName)" `
-GalleryName "github_imagegeneration_convert_to_vhd" `
-GalleryImageSku "${{ parameters.image_type }}" `
-GalleryImageVersion "0.0.$(Build.BuildId)" `
-StorageAccountName $(AZURE_STORAGE_ACCOUNT) `
-StorageAccountContainerName "images" `
-VhdName "$(VhdName)" `
-ClientId $(CLIENT_ID) `
-ClientSecret $(CLIENT_SECRET) `
-TenantId $(AZURE_TENANT) `
-RemoveManagedImage
- ${{ if eq(parameters.create_release, true) }}: - ${{ if eq(parameters.create_release, true) }}:
- task: PowerShell@2 - task: PowerShell@2
displayName: 'Create release for VM deployment' displayName: 'Create release for VM deployment'
@@ -176,9 +153,8 @@ jobs:
-Organization $(RELEASE_TARGET_ORGANIZATION) ` -Organization $(RELEASE_TARGET_ORGANIZATION) `
-DefinitionId $(RELEASE_TARGET_DEFINITION_ID) ` -DefinitionId $(RELEASE_TARGET_DEFINITION_ID) `
-Project $(RELEASE_TARGET_PROJECT) ` -Project $(RELEASE_TARGET_PROJECT) `
-ImageName "${{ parameters.image_type }}" ` -ImageType "${{ parameters.image_type }}" `
-StorageAccountContainerName "images" ` -ManagedImageName "$(ManagedImageName)" `
-VhdName "$(VhdName)" `
-AccessToken $(RELEASE_TARGET_TOKEN) -AccessToken $(RELEASE_TARGET_TOKEN)
- task: PowerShell@2 - task: PowerShell@2
@@ -188,7 +164,6 @@ jobs:
targetType: filePath targetType: filePath
filePath: ./images.CI/linux-and-win/cleanup.ps1 filePath: ./images.CI/linux-and-win/cleanup.ps1
arguments: -TempResourceGroupName "$(TempResourceGroupName)" ` arguments: -TempResourceGroupName "$(TempResourceGroupName)" `
-StorageAccount $(AZURE_STORAGE_ACCOUNT) `
-SubscriptionId $(AZURE_SUBSCRIPTION) ` -SubscriptionId $(AZURE_SUBSCRIPTION) `
-ClientId $(CLIENT_ID) ` -ClientId $(CLIENT_ID) `
-ClientSecret $(CLIENT_SECRET) ` -ClientSecret $(CLIENT_SECRET) `

View File

@@ -1,23 +1,19 @@
param( param(
[String] [Parameter (Mandatory=$true)] $TempResourceGroupName, [Parameter (Mandatory=$true)] [string] $TempResourceGroupName,
[String] [Parameter (Mandatory=$true)] $StorageAccount, [Parameter (Mandatory=$true)] [string] $SubscriptionId,
[String] [Parameter (Mandatory=$true)] $SubscriptionId, [Parameter (Mandatory=$true)] [string] $ClientId,
[String] [Parameter (Mandatory=$true)] $ClientId, [Parameter (Mandatory=$true)] [string] $ClientSecret,
[String] [Parameter (Mandatory=$true)] $ClientSecret, [Parameter (Mandatory=$true)] [string] $TenantId
[String] [Parameter (Mandatory=$true)] $TenantId
) )
az login --service-principal --username $ClientId --password $ClientSecret --tenant $TenantId | Out-Null az login --service-principal --username $ClientId --password $ClientSecret --tenant $TenantId | Out-Null
az account set --subscription $SubscriptionId | Out-Null
$groupExist = az group exists --name $TempResourceGroupName --subscription $SubscriptionId $groupExist = az group exists --name $TempResourceGroupName
if ($groupExist -eq "true") { if ($groupExist -eq "true") {
$osDiskName = az deployment group list --resource-group $TempResourceGroupName --query "[].properties.parameters.osDiskName.value" -o tsv
Write-Host "Found a match, deleting temporary files" Write-Host "Found a match, deleting temporary files"
az group delete --name $TempResourceGroupName --subscription $SubscriptionId --yes | Out-Null az group delete --name $TempResourceGroupName --yes | Out-Null
Write-Host "Temporary group was deleted successfully" Write-Host "Temporary group was deleted successfully"
Write-Host "Deleting OS disk"
az storage remove --account-name $StorageAccount -c "images" -n "$osDiskName.vhd" --only-show-errors | Out-Null
Write-Host "OS disk deleted"
} else { } else {
Write-Host "No temporary groups found" Write-Host "No temporary groups found"
} }

View File

@@ -1,185 +0,0 @@
param (
[String] [Parameter (Mandatory = $true)] $SubscriptionId,
[String] [Parameter (Mandatory = $true)] $Location,
[String] [Parameter (Mandatory = $true)] $ResourceGroupName,
[String] [Parameter (Mandatory = $true)] $ManagedImageName,
[String] [Parameter (Mandatory = $true)] $GalleryName,
[String] [Parameter (Mandatory = $true)] $GalleryImageSku,
[String] [Parameter (Mandatory = $true)] $GalleryImageVersion,
[String] [Parameter (Mandatory = $true)] $StorageAccountName,
[String] [Parameter (Mandatory = $true)] $StorageAccountContainerName,
[String] [Parameter (Mandatory = $true)] $VhdName,
[Switch] [Parameter (Mandatory = $false)] $RemoveManagedImage,
[String] [Parameter (Mandatory = $true)] $ClientId,
[String] [Parameter (Mandatory = $true)] $ClientSecret,
[String] [Parameter (Mandatory = $true)] $TenantId
)
$ErrorActionPreference = "Stop"
# Login to Azure
az login --service-principal --username $ClientId --password $ClientSecret --tenant $TenantId | Out-Null
az account set --subscription $SubscriptionId | Out-Null
# Create Compute Image Gallery if it doesn't exist
Write-Host "Creating Compute Image Gallery '$GalleryName'..."
$galleryExists = az sig list --resource-group $ResourceGroupName --query "[?name=='$GalleryName']" -o tsv
if ($null -eq $galleryExists) {
az sig create --resource-group $ResourceGroupName --gallery-name $GalleryName --location $Location
}
# Create Image Definition if it doesn't exist
Write-Host "Creating Image Definition '$ManagedImageName'..."
$imageDefinitionName = "RunnerImage-$GalleryImageSku"
if ($ManagedImageName -like "*windows*") {
$imageOsType = "Windows"
} elseif ($ManagedImageName -like "*ubuntu*") {
$imageOsType = "Linux"
} else {
throw "Unknown OS type for image '$ManagedImageName'"
}
$galleryImageExists = az sig image-definition list --resource-group $ResourceGroupName --gallery-name $GalleryName --query "[?name=='$imageDefinitionName']" -o tsv
if ($null -eq $galleryImageExists) {
az sig image-definition create `
--resource-group $ResourceGroupName `
--gallery-name $GalleryName `
--gallery-image-definition $imageDefinitionName `
--publisher "GuthubImagesGeneration" `
--offer "RunnerImage" `
--sku $GalleryImageSku `
--os-type $imageOsType `
--location $Location
}
# Create Image Version from existing Managed Image
Write-Host "Creating Image Version '$GalleryImageVersion' from Managed Image '$ManagedImageName'..."
az sig image-version create `
--resource-group $ResourceGroupName `
--gallery-name $GalleryName `
--gallery-image-definition $imageDefinitionName `
--gallery-image-version $GalleryImageVersion `
--managed-image "/subscriptions/$SubscriptionId/resourceGroups/$ResourceGroupName/providers/Microsoft.Compute/images/$ManagedImageName" `
--target-regions $Location `
--replica-count 1 `
--location $Location
# Create Azure Managed Disk from Shared Image Gallery
Write-Host "Creating Azure Managed Disk '$ManagedImageName' from Shared Image Gallery..."
az disk create `
--resource-group $ResourceGroupName `
--name $ManagedImageName `
--location $Location `
--gallery-image-reference "/subscriptions/$SubscriptionId/resourceGroups/$ResourceGroupName/providers/Microsoft.Compute/galleries/$GalleryName/images/$imageDefinitionName/versions/$GalleryImageVersion"
# Generate SAS URL for the Managed Disk
Write-Host "Generating SAS URL for the Managed Disk '$ManagedImageName'..."
$sourceDiskUri = az disk grant-access `
--resource-group $ResourceGroupName `
--name $ManagedImageName `
--duration-in-seconds 86400 `
--access-level Read `
--query [accessSas] -o tsv
Write-Host "Querying key for the storage account '$StorageAccountName'..."
$targetKey = az storage account keys list `
--resource-group $ResourceGroupName `
--account-name $StorageAccountName `
--query "[0].value" -o tsv
Write-Host ("Copying VHD blob from '{0}' to 'https://{1}.blob.core.windows.net/{2}/{3}'..." `
-f $sourceDiskUri.Split('?')[0], $StorageAccountName, $StorageAccountContainerName, $VhdName)
az storage blob copy start `
--source-uri $sourceDiskUri `
--destination-blob $VhdName `
--destination-container $StorageAccountContainerName `
--account-name $StorageAccountName `
--account-key $targetKey `
--only-show-errors
Write-Host "Waiting for the copy to complete..."
while ($true) {
$status = az storage blob show `
--container-name $StorageAccountContainerName `
--name $VhdName `
--account-name $StorageAccountName `
--account-key $targetKey `
--query "properties.copy.status" -o tsv
if ($status -eq "success") {
Write-Host "Copy completed successfully."
break
} elseif ($status -ne "pending") {
Write-Host "Copy failed with status '$status', see blob information below:"
az storage blob show `
--container-name $StorageAccountContainerName `
--name $VhdName `
--account-name $StorageAccountName `
--account-key $targetKey
throw "Copy failed with status '$status'"
}
$progress = az storage blob show `
--container-name $StorageAccountContainerName `
--name $VhdName `
--account-name $StorageAccountName `
--account-key $targetKey `
--query "properties.copy.progress" -o tsv
Write-Host "Progress: $(($progress.Split("/")[0] / $progress.Split("/")[1]).ToString("P"))"
Start-Sleep -Seconds 15
}
Write-Host "Successfully converted '$ManagedImageName' to '$VhdName' in '$StorageAccountName' storage account."
# Remove Managed Image if requested
if ($RemoveManagedImage) {
Write-Host "Removing Managed Image '$ManagedImageName'..."
az image delete `
--resource-group $ResourceGroupName `
--name $ManagedImageName `
--only-show-errors
if ($LastExitCode) {
Write-Host "Warning: Failed to delete the Managed Image '$ManagedImageName'."
}
}
Write-Host "Cleaning up..."
# Revoke SAS URL for the Managed Disk
az disk revoke-access `
--resource-group $ResourceGroupName `
--name $ManagedImageName `
--only-show-errors
if ($LastExitCode) {
Write-Host "Warning: Failed to revoke access to the Managed Disk '$ManagedImageName'."
}
# Delete Azure Managed Disk from Shared Image Gallery
az disk delete `
--resource-group $ResourceGroupName `
--name $ManagedImageName `
--only-show-errors `
--yes
if ($LastExitCode) {
Write-Host "Warning: Failed to delete the Managed Disk '$ManagedImageName'."
}
# Delete Image Version from Shared Image Gallery
az sig image-version delete `
--resource-group $ResourceGroupName `
--gallery-name $GalleryName `
--gallery-image-definition $imageDefinitionName `
--gallery-image-version $GalleryImageVersion `
--only-show-errors
if ($LastExitCode) {
Write-Host "Warning: Failed to delete the Image Version '$GalleryImageVersion'."
}
Write-Host "Done."

View File

@@ -1,12 +1,11 @@
param( param(
[UInt32] [Parameter (Mandatory)] $BuildId, [Parameter (Mandatory)] [UInt32] $BuildId,
[String] [Parameter (Mandatory)] $Organization, [Parameter (Mandatory)] [string] $Organization,
[String] [Parameter (Mandatory)] $Project, [Parameter (Mandatory)] [string] $Project,
[String] [Parameter (Mandatory)] $ImageName, [Parameter (Mandatory)] [string] $ImageType,
[String] [Parameter (Mandatory)] $StorageAccountContainerName, [Parameter (Mandatory)] [string] $ManagedImageName,
[String] [Parameter (Mandatory)] $VhdName, [Parameter (Mandatory)] [string] $DefinitionId,
[String] [Parameter (Mandatory)] $DefinitionId, [Parameter (Mandatory)] [string] $AccessToken
[String] [Parameter (Mandatory)] $AccessToken
) )
$Body = @{ $Body = @{
@@ -15,14 +14,11 @@ $Body = @{
ImageBuildId = @{ ImageBuildId = @{
value = $BuildId value = $BuildId
} }
ImageName = @{ ImageType = @{
value = $ImageName value = $ImageType
} }
ImageStorageContainerName = @{ ManagedImageName = @{
value = $StorageAccountContainerName value = $ManagedImageName
}
ImageBlobPath = @{
value = $VhdName
} }
} }
isDraft = "false" isDraft = "false"
@@ -37,4 +33,4 @@ $headers = @{
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 -bor [Net.SecurityProtocolType]::Tls13 [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 -bor [Net.SecurityProtocolType]::Tls13
$NewRelease = Invoke-RestMethod $URL -Body $Body -Method "POST" -Headers $headers -ContentType "application/json" $NewRelease = Invoke-RestMethod $URL -Body $Body -Method "POST" -Headers $headers -ContentType "application/json"
Write-Host "Created release: $($NewRelease._links.web.href)" Write-Host "Created release: $($NewRelease._links.web.href)"