Today I encountered an error I was unfamiliar with ;
New-AzureRmResourceGroupDeployment : 14:18:22 – Creating a virtual machine from Marketplace image requires Plan information in the request. OS disk name is osdisk.
After searching a bit, I encountered various posts regarding powershell deployment. Though, as I was using ARM templates (JSON), it was apparent that there is a difference in deploying regular OS images (like Windows, Ubuntu, …) and marketplace items like (Kemp, Netscaler, Barracuda, CheckPoint, …). The latter will require an additional parameter ; “plan”.
Let’s take a look at the following code sniplet…
{
"apiVersion": "2015-06-15",
"type": "Microsoft.Compute/virtualMachines",
"name": "[concat(variables('node1XVirtualMachineName'), copyindex(1))]",
"plan": "[variables('node1XimagePlan')]",
"copy": {
"name": "virtualMachineLoop",
"count": "[variables('node1XCount')]"
},
"location": "[resourceGroup().location]",
"tags": {
"displayName": "VirtualMachines"
},
"dependsOn": [
"[concat('Microsoft.Storage/storageAccounts/', variables('vhdStorageName'))]",
"nicLoop",
"[concat('Microsoft.Compute/availabilitySets/', variables('availabilitySet1XName'))]"
],
"properties": {
"availabilitySet": {
"id": "[resourceId('Microsoft.Compute/availabilitySets', variables('availabilitySet1XName'))]"
},
"hardwareProfile": {
"vmSize": "[variables('node1XSize')]"
},
"osProfile": {
"computerName": "[concat(variables('node1XVirtualMachineName'), copyIndex())]",
"adminUsername": "[variables('node1XAdminUsername')]",
"adminPassword": "[variables('node1XAdminPassword')]"
},
"storageProfile": {
"imageReference": "[variables('node1XimageReference')]",
"osDisk": {
"name": "osdisk",
"vhd": {
"uri": "[concat('http://', variables('vhdStorageName'), '.blob.core.windows.net/vhds/', 'osdisk', copyindex(), '.vhd')]"
},
"caching": "ReadWrite",
"createOption": "FromImage"
}
},
"networkProfile": {
"networkInterfaces": [
{
"id": "[resourceId('Microsoft.Network/networkInterfaces', concat(variables('networkInterface1XNamePrefix'), copyindex()))]"
}
]
},
"diagnosticsProfile": {
"bootDiagnostics": {
"enabled": true,
"storageUri": "[concat('http://', variables('vhdStorageName'), '.blob.core.windows.net')]"
}
}
}
}
In a regular deployment we would only need line 32. When working with marketplace items we’ll need to add the code for line 5. What’s the content of those two parameters? Let’s check the parameters section…
"node1XimageReference": {
"publisher": "[variables('node1XimagePublisher')]",
"offer": "[variables('node1XimageOffer')]",
"sku": "[variables('node1XimageSku')]",
"version": "[variables('node1XimageVersion')]"
},
"node1XimagePlan": {
"name": "[variables('node1XimageSku')]",
"product": "[variables('node1XimageOffer')]",
"publisher": "[variables('node1XimagePublisher')]"
},
The documentation on this is quite scarce… Though the name for the plan isn’t something you can choose yourself. This is the SKU of the marketplace item! I hope this helped, as it got me distracted from my endgoal for a bit. 🙂