This ARM template shows how to use conditions and logical/comparison functions to dynamically create windows/linux for prod/non-prod
{ | |
"$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", | |
"contentVersion": "1.0.0.0", | |
"parameters": { | |
"vmNamePrefix": { | |
"type": "string", | |
"defaultValue": "VM", | |
"metadata": { | |
"description": "Assing a prefix for the VM you will create." | |
} | |
}, | |
"production": { | |
"type": "string", | |
"allowedValues": [ | |
"Yes", | |
"No" | |
], | |
"metadata": { | |
"description": "Select whether the VM should be in production or not." | |
} | |
}, | |
"platform": { | |
"type": "string", | |
"allowedValues": [ | |
"WinSrv", | |
"Linux" | |
], | |
"metadata": { | |
"description": "Select the OS type to deploy." | |
} | |
}, | |
"userName": { | |
"type": "string", | |
"defaultValue": "azureadmin", | |
"metadata": { | |
"description": "Specify the OS username" | |
} | |
}, | |
"pwdOrssh": { | |
"type": "securestring", | |
"metadata": { | |
"description": "If Windows, specify the password for the OS username. If Linux, provide the SSH." | |
} | |
} | |
}, | |
"variables": { | |
"vNetName": "vnet01", | |
"subnetName": "subnet1", | |
"vNetAddressPrefix": "192.168.0.0/16", | |
"subnetAddressPrefix": "192.168.0.0/24", | |
"vnetID": "[resourceId('Microsoft.Network/virtualnetworks', variables('vNetName'))]", | |
"subnetRef": "[concat(variables('vnetID'),'/subnets/', variables('subnetName'))]", | |
"windowsOffer": "WindowsServer", | |
"windowsSku": "2016-Datacenter", | |
"windowsPublisher": "MicrosoftWindowsServer", | |
"linuxOffer": "UbuntuServer", | |
"linuxSku": "12.04.5-LTS", | |
"linuxPublisher": "Canonical", | |
"availabilitySetName": "[concat(parameters('platform'), '-', 'avset')]", | |
"availabilitySetId": { | |
"id": "[resourceId('Microsoft.Compute/availabilitySets', variables('availabilitySetName'))]" | |
}, | |
"vNicName": "[concat(parameters('platform'), '-', 'nic')]", | |
"pNicName": "[concat(parameters('platform'), '-', 'pip')]", | |
"vmName": "[concat(parameters('vmNamePrefix'), parameters('platform'))]" | |
}, | |
"resources": [ | |
{ | |
"apiVersion": "2017-04-01", | |
"type": "Microsoft.Network/virtualNetworks", | |
"name": "[variables('vNetName')]", | |
"location": "[resourceGroup().location]", | |
"properties": { | |
"addressSpace": { | |
"addressPrefixes": [ | |
"[variables('vNetAddressPrefix')]" | |
] | |
}, | |
"subnets": [ | |
{ | |
"name": "[variables('subnetName')]", | |
"properties": { | |
"addressPrefix": "[variables('subnetAddressPrefix')]" | |
} | |
} | |
] | |
} | |
}, | |
{ | |
"type": "Microsoft.Network/publicIPAddresses", | |
"apiVersion": "2017-04-01", | |
"name": "[variables('pNicName')]", | |
"location": "[resourceGroup().location]", | |
"properties": { | |
"publicIPallocationmethod": "Dynamic", | |
"dnsSettings": { | |
"domainNameLabel": "[toLower(concat(parameters('vmNamePrefix')))]" | |
} | |
} | |
}, | |
{ | |
"type": "Microsoft.Network/networkInterfaces", | |
"apiVersion": "2017-04-01", | |
"name": "[variables('vNicName')]", | |
"location": "[resourceGroup().location]", | |
"dependsOn": [ | |
"[resourceId('Microsoft.Network/publicIPAddresses/', variables('pNicName'))]", | |
"[resourceId('Microsoft.network/virtualNetworks/', variables('vNetName'))]" | |
], | |
"properties": { | |
"ipConfigurations": [ | |
{ | |
"name": "ipconfig1", | |
"properties": { | |
"privateIPAllocationMethod": "Dynamic", | |
"publicIPAddress": { | |
"id": "[resourceId('Microsoft.Network/publicIPAddresses', variables('pNicName'))]" | |
}, | |
"subnet": { | |
"id": "[variables('subnetRef')]" | |
} | |
} | |
} | |
] | |
} | |
}, | |
{ | |
"condition": "[equals(parameters('production'), 'Yes')]", | |
"type": "Microsoft.Compute/availabilitySets", | |
"apiVersion": "2017-03-30", | |
"name": "[variables('availabilitySetName')]", | |
"location": "[resourceGroup().location]", | |
"properties": { | |
"platformFaultDomainCount": 2, | |
"platformUpdateDomainCount": 3 | |
}, | |
"sku": { | |
"name": "Aligned" | |
} | |
}, | |
{ | |
"type": "Microsoft.Compute/virtualMachines", | |
"apiVersion": "2017-03-30", | |
"name": "[variables('vmName')]", | |
"location": "[resourceGroup().location]", | |
"dependsOn": [ | |
"[resourceId('Microsoft.Network/networkinterfaces/', variables('vNicName'))]", | |
"[resourceId('Microsoft.Compute/availabilitySets/', variables('availabilitySetName'))]" | |
], | |
"properties": { | |
"availabilitySet": "[if(equals(parameters('production'), 'Yes'), variables('availabilitySetId'), json('null'))]", | |
"hardwareprofile": { | |
"vmsize": "Standard_D1" | |
}, | |
"osProfile": { | |
"computername": "[parameters('vmNamePrefix')]", | |
"adminusername": "[parameters('username')]", | |
"adminpassword": "[parameters('pwdOrssh')]" | |
}, | |
"storageProfile": { | |
"imageReference": { | |
"publisher": "[if(equals(parameters('platform'), 'WinSrv'), variables('windowsPublisher'), variables('linuxPublisher'))]", | |
"offer": "[if(equals(parameters('platform'), 'WinSrv'), variables('windowsOffer'), variables('linuxOffer'))]", | |
"version": "latest", | |
"sku": "[if(equals(parameters('platform'), 'WinSrv'), variables('windowsSku'), variables('linuxSku'))]" | |
}, | |
"osdisk": { | |
"name": "[concat(parameters('platform'), '-osDisk')]", | |
"createOption": "FromImage", | |
"managedDisk": { | |
"storageAccountType": "Standard_LRS" | |
}, | |
"caching": "ReadWrite" | |
} | |
}, | |
"networkprofile": { | |
"networkinterfaces": [ | |
{ | |
"id": "[resourceId('Microsoft.Network/networkinterfaces', variables('vNicName'))]" | |
} | |
] | |
} | |
} | |
} | |
], | |
"outputs": { | |
"vmEndpoint": { | |
"type": "string", | |
"value": "[reference(concat(variables('pNicName'))).dnsSettings.fqdn]" | |
}, | |
"platform": { | |
"type": "string", | |
"value": "[parameters('platform')]" | |
}, | |
"connectionInfo": { | |
"type": "string", | |
"value": "[if(equals(parameters('platform'), 'WinSrv'), 'Use RDP to connect to the VM', 'Use SSH to connect to the VM')]" | |
} | |
} | |
} |
This comment has been minimized.
This comment has been minimized.
I have a question. In this example we have two options: WinSrv and Linux. And using the If we say if WinSrv then WinSrv else Linux. But what function and how can be used for dealing with three options? So, option1, option2, option3 |
This comment has been minimized.
This comment has been minimized.
@webyxdesign you can do something like this: Where options is your parameter name.
|
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
This comment has been minimized.
Very simple to understand examples and well explained!!