cosmos-explorer/test/resources/deploy.ps1

113 lines
4.2 KiB
PowerShell

param(
[Parameter(Mandatory=$false)][string]$ResourceGroup,
[Parameter(Mandatory=$false)][string]$Subscription,
[Parameter(Mandatory=$false)][string]$Location,
[Parameter(Mandatory=$false)][string]$ResourcePrefix,
[ValidateSet("tables", "cassandra", "gremlin", "mongo", "mongo32", "sql")] # This must be a constant so we can't re-use the $AllResourceTypes variable :(
[Parameter(Mandatory=$false)][string[]]$ResourceSets,
[Parameter(Mandatory=$false)][string]$OwnerName,
[Parameter(Mandatory=$false)][int]$TotalThroughputLimit = 10000,
[Parameter(Mandatory=$false)][switch]$WhatIf
)
$AllResourceTypes = @(
"tables",
"cassandra",
"gremlin",
"mongo",
"mongo32",
"sql"
)
Import-Module "Az.Accounts" -Scope Local
Import-Module "Az.Resources" -Scope Local
if (-not (Get-Command bicep -ErrorAction SilentlyContinue)) {
throw "The Bicep CLI is required to run this script. Please install it first."
}
if (-not (Get-AzContext)) {
throw "Please login to your Azure account using Connect-AzAccount before running this script."
}
if(-not $ResourcePrefix) {
$ResourcePrefix = $env:USERNAME + "-e2e-"
}
if(-not $OwnerName) {
$OwnerName = $env:USERNAME
}
if (-not $Subscription) {
# Show the user the currently-selected subscription and ask if that's what they want to use
$currentSubscription = Get-AzContext | Select-Object -ExpandProperty Subscription
Write-Host "The currently-selected subscription is $($currentSubscription.Name) ($($currentSubscription.Id))."
$useCurrentSubscription = Read-Host "Do you want to use this subscription? (y/n)"
if ($useCurrentSubscription -eq "n") {
throw "Either specify a subscription using '-Subscription' or select a subscription using 'Select-AzSubscription' before running this script."
}
$Subscription = $currentSubscription.Id
}
$AzSubscription = (Get-AzSubscription -SubscriptionId $Subscription -ErrorAction SilentlyContinue) ?? (Get-AzSubscription -SubscriptionName $Subscription -ErrorAction SilentlyContinue)
if (-not $AzSubscription) {
throw "The subscription '$Subscription' could not be found."
}
Set-AzContext $AzSubscription | Out-Null
if (-not $ResourceGroup) {
$DefaultResourceGroupName = $env:USERNAME + "-e2e-testing"
if (Get-AzResourceGroup -Name $DefaultResourceGroupName -ErrorAction SilentlyContinue) {
Write-Host "Found a resource group with the default name ($DefaultResourceGroupName). Using that resource group. If you want to use a different resource group, specify it as a parameter."
$ResourceGroup = $DefaultResourceGroupName
} else {
$ResourceGroup = Read-Host "Specify the name of the resource group to deploy the resources to."
}
}
$AzResourceGroup = Get-AzResourceGroup -Name $ResourceGroup -ErrorAction SilentlyContinue
if (-not $AzResourceGroup) {
throw "The resource group '$ResourceGroup' could not be found. You have to create the resource group manually before running this script."
}
if (-not $Location) {
$Location = $AzResourceGroup.Location
}
$AzLocation = Get-AzLocation | Where-Object { $_.Location -eq $Location }
if (-not $AzLocation) {
throw "The location '$Location' could not be found."
}
if (-not $ResourceSets) {
$ResourceSets = $AllResourceTypes
} else {
# Normalize the resource set names to the value in AllResourceTypes
$ResourceSets = $ResourceSets | ForEach-Object { $_.ToLower() }
}
Write-Host "Deploying test resource sets: $ResourceSets"
Write-Host " in $($AzLocation.DisplayName)"
Write-Host " to resource group $ResourceGroup"
Write-Host " in subscription $($AzSubscription.Name) ($($AzSubscription.Id))."
if($WhatIf) {
Write-Host " (What-If mode enabled)"
}
$continue = Read-Host "Do you want to continue? (y/n)"
if ($continue -ne "y") {
throw "Deployment cancelled."
}
$bicepFile = Join-Path $PSScriptRoot "all-accounts.bicep"
Write-Host "Deploying resources using $bicepFile"
New-AzResourceGroupDeployment `
-ResourceGroupName $AzResourceGroup.ResourceGroupName `
-TemplateFile $bicepFile `
-WhatIf:$WhatIf `
-accountPrefix $ResourcePrefix `
-testAccountTypes $ResourceSets `
-location $AzLocation.Location `
-ownerName $OwnerName `
-totalThroughputLimit $TotalThroughputLimit