Proposed Pull Request Change

title description author ms.service ms.subservice ms.topic ms.date ms.author ms.reviewer ms.custom
Specify Marketplace purchase plan information using Azure PowerShell Learn how to specify Azure Marketplace purchase plan details when creating images in an Azure Compute Gallery (formerly known as Shared Image Gallery). sandeepraichura azure-virtual-machines gallery how-to 12/5/2022 saraic mattmcinnes devx-track-azurepowershell
📄 Document Links
GitHub View on GitHub Microsoft Learn View on Microsoft Learn
⚠ Content Truncation Detected
The generated rewrite appears to be incomplete.
Original lines: -
Output lines: -
Ratio: -
Raw New Markdown
Generating updated version of doc...
Rendered New Markdown
Generating updated version of doc...
+0 -0
+0 -0
--- title: Specify Marketplace purchase plan information using Azure PowerShell description: Learn how to specify Azure Marketplace purchase plan details when creating images in an Azure Compute Gallery (formerly known as Shared Image Gallery). author: sandeepraichura ms.service: azure-virtual-machines ms.subservice: gallery ms.topic: how-to ms.date: 12/5/2022 ms.author: saraic ms.reviewer: mattmcinnes ms.custom: devx-track-azurepowershell # Customer intent: As an IT administrator, I want to specify Azure Marketplace purchase plan details when creating images in a shared gallery, so that I can ensure compliance and streamline the deployment of virtual machines. --- # Supply Azure Marketplace purchase plan information when creating images **Applies to:** :heavy_check_mark: Linux VMs :heavy_check_mark: Windows VMs :heavy_check_mark: Flexible scale sets :heavy_check_mark: Uniform scale sets If you're creating an image in a shared gallery using an Azure Marketplace image source, you'll likely need to track purchase plan information. This article shows you how to find purchase plan information for a VM when creating an image definition. We also cover using this information to simplify supplying the purchase plan information when creating a VM for an image. For more information about finding and using Marketplace images, see [Find and use Azure Marketplace images](./windows/cli-ps-findimage.md). ## Get the source VM information If you still have the original VM, you can get the plan name, publisher, and product information from it using Get-AzVM. This example gets a VM named *myVM* in the *myResourceGroup* resource group and then displays the purchase plan information for the VM. ```azurepowershell-interactive $vm = Get-azvm ` -ResourceGroupName myResourceGroup ` -Name myVM $vm.Plan ``` ## Create the image definition Get the gallery you want to use to store the image. You can list all of the galleries first. ```azurepowershell-interactive Get-AzResource -ResourceType Microsoft.Compute/galleries | Format-Table ``` Then create variables for the gallery you want to use. In this example, we're creating a variable named `$gallery` for *myGallery* in the *myGalleryRG* resource group. ```azurepowershell-interactive $gallery = Get-AzGallery ` -Name myGallery ` -ResourceGroupName myGalleryRG ``` Create the image definition, using the `-PurchasePlanPublisher`, `-PurchasePlanProduct`, and `-PurchasePlanName` parameters. ```azurepowershell-interactive $imageDefinition = New-AzGalleryImageDefinition ` -GalleryName $gallery.Name ` -ResourceGroupName $gallery.ResourceGroupName ` -Location $gallery.Location ` -Name 'myImageDefinition' ` -OsState specialized ` -OsType Linux ` -Publisher 'myPublisher' ` -Offer 'myOffer' ` -Sku 'mySKU' ` -PurchasePlanPublisher $vm.Plan.Publisher ` -PurchasePlanProduct $vm.Plan.Product ` -PurchasePlanName $vm.Plan.Name ``` Then create your [image version](image-version.md) using [New-AzGalleryImageVersion](/powershell/module/az.compute/new-azgalleryimageversion). ## Create the VM When you go to create a VM from the image, you can use the information from the image definition to pass in the publisher information using [Set-AzVMPlan](/powershell/module/az.compute/set-azvmplan). ```azurepowershell-interactive # Create some variables for the new VM. $resourceGroup = "mySIGPubVM" $location = "West Central US" $vmName = "mySIGPubVM" # Create a resource group New-AzResourceGroup -Name $resourceGroup -Location $location # Create the network resources. $subnetConfig = New-AzVirtualNetworkSubnetConfig ` -Name mySubnet ` -AddressPrefix 192.168.1.0/24 $vnet = New-AzVirtualNetwork ` -ResourceGroupName $resourceGroup ` -Location $location ` -Name MYvNET ` -AddressPrefix 192.168.0.0/16 ` -Subnet $subnetConfig $pip = New-AzPublicIpAddress ` -ResourceGroupName $resourceGroup ` -Location $location ` -Name "mypublicdns$(Get-Random)" ` -AllocationMethod Static ` -IdleTimeoutInMinutes 4 $nsgRuleRDP = New-AzNetworkSecurityRuleConfig ` -Name myNetworkSecurityGroupRuleRDP ` -Protocol Tcp ` -Direction Inbound ` -Priority 1000 ` -SourceAddressPrefix * ` -SourcePortRange * ` -DestinationAddressPrefix * ` -DestinationPortRange 3389 -Access Deny $nsg = New-AzNetworkSecurityGroup ` -ResourceGroupName $resourceGroup ` -Location $location ` -Name myNetworkSecurityGroup ` -SecurityRules $nsgRuleRDP $nic = New-AzNetworkInterface ` -Name $vmName ` -ResourceGroupName $resourceGroup ` -Location $location ` -SubnetId $vnet.Subnets[0].Id ` -PublicIpAddressId $pip.Id ` -NetworkSecurityGroupId $nsg.Id # Create a virtual machine configuration using Set-AzVMSourceImage -Id $imageDefinition.Id to use the latest available image version. Set-AZVMPlan is used to pass the plan information in for the VM. $vmConfig = New-AzVMConfig ` -VMName $vmName ` -VMSize Standard_D1_v2 | ` Set-AzVMSourceImage -Id $imageDefinition.Id | ` Set-AzVMPlan ` -Publisher $imageDefinition.PurchasePlan.Publisher ` -Product $imageDefinition.PurchasePlan.Product ` -Name $imageDefinition.PurchasePlan.Name | ` Add-AzVMNetworkInterface -Id $nic.Id # Create the virtual machine New-AzVM ` -ResourceGroupName $resourceGroup ` -Location $location ` -VM $vmConfig ``` ``` ARM Template # Create VM using Plan information through JSON { "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "adminUsername": { "type": "string", "metadata": { "description": "Username for the Virtual Machine." } }, "adminPassword": { "type": "securestring", "metadata": { "description": "Password for the Virtual Machine." } }, "location": { "type": "string", "defaultValue": "[resourceGroup().location]", "metadata": { "description": "Location for all resources." } } }, "variables": { "nicName": "myVMNic", "addressPrefix": "10.0.0.0/16", "subnetName": "Subnet", "subnetPrefix": "10.0.0.0/24", "subnetRef": "[resourceId('Microsoft.Network/virtualNetworks/subnets', variables('virtualNetworkName'), variables('subnetName'))]", "vmName": "perflabwin10", "virtualNetworkName": "MyVNET", "publicIPAddressName": "myPublicIP", "dnsNameForPublicIP": "[uniqueString(resourceGroup().id)]", "networkSecurityGroupName": "default-NSG" }, "resources": [ { "apiVersion": "2017-06-01", "type": "Microsoft.Network/publicIPAddresses", "name": "[variables('publicIPAddressName')]", "location": "[parameters('location')]", "properties": { "publicIPAllocationMethod": "Dynamic", "dnsSettings": { "domainNameLabel": "[variables('dnsNameForPublicIP')]" } } }, { "comments": "Default Network Security Group for template", "type": "Microsoft.Network/networkSecurityGroups", "apiVersion": "2019-08-01", "name": "[variables('networkSecurityGroupName')]", "location": "[parameters('location')]", "properties": { "securityRules": [ { "name": "default-allow-3389", "properties": { "priority": 1000, "access": "Allow", "direction": "Inbound", "destinationPortRange": "3389", "protocol": "Tcp", "sourceAddressPrefix": "*", "sourcePortRange": "*", "destinationAddressPrefix": "*" } } ] } }, { "apiVersion": "2018-04-01", "type": "Microsoft.Network/virtualNetworks", "name": "[variables('virtualNetworkName')]", "location": "[parameters('location')]", "dependsOn": [ "[resourceId('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": "2018-04-01", "type": "Microsoft.Network/networkInterfaces", "name": "[variables('nicName')]", "location": "[parameters('location')]", "dependsOn": [ "[variables('publicIPAddressName')]", "[variables('virtualNetworkName')]" ], "properties": { "ipConfigurations": [ { "name": "ipconfig1", "properties": { "privateIPAllocationMethod": "Dynamic", "publicIPAddress": { "id": "[resourceId('Microsoft.Network/publicIPAddresses',variables('publicIPAddressName'))]" }, "subnet": { "id": "[variables('subnetRef')]" } } } ] } }, { "apiVersion": "2018-04-01", "type": "Microsoft.Compute/virtualMachines", "name": "[variables('vmName')]", "location": "[parameters('location')]", "dependsOn": [ "[variables('nicName')]" ], "plan": { "name": "xxxx", "publisher": "xxxx", "product": "xxxx" }, "properties": { "hardwareProfile": { "vmSize": "Standard_D4s_v3" }, "osProfile": { "computerName": "[variables('vmName')]", "adminUsername": "[parameters('adminUsername')]", "adminPassword": "[parameters('adminPassword')]" }, "storageProfile": { "imageReference": { "id": "<Provide Image URI>" }, "osDisk": { "createOption": "FromImage" } }, "networkProfile": { "networkInterfaces": [ { "id": "[resourceId('Microsoft.Network/networkInterfaces',variables('nicName'))]" } ] } } } ] } ```` ## Next steps For more information about finding and using Marketplace images, see [Find and use Azure Marketplace images](./windows/cli-ps-findimage.md).
Success! Branch created successfully. Create Pull Request on GitHub
Error: