113 lines
4.2 KiB
PowerShell
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
|