<# .SYNOPSIS Deploys a template to Azure .DESCRIPTION Deploys an Azure Resource Manager template .PARAMETER subscriptionId The subscription id where the template will be deployed. .PARAMETER resourceGroupName The resource group where the template will be deployed. Can be the name of an existing or a new resource group. .PARAMETER resourceGroupLocation Optional, a resource group location. If specified, will try to create a new resource group in this location. If not specified, assumes resource group is existing. .PARAMETER deploymentName The deployment name. .PARAMETER templateFilePath Optional, path to the template file. Defaults to template.json. .PARAMETER parametersFilePath Optional, path to the parameters file. Defaults to parameters.json. If file is not found, will prompt for parameter values based on template. #> param( [Parameter(Mandatory=$True)] [string] $subscriptionId, [Parameter(Mandatory=$True)] [string] $resourceGroupName, [string] $resourceGroupLocation, [Parameter(Mandatory=$True)] [string] $deploymentName, [string] $templateFilePath = "mesh_rp.linux.json", [string] $parametersFilePath = "parameters.json" ) <# .SYNOPSIS Registers RPs #> Function RegisterRP { Param( [string]$ResourceProviderNamespace ) Write-Host "Registering resource provider '$ResourceProviderNamespace'"; Register-AzureRmResourceProvider -ProviderNamespace $ResourceProviderNamespace; } #****************************************************************************** # Script body # Execution begins here #****************************************************************************** $ErrorActionPreference = "Stop" # sign in Write-Host "Logging in..."; Login-AzureRmAccount; # select subscription Write-Host "Selecting subscription '$subscriptionId'"; Select-AzureRmSubscription -SubscriptionID $subscriptionId; # Register RPs $resourceProviders = @(); if($resourceProviders.length) { Write-Host "Registering resource providers" foreach($resourceProvider in $resourceProviders) { RegisterRP($resourceProvider); } } #Create or check for existing resource group $resourceGroup = Get-AzureRmResourceGroup -Name $resourceGroupName -ErrorAction SilentlyContinue if(!$resourceGroup) { Write-Host "Resource group '$resourceGroupName' does not exist. To create a new resource group, please enter a location."; if(!$resourceGroupLocation) { $resourceGroupLocation = Read-Host "resourceGroupLocation"; } Write-Host "Creating resource group '$resourceGroupName' in location '$resourceGroupLocation'"; New-AzureRmResourceGroup -Name $resourceGroupName -Location $resourceGroupLocation } else{ Write-Host "Using existing resource group '$resourceGroupName'"; } # Start the deployment Write-Host "Starting deployment..."; if(Test-Path $parametersFilePath) { New-AzureRmResourceGroupDeployment -ResourceGroupName $resourceGroupName -TemplateFile $templateFilePath -TemplateParameterFile $parametersFilePath; } else { New-AzureRmResourceGroupDeployment -ResourceGroupName $resourceGroupName -TemplateFile $templateFilePath; }