From 35b767203a6de03e2c991d7b3d6e32bfb8c826db Mon Sep 17 00:00:00 2001
From: Pavel Khakhulin
Date: Tue, 30 May 2017 15:45:38 +0300
Subject: [PATCH] Try to deploy multiple VMs in single template
---
main.json | 391 ++++++++++++++++++++++++++++--------------------------
1 file changed, 206 insertions(+), 185 deletions(-)
diff --git a/main.json b/main.json
index 0aaa480..e005298 100644
--- a/main.json
+++ b/main.json
@@ -1,187 +1,208 @@
{
- "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
- "contentVersion": "1.0.0.0",
- "parameters": {
- "adminUsername": {
- "type": "string",
- "metadata": {
- "description": "User name for the Virtual Machine."
- }
- },
- "adminPassword": {
- "type": "securestring",
- "metadata": {
- "description": "Password for the Virtual Machine."
- }
- },
- "dnsLabelPrefix": {
- "type": "string",
- "metadata": {
- "description": "Unique DNS Name for the Public IP used to access the Virtual Machine."
- }
- },
- "ubuntuOSVersion": {
- "type": "string",
- "defaultValue": "16.04.0-LTS",
- "allowedValues": [
- "12.04.5-LTS",
- "14.04.5-LTS",
- "15.10",
- "16.04.0-LTS"
- ],
- "metadata": {
- "description": "The Ubuntu version for the VM. This will pick a fully patched image of this given Ubuntu version."
- }
- }
- },
- "variables": {
- "storageAccountName": "[concat(uniquestring(resourceGroup().id), 'salinuxvm')]",
- "imagePublisher": "Canonical",
- "imageOffer": "UbuntuServer",
- "nicName": "myVMNic",
- "addressPrefix": "10.0.0.0/16",
- "subnetName": "Subnet",
- "subnetPrefix": "10.0.0.0/24",
- "storageAccountType": "Standard_LRS",
- "publicIPAddressName": "myPublicIP",
- "publicIPAddressType": "Dynamic",
- "vmName": "MyUbuntuVM",
- "vmSize": "Standard_A1",
- "virtualNetworkName": "MyVNET",
- "vnetID": "[resourceId('Microsoft.Network/virtualNetworks',variables('virtualNetworkName'))]",
- "subnetRef": "[concat(variables('vnetID'),'/subnets/',variables('subnetName'))]"
- },
- "resources": [
- {
- "type": "Microsoft.Storage/storageAccounts",
- "name": "[variables('storageAccountName')]",
- "apiVersion": "2017-06-01",
- "location": "[resourceGroup().location]",
- "sku": {
- "name": "[variables('storageAccountType')]"
- },
- "kind": "Storage",
- "properties": {}
- },
- {
- "apiVersion": "2017-04-01",
- "type": "Microsoft.Network/publicIPAddresses",
- "name": "[variables('publicIPAddressName')]",
- "location": "[resourceGroup().location]",
- "properties": {
- "publicIPAllocationMethod": "[variables('publicIPAddressType')]",
- "dnsSettings": {
- "domainNameLabel": "[parameters('dnsLabelPrefix')]"
- }
- }
- },
- {
- "apiVersion": "2017-04-01",
- "type": "Microsoft.Network/virtualNetworks",
- "name": "[variables('virtualNetworkName')]",
- "location": "[resourceGroup().location]",
- "properties": {
- "addressSpace": {
- "addressPrefixes": [
- "[variables('addressPrefix')]"
- ]
- },
- "subnets": [
- {
- "name": "[variables('subnetName')]",
- "properties": {
- "addressPrefix": "[variables('subnetPrefix')]"
- }
- }
- ]
- }
- },
- {
- "apiVersion": "2017-04-01",
- "type": "Microsoft.Network/networkInterfaces",
- "name": "[variables('nicName')]",
- "location": "[resourceGroup().location]",
- "dependsOn": [
- "[resourceId('Microsoft.Network/publicIPAddresses/', variables('publicIPAddressName'))]",
- "[resourceId('Microsoft.Network/virtualNetworks/', variables('virtualNetworkName'))]"
- ],
- "properties": {
- "ipConfigurations": [
- {
- "name": "ipconfig1",
- "properties": {
- "privateIPAllocationMethod": "Dynamic",
- "publicIPAddress": {
- "id": "[resourceId('Microsoft.Network/publicIPAddresses',variables('publicIPAddressName'))]"
- },
- "subnet": {
- "id": "[variables('subnetRef')]"
- }
- }
- }
- ]
- }
- },
- {
- "apiVersion": "2017-03-30",
- "type": "Microsoft.Compute/virtualMachines",
- "name": "[variables('vmName')]",
- "location": "[resourceGroup().location]",
- "dependsOn": [
- "[resourceId('Microsoft.Storage/storageAccounts/', variables('storageAccountName'))]",
- "[resourceId('Microsoft.Network/networkInterfaces/', variables('nicName'))]"
- ],
- "properties": {
- "hardwareProfile": {
- "vmSize": "[variables('vmSize')]"
- },
- "osProfile": {
- "computerName": "[variables('vmName')]",
- "adminUsername": "[parameters('adminUsername')]",
- "adminPassword": "[parameters('adminPassword')]"
- },
- "storageProfile": {
- "imageReference": {
- "publisher": "[variables('imagePublisher')]",
- "offer": "[variables('imageOffer')]",
- "sku": "[parameters('ubuntuOSVersion')]",
- "version": "latest"
- },
- "osDisk": {
- "createOption": "FromImage"
- },
- "dataDisks": [
- {
- "diskSizeGB": "128",
- "lun": 0,
- "createOption": "Empty"
- }
- ]
- },
- "networkProfile": {
- "networkInterfaces": [
- {
- "id": "[resourceId('Microsoft.Network/networkInterfaces',variables('nicName'))]"
- }
- ]
- },
- "diagnosticsProfile": {
- "bootDiagnostics": {
- "enabled": "true",
- "storageUri": "[concat(reference(concat('Microsoft.Storage/storageAccounts/', variables('storageAccountName')), '2016-01-01').primaryEndpoints.blob)]"
- }
- }
- }
- }
- ],
- "outputs": {
- "hostname": {
- "type": "string",
- "value": "[reference(variables('publicIPAddressName')).dnsSettings.fqdn]"
- },
- "sshCommand": {
- "type": "string",
- "value": "[concat('ssh ', parameters('adminUsername'), '@', reference(variables('publicIPAddressName')).dnsSettings.fqdn)]"
- }
- }
+ "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
+ "contentVersion": "1.0.0.0",
+ "parameters": {
+ "adminUsername": {
+ "type": "string",
+ "metadata": {
+ "description": "User name for the Virtual Machine."
+ }
+ },
+ "adminPassword": {
+ "type": "securestring",
+ "metadata": {
+ "description": "Password for the Virtual Machine."
+ }
+ },
+ "dnsLabelPrefix": {
+ "type": "string",
+ "metadata": {
+ "description": "Unique DNS Name for the Public IP used to access the Virtual Machine."
+ }
+ },
+ "ubuntuOSVersion": {
+ "type": "string",
+ "defaultValue": "16.04.0-LTS",
+ "allowedValues": [
+ "12.04.5-LTS",
+ "14.04.5-LTS",
+ "15.10",
+ "16.04.0-LTS"
+ ],
+ "metadata": {
+ "description": "The Ubuntu version for the VM. This will pick a fully patched image of this given Ubuntu version."
+ }
+ },
+ "nCopies": {
+ "type": "int",
+ "defaultValue": 2,
+ "minValue": 1,
+ "metadata": {
+ "description": "Number of VMs to deploy"
+ }
+ }
+ },
+ "variables": {
+ "storageAccountName": "[concat(uniquestring(resourceGroup().id), 'salinuxvm')]",
+ "imagePublisher": "Canonical",
+ "imageOffer": "UbuntuServer",
+ "nicName": "myVMNic",
+ "addressPrefix": "10.0.0.0/16",
+ "subnetName": "Subnet",
+ "subnetPrefix": "10.0.0.0/24",
+ "storageAccountType": "Standard_LRS",
+ "publicIPAddressName": "myPublicIP",
+ "publicIPAddressType": "Dynamic",
+ "vmName": "MyUbuntuVM",
+ "vmSize": "Standard_A1",
+ "virtualNetworkName": "MyVNET",
+ "vnetID": "[resourceId('Microsoft.Network/virtualNetworks',variables('virtualNetworkName'))]",
+ "subnetRef": "[concat(variables('vnetID'),'/subnets/',variables('subnetName'))]"
+ },
+ "resources": [
+ {
+ "type": "Microsoft.Storage/storageAccounts",
+ "name": "[concat(variables('storageAccountName'), '-', copyIndex())]",
+ "apiVersion": "2017-06-01",
+ "location": "[resourceGroup().location]",
+ "copy": {
+ "name": "storageloop",
+ "count": "[parameters('nCopies')]"
+ },
+ "sku": {
+ "name": "[variables('storageAccountType')]"
+ },
+ "kind": "Storage",
+ "properties": {}
+ },
+ {
+ "apiVersion": "2017-04-01",
+ "type": "Microsoft.Network/publicIPAddresses",
+ "name": "[concat(variables('publicIPAddressName'), '-', copyIndex())]",
+ "location": "[resourceGroup().location]",
+ "copy": {
+ "name": "iploop",
+ "count": "[parameters('nCopies')]"
+ },
+ "properties": {
+ "publicIPAllocationMethod": "[variables('publicIPAddressType')]",
+ "dnsSettings": {
+ "domainNameLabel": "[concat(parameters('dnsLabelPrefix'), '-', copyIndex())]"
+ }
+ }
+ },
+ {
+ "apiVersion": "2017-04-01",
+ "type": "Microsoft.Network/virtualNetworks",
+ "name": "[concat(variables('virtualNetworkName'), '-', copyIndex())]",
+ "location": "[resourceGroup().location]",
+ "copy": {
+ "name": "vnloop",
+ "count": "[parameters('nCopies')]"
+ },
+ "properties": {
+ "addressSpace": {
+ "addressPrefixes": [
+ "[variables('addressPrefix')]"
+ ]
+ },
+ "subnets": [
+ {
+ "name": "[concat(variables('subnetName'), '-', copyIndex())]",
+ "properties": {
+ "addressPrefix": "[variables('subnetPrefix')]"
+ }
+ }
+ ]
+ }
+ },
+ {
+ "apiVersion": "2017-04-01",
+ "type": "Microsoft.Network/networkInterfaces",
+ "name": "[concat(variables('nicName'), '-', copyIndex())]",
+ "location": "[resourceGroup().location]",
+ "copy": {
+ "name": "vnloop",
+ "count": "[parameters('nCopies')]"
+ },
+ "dependsOn": [
+ "[resourceId('Microsoft.Network/publicIPAddresses/', concat(variables('publicIPAddressName'), '-', copyIndex()))]",
+ "[resourceId('Microsoft.Network/virtualNetworks/', concat(variables('virtualNetworkName'), '-', copyIndex()))]"
+ ],
+ "properties": {
+ "ipConfigurations": [
+ {
+ "name": "[concat(ipconfig1), '-', copyIndex()]",
+ "properties": {
+ "privateIPAllocationMethod": "Dynamic",
+ "publicIPAddress": {
+ "id": "[resourceId('Microsoft.Network/publicIPAddresses',concat(variables('publicIPAddressName'), '-', copyIndex()))]"
+ },
+ "subnet": {
+ "id": "[variables('subnetRef')]"
+ }
+ }
+ }
+ ]
+ }
+ },
+ {
+ "apiVersion": "2017-03-30",
+ "type": "Microsoft.Compute/virtualMachines",
+ "name": "[variables('vmName')]",
+ "location": "[resourceGroup().location]",
+ "copy": {
+ "name": "vmloop",
+ "count": "[parameters('nCopies')]"
+ },
+ "dependsOn": [
+ "[resourceId('Microsoft.Storage/storageAccounts/', concat(variables('storageAccountName'), '-', copyIndex()))]",
+ "[resourceId('Microsoft.Network/networkInterfaces/', concat(variables('nicName'), '-', copyIndex()))]"
+ ],
+ "properties": {
+ "hardwareProfile": {
+ "vmSize": "[variables('vmSize')]"
+ },
+ "osProfile": {
+ "computerName": "[concat(variables('vmName'), '-', copyIndex())]",
+ "adminUsername": "[parameters('adminUsername')]",
+ "adminPassword": "[parameters('adminPassword')]"
+ },
+ "storageProfile": {
+ "imageReference": {
+ "publisher": "[variables('imagePublisher')]",
+ "offer": "[variables('imageOffer')]",
+ "sku": "[parameters('ubuntuOSVersion')]",
+ "version": "latest"
+ },
+ "osDisk": {
+ "createOption": "FromImage"
+ },
+ "dataDisks": [
+ {
+ "diskSizeGB": "128",
+ "lun": 0,
+ "createOption": "Empty"
+ }
+ ]
+ },
+ "networkProfile": {
+ "networkInterfaces": [
+ {
+ "id": "[resourceId('Microsoft.Network/networkInterfaces', concat(variables('nicName'), '-', copyIndex()))]"
+ }
+ ]
+ },
+ "diagnosticsProfile": {
+ "bootDiagnostics": {
+ "enabled": "true",
+ "storageUri": "[concat(reference(concat('Microsoft.Storage/storageAccounts/', concat(variables('storageAccountName'), '-', copyIndex())), '2016-01-01').primaryEndpoints.blob)]"
+ }
+ }
+ }
+ }
+ ],
+ "outputs": {
+ "adminUsername": "[parameters('adminUsername')]"
+ }
}