Tutorial: Use condition in Azure Resource Manager templates

Learn how to deploy Azure resources based on conditions.

In the Set resource deployment order tutorial, you create a virtual machine, a virtual network, and some other dependent resources including a storage account. Instead of creating a new storage account every time, you let people choose between creating a new storage account and using an existing storage account. To accomplish this goal, you define an additional parameter. If the value of the parameter is "new", a new storage account is created. Otherwise, an existing storage account with the name provided is used.

Resource Manager template use condition diagram

This tutorial covers the following tasks:

  • Open a QuickStart template
  • Modify the template
  • Deploy the template
  • Clean up resources

This tutorial only covers a basic scenario of using conditions. For more information, see:

If you don't have an Azure subscription, create a free account before you begin.

Prerequisites

To complete this article, you need:

Open a Quickstart template

Azure QuickStart Templates is a repository for Resource Manager templates. Instead of creating a template from scratch, you can find a sample template and customize it. The template used in this tutorial is called Deploy a simple Windows VM.

  1. From Visual Studio Code, select File>Open File.

  2. In File name, paste the following URL:

    https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/101-vm-simple-windows/azuredeploy.json
    
  3. Select Open to open the file.

  4. There are five resources defined by the template:

  5. Select File>Save As to save a copy of the file to your local computer with the name azuredeploy.json.

Modify the template

Make two changes to the existing template:

  • Add a storage account name parameter. Users can specify either a new storage account name or an existing storage account name.
  • Add a new parameter called newOrExisting. The deployment uses this parameter to determine where to create a new storage account or use an existing storage account.

Here is the procedure to make the changes:

  1. Open azuredeploy.json in Visual Studio Code.

  2. Replace the three variables('storageAccountName') with parameters('storageAccountName') in the whole template.

  3. Remove the following variable definition:

    Resource Manager template use condition diagram

  4. Add the following two parameters to the template:

    "storageAccountName": {
      "type": "string"
    },
    "newOrExisting": {
      "type": "string",
      "allowedValues": [
        "new",
        "existing"
      ]
    },
    

    The updated parameters definition looks like:

    Resource Manager use condition

  5. Add the following line to the beginning of the storage account definition.

    "condition": "[equals(parameters('newOrExisting'),'new')]",
    

    The condition checks the value of a parameter called newOrExisting. If the parameter value is new, the deployment creates the storage account.

    The updated storage account definition looks like:

    Resource Manager use condition

  6. Update the storageUri property of the virtual machine resource definition with the following value:

    "storageUri": "[concat('https://', parameters('storageAccountName'), '.blob.core.windows.net')]"
    

    This change is necessary when you use an existing storage account under a different resource group.

  7. Save the changes.

Deploy the template

Follow the instructions in Deploy the template to open the Cloud shell and upload the revised template, and then run the follow PowerShell script to deploy the template.

$resourceGroupName = Read-Host -Prompt "Enter the resource group name"
$storageAccountName = Read-Host -Prompt "Enter the storage account name"
$newOrExisting = Read-Host -Prompt "Create new or use existing (Enter new or existing)"
$location = Read-Host -Prompt "Enter the Azure location (i.e. centralus)"
$vmAdmin = Read-Host -Prompt "Enter the admin username"
$vmPassword = Read-Host -Prompt "Enter the admin password" -AsSecureString
$dnsLabelPrefix = Read-Host -Prompt "Enter the DNS Label prefix"

New-AzResourceGroup -Name $resourceGroupName -Location $location
New-AzResourceGroupDeployment `
    -ResourceGroupName $resourceGroupName `
    -adminUsername $vmAdmin `
    -adminPassword $vmPassword `
    -dnsLabelPrefix $dnsLabelPrefix `
    -storageAccountName $storageAccountName `
    -newOrExisting $newOrExisting `
    -TemplateFile "$HOME/azuredeploy.json"

Note

The deployment fails if newOrExisting is new, but the storage account with the storage account name specified already exists.

Try making another deployment with newOrExisting set to "existing" and specify an exiting storage account. To create a storage account beforehand, see Create a storage account.

Clean up resources

When the Azure resources are no longer needed, clean up the resources you deployed by deleting the resource group. To delete the resource group, select Try it to open the Cloud shell. To paste the PowerShell script, right-click the shell pane, and then select Paste.

$resourceGroupName = Read-Host -Prompt "Enter the same resource group name you used in the last procedure"
Remove-AzResourceGroup -Name $resourceGroupName

Next steps

In this tutorial, you developed a template that allows users to choose between creating a new storage account and using an existing storage account. To learn how to retrieve secrets from Azure Key Vault, and use the secrets as passwords in the template deployment, see: