Forum Discussion
Deploy infrastructure with custom image
Hi,
currently im trying to deploy an IT-infrastructure but it is not working as I want.
I want to deploy 4 VMs based on the same custom image. (No Scale Set yet)
When I deploy 1 single VM based on that image, it works, but not when I deploy 4.
I may need some help here.
Here is the template for the 4 VM deployment incl rest of the infrastructure.
Everything is working but when the VMs are being deployed I read in the terminal "Failed" :(
"resources": [
{
"apiVersion": "2015-05-01-preview",
"location": "[resourceGroup().location]",
"name": "[variables('networkSecurityGroupName')]",
"type": "Microsoft.Network/networkSecurityGroups",
"properties": {
"securityRules": [
{
"name": "ssh_rule",
"properties": {
"access": "Allow",
"description": "Locks inbound down to ssh default port 22.",
"destinationAddressPrefix": "*",
"destinationPortRange": "22",
"direction": "Inbound",
"priority": 123,
"protocol": "Tcp",
"sourceAddressPrefix": "213.143.97.183",
"sourcePortRange": "*"
}
}
]
}
},
{
"apiVersion": "2015-06-15",
"location": "[resourceGroup().location]",
"name": "[parameters('storageAccountName')]",
"type": "Microsoft.Storage/storageAccounts",
"properties": {
"accountType": "[variables('storageAccountType')]"
}
},
{
"apiVersion": "2016-12-01",
"location": "[resourceGroup().location]",
"name": "[parameters('blobStorageAccountName')]",
"type": "Microsoft.Storage/storageAccounts",
"sku": {
"name": "[variables('blobStorageAccountType')]"
},
"kind": "BlobStorage",
"properties": {
"accessTier": "[variables('blobStorageAccessTier')]",
"encryption": {
"services": {
"blob": {
"enabled": "[variables('blobStorageEncryptionEnabled')]"
}
},
"keySource": "Microsoft.Storage"
},
"supportsHttpsTrafficOnly": "[variables('blobStorageHttpsTrafficOnlyEnabled')]"
}
},
{
"apiVersion": "2015-05-01-preview",
"location": "[resourceGroup().location]",
"name": "[variables('publicIPAddressName_Node1')]",
"type": "Microsoft.Network/publicIPAddresses",
"properties": {
"publicIPAllocationMethod": "[variables('publicIPAddressType')]",
"dnsSettings": {
"domainNameLabel": "[concat(parameters('dnsNameForPublicIP'), 'node1')]"
}
}
},
{
"apiVersion": "2015-05-01-preview",
"location": "[resourceGroup().location]",
"name": "[variables('publicIPAddressName_Node2')]",
"type": "Microsoft.Network/publicIPAddresses",
"properties": {
"publicIPAllocationMethod": "[variables('publicIPAddressType')]",
"dnsSettings": {
"domainNameLabel": "[concat(parameters('dnsNameForPublicIP'), 'node2')]"
}
}
},
{
"apiVersion": "2015-05-01-preview",
"location": "[resourceGroup().location]",
"name": "[variables('publicIPAddressName_Node3')]",
"type": "Microsoft.Network/publicIPAddresses",
"properties": {
"publicIPAllocationMethod": "[variables('publicIPAddressType')]",
"dnsSettings": {
"domainNameLabel": "[concat(parameters('dnsNameForPublicIP'), 'node3')]"
}
}
},
{
"apiVersion": "2015-05-01-preview",
"location": "[resourceGroup().location]",
"name": "[variables('publicIPAddressName_Node4')]",
"type": "Microsoft.Network/publicIPAddresses",
"properties": {
"publicIPAllocationMethod": "[variables('publicIPAddressType')]",
"dnsSettings": {
"domainNameLabel": "[concat(parameters('dnsNameForPublicIP'), 'node4')]"
}
}
},
{
"apiVersion": "2015-05-01-preview",
"location": "[resourceGroup().location]",
"name": "[variables('virtualNetworkName')]",
"type": "Microsoft.Network/virtualNetworks",
"dependsOn": [
"[concat('Microsoft.Network/networkSecurityGroups/', variables('networkSecurityGroupName'))]"
],
"properties": {
"addressSpace": {
"addressPrefixes": [
"[variables('addressPrefix')]"
]
},
"subnets": [
{
"name": "[variables('subnetName')]",
"properties": {
"addressPrefix": "[variables('subnetPrefix')]",
"networkSecurityGroup": {
"id": "[resourceId('Microsoft.Network/networkSecurityGroups', variables('networkSecurityGroupName'))]"
}
}
}
]
}
},
{
"apiVersion": "2015-05-01-preview",
"location": "[resourceGroup().location]",
"name": "[concat(variables('nicName'), 'Node1')]",
"type": "Microsoft.Network/networkInterfaces",
"dependsOn": [
"[concat('Microsoft.Network/publicIPAddresses/', variables('publicIPAddressName_Node1'))]",
"[concat('Microsoft.Network/virtualNetworks/', variables('virtualNetworkName'))]"
],
"properties": {
"ipConfigurations": [
{
"name": "ipconfig1",
"properties": {
"privateIPAllocationMethod": "Dynamic",
"publicIPAddress": {
"id": "[resourceId('Microsoft.Network/publicIPAddresses',variables('publicIPAddressName_Node1'))]"
},
"subnet": {
"id": "[variables('subnetRef')]"
}
}
}
]
}
},
{
"apiVersion": "2015-05-01-preview",
"location": "[resourceGroup().location]",
"name": "[concat(variables('nicName'), 'Node2')]",
"type": "Microsoft.Network/networkInterfaces",
"dependsOn": [
"[concat('Microsoft.Network/publicIPAddresses/', variables('publicIPAddressName_Node2'))]",
"[concat('Microsoft.Network/virtualNetworks/', variables('virtualNetworkName'))]"
],
"properties": {
"ipConfigurations": [
{
"name": "ipconfig1",
"properties": {
"privateIPAllocationMethod": "Dynamic",
"publicIPAddress": {
"id": "[resourceId('Microsoft.Network/publicIPAddresses',variables('publicIPAddressName_Node2'))]"
},
"subnet": {
"id": "[variables('subnetRef')]"
}
}
}
]
}
},
{
"apiVersion": "2015-05-01-preview",
"location": "[resourceGroup().location]",
"name": "[concat(variables('nicName'), 'Node3')]",
"type": "Microsoft.Network/networkInterfaces",
"dependsOn": [
"[concat('Microsoft.Network/publicIPAddresses/', variables('publicIPAddressName_Node3'))]",
"[concat('Microsoft.Network/virtualNetworks/', variables('virtualNetworkName'))]"
],
"properties": {
"ipConfigurations": [
{
"name": "ipconfig1",
"properties": {
"privateIPAllocationMethod": "Dynamic",
"publicIPAddress": {
"id": "[resourceId('Microsoft.Network/publicIPAddresses',variables('publicIPAddressName_Node3'))]"
},
"subnet": {
"id": "[variables('subnetRef')]"
}
}
}
]
}
},
{
"apiVersion": "2015-05-01-preview",
"location": "[resourceGroup().location]",
"name": "[concat(variables('nicName'), 'Node4')]",
"type": "Microsoft.Network/networkInterfaces",
"dependsOn": [
"[concat('Microsoft.Network/publicIPAddresses/', variables('publicIPAddressName_Node4'))]",
"[concat('Microsoft.Network/virtualNetworks/', variables('virtualNetworkName'))]"
],
"properties": {
"ipConfigurations": [
{
"name": "ipconfig1",
"properties": {
"privateIPAllocationMethod": "Dynamic",
"publicIPAddress": {
"id": "[resourceId('Microsoft.Network/publicIPAddresses',variables('publicIPAddressName_Node4'))]"
},
"subnet": {
"id": "[variables('subnetRef')]"
}
}
}
]
}
},
{
"apiVersion": "2015-05-01-preview",
"location": "[resourceGroup().location]",
"name": "[concat(variables('vmName'), 'Node1')]",
"type": "Microsoft.Compute/virtualMachines",
"dependsOn": [
"[concat('Microsoft.Storage/storageAccounts/', parameters('storageAccountName'))]",
"[concat('Microsoft.Network/networkInterfaces/', variables('nicName'), 'Node1')]"
],
"properties": {
"hardwareProfile": {
"vmSize": "[parameters('vmSizeNode1')]"
},
"osProfile": {
"computerName": "[concat(variables('vmName'), 'Node1')]",
"adminUsername": "[variables('adminUsername')]",
"linuxConfiguration": {
"disablePasswordAuthentication": "true",
"ssh": {
"publicKeys": [
{
"path": "[concat('/home/', variables('adminUsername'), '/.ssh/authorized_keys')]",
"keyData": "[parameters('adminPublicKey')]"
}
]
}
}
},
"storageProfile": {
"imageReference": {
"id": "/subscriptions/******/resourceGroups/***-resource-group/providers/Microsoft.Compute/images/******"
},
"osDisk": {
"createOption": "fromImage",
"managedDisk": {
"storageAccountType": "Premium_LRS"
}
}
},
"networkProfile": {
"networkInterfaces": [
{
"id": "[resourceId('Microsoft.Network/networkInterfaces',concat(variables('nicName'), 'Node1'))]"
}
]
}
}
},
{
"apiVersion": "2015-05-01-preview",
"location": "[resourceGroup().location]",
"name": "[concat(variables('vmName'), 'Node2')]",
"type": "Microsoft.Compute/virtualMachines",
"dependsOn": [
"[concat('Microsoft.Storage/storageAccounts/', parameters('storageAccountName'))]",
"[concat('Microsoft.Network/networkInterfaces/', variables('nicName'), 'Node2')]"
],
"properties": {
"hardwareProfile": {
"vmSize": "[parameters('vmSizeNode2')]"
},
"osProfile": {
"computerName": "[concat(variables('vmName'), 'Node2')]",
"adminUsername": "[variables('adminUsername')]",
"linuxConfiguration": {
"disablePasswordAuthentication": "true",
"ssh": {
"publicKeys": [
{
"path": "[concat('/home/', variables('adminUsername'), '/.ssh/authorized_keys')]",
"keyData": "[parameters('adminPublicKey')]"
}
]
}
}
},
"storageProfile": {
"imageReference": {
"id": "/subscriptions/******/resourceGroups/***-resource-group/providers/Microsoft.Compute/images/******"
},
"osDisk": {
"createOption": "fromImage",
"managedDisk": {
"storageAccountType": "Premium_LRS"
}
}
},
"networkProfile": {
"networkInterfaces": [
{
"id": "[resourceId('Microsoft.Network/networkInterfaces',concat(variables('nicName'), 'Node2'))]"
}
]
}
}
},
{
"apiVersion": "2015-05-01-preview",
"location": "[resourceGroup().location]",
"name": "[concat(variables('vmName'), 'Node3')]",
"type": "Microsoft.Compute/virtualMachines",
"dependsOn": [
"[concat('Microsoft.Storage/storageAccounts/', parameters('storageAccountName'))]",
"[concat('Microsoft.Network/networkInterfaces/', variables('nicName'), 'Node3')]"
],
"properties": {
"hardwareProfile": {
"vmSize": "[parameters('vmSizeNode3')]"
},
"osProfile": {
"computerName": "[concat(variables('vmName'), 'Node3')]",
"adminUsername": "[variables('adminUsername')]",
"linuxConfiguration": {
"disablePasswordAuthentication": "true",
"ssh": {
"publicKeys": [
{
"path": "[concat('/home/', variables('adminUsername'), '/.ssh/authorized_keys')]",
"keyData": "[parameters('adminPublicKey')]"
}
]
}
}
},
"storageProfile": {
"imageReference": {
"id": "/subscriptions/******/resourceGroups/***-resource-group/providers/Microsoft.Compute/images/******"
},
"osDisk": {
"createOption": "fromImage",
"managedDisk": {
"storageAccountType": "Premium_LRS"
}
}
},
"networkProfile": {
"networkInterfaces": [
{
"id": "[resourceId('Microsoft.Network/networkInterfaces',concat(variables('nicName'), 'Node3'))]"
}
]
}
}
},
{
"apiVersion": "2015-05-01-preview",
"location": "[resourceGroup().location]",
"name": "[concat(variables('vmName'), 'Node4')]",
"type": "Microsoft.Compute/virtualMachines",
"dependsOn": [
"[concat('Microsoft.Storage/storageAccounts/', parameters('storageAccountName'))]",
"[concat('Microsoft.Network/networkInterfaces/', variables('nicName'), 'Node4')]"
],
"properties": {
"hardwareProfile": {
"vmSize": "[parameters('vmSizeNode4')]"
},
"osProfile": {
"computerName": "[concat(variables('vmName'), 'Node4')]",
"adminUsername": "[variables('adminUsername')]",
"linuxConfiguration": {
"disablePasswordAuthentication": "true",
"ssh": {
"publicKeys": [
{
"path": "[concat('/home/', variables('adminUsername'), '/.ssh/authorized_keys')]",
"keyData": "[parameters('adminPublicKey')]"
}
]
}
}
},
"storageProfile": {
"imageReference": {
"id": "/subscriptions/******/resourceGroups/****-resource-group/providers/Microsoft.Compute/images/******"
},
"osDisk": {
"createOption": "fromImage",
"managedDisk": {
"storageAccountType": "Premium_LRS"
}
}
},
"networkProfile": {
"networkInterfaces": [
{
"id": "[resourceId('Microsoft.Network/networkInterfaces',concat(variables('nicName'), 'Node4'))]"
}
]
}
}
},
{
"apiVersion": "2015-04-08",
"kind": "[variables('dbKind')]",
"location": "northeurope",
"name": "[variables('cosmosDbName')]",
"type": "Microsoft.DocumentDb/databaseAccounts",
"properties": {
"databaseAccountOfferType": "Standard",
"locations": [
{
"failoverPriority": 0,
"id": "[concat(variables('cosmosDbName'), '-', resourceGroup().location)]",
"locationName": "North Europe"
}
],
"tags": {
"defaultExperience": "[variables('cosmosDBExperience')]"
}
}
}
]
Here is the resource template when I deploy only 1 VM using a custom image:
"resources": [
{
"apiVersion": "2015-05-01-preview",
"location": "[resourceGroup().location]",
"name": "[variables('networkSecurityGroupName')]",
"type": "Microsoft.Network/networkSecurityGroups",
"properties": {
"securityRules": [
{
"name": "ssh_rule",
"properties": {
"access": "Allow",
"description": "Locks inbound down to ssh default port 22.",
"destinationAddressPrefix": "*",
"destinationPortRange": "22",
"direction": "Inbound",
"priority": 123,
"protocol": "Tcp",
"sourceAddressPrefix": "213.143.97.183",
"sourcePortRange": "*"
}
}
]
}
},
{
"apiVersion": "2015-06-15",
"location": "[resourceGroup().location]",
"name": "[parameters('storageAccountName')]",
"type": "Microsoft.Storage/storageAccounts",
"properties": {
"accountType": "[variables('storageAccountType')]"
}
},
{
"apiVersion": "2015-05-01-preview",
"location": "[resourceGroup().location]",
"name": "[variables('publicIPAddressName_Node1')]",
"type": "Microsoft.Network/publicIPAddresses",
"properties": {
"publicIPAllocationMethod": "[variables('publicIPAddressType')]",
"dnsSettings": {
"domainNameLabel": "[concat(parameters('dnsNameForPublicIP'), 'node1')]"
}
}
},
{
"apiVersion": "2015-05-01-preview",
"location": "[resourceGroup().location]",
"name": "[variables('virtualNetworkName')]",
"type": "Microsoft.Network/virtualNetworks",
"dependsOn": [
"[concat('Microsoft.Network/networkSecurityGroups/', variables('networkSecurityGroupName'))]"
],
"properties": {
"addressSpace": {
"addressPrefixes": [
"[variables('addressPrefix')]"
]
},
"subnets": [
{
"name": "[variables('subnetName')]",
"properties": {
"addressPrefix": "[variables('subnetPrefix')]",
"networkSecurityGroup": {
"id": "[resourceId('Microsoft.Network/networkSecurityGroups', variables('networkSecurityGroupName'))]"
}
}
}
]
}
},
{
"apiVersion": "2015-05-01-preview",
"location": "[resourceGroup().location]",
"name": "[concat(variables('nicName'), 'Node1')]",
"type": "Microsoft.Network/networkInterfaces",
"dependsOn": [
"[concat('Microsoft.Network/publicIPAddresses/', variables('publicIPAddressName_Node1'))]",
"[concat('Microsoft.Network/virtualNetworks/', variables('virtualNetworkName'))]"
],
"properties": {
"ipConfigurations": [
{
"name": "ipconfig1",
"properties": {
"privateIPAllocationMethod": "Dynamic",
"publicIPAddress": {
"id": "[resourceId('Microsoft.Network/publicIPAddresses',variables('publicIPAddressName_Node1'))]"
},
"subnet": {
"id": "[variables('subnetRef')]"
}
}
}
]
}
},
{
"apiVersion": "2016-04-30-preview",
"location": "[resourceGroup().location]",
"name": "[concat(variables('vmName'), 'Node1')]",
"type": "Microsoft.Compute/virtualMachines",
"dependsOn": [
"[concat('Microsoft.Storage/storageAccounts/', parameters('storageAccountName'))]",
"[concat('Microsoft.Network/networkInterfaces/', variables('nicName'), 'Node1')]"
],
"properties": {
"hardwareProfile": {
"vmSize": "[parameters('vmSizeNode1')]"
},
"osProfile": {
"computerName": "[concat(variables('vmName'), 'Node1')]",
"adminUsername": "[variables('adminUsername')]",
"linuxConfiguration": {
"disablePasswordAuthentication": "true",
"ssh": {
"publicKeys": [
{
"path": "[concat('/home/', variables('adminUsername'), '/.ssh/authorized_keys')]",
"keyData": "[parameters('adminPublicKey')]"
}
]
}
}
},
"storageProfile": {
"imageReference": {
"id": "/subscriptions/******/resourceGroups/****-resource-group/providers/Microsoft.Compute/images/******"
},
"osDisk": {
"createOption": "fromImage",
"managedDisk": {
"storageAccountType": "Premium_LRS"
}
}
},
"networkProfile": {
"networkInterfaces": [
{
"id": "[resourceId('Microsoft.Network/networkInterfaces',concat(variables('nicName'), 'Node1'))]"
}
]
}
}
}
]
What am I missing? Why is the deployment of 4 VMs not working?
Thanks in advance
6 Replies
- Kent GaardmandIron Contributor
I my self have not attempted to deploy multiple servers using a custom image, let alone as managed disk. I am in the process of trying to recreate this in my lab, hopefully i will have some results monday.
Until then maybe someone with more experience may come along.
Perhaps you could send me the the entire template files in a private message.
Also have you considered using a loop for the deployment of the vm's ?
- Moritz NossekCopper Contributor
Loop sounds interesting. Because all the vms, except the size, will be kind of the same.
Thanks for having a look!
I try to send you the whole template in a private message.
- Kent GaardmandIron Contributor
Also try and use Resource ID instread of concat for you dependson.
Concat just combines the input to a single string.
ResourceID insures the subscription and resource group is added:
so this:
"[resourceId('Microsoft.Network/networkInterfaces/', parameters('networkInterfaceName1'))]"
would actualy be this:
/subscriptions/****************/resourceGroups/RG3/Microsoft.Network/networkInterfaces/<parameters('networkInterfaceName1')>