如何获取Azure VM镜像的Plan与Marketplace详情?部署Suse Manager 4.3报错
问题背景
尝试使用Terraform Provider部署Suse Manager 4.3 Azure虚拟机时,出现ResourcePurchaseValidationFailed错误,提示指定的payg plan未找到,怀疑是Plan或Marketplace协议配置有误。
Terraform代码片段
resource "azurerm_marketplace_agreement" "suse_agree" { publisher = "Suseirelandltd1692213356027" offer = "manager-server-4-3-ltd-image" plan = "payg" } resource "azurerm_linux_virtual_machine" "vm4susemanager" { name = "vm01" location = "westeurope" resource_group_name = "my-rg" # .. source_image_reference { publisher = "Suseirelandltd1692213356027" offer = "manager-server-4-3-ltd-image" sku = "gen2" #version = "2023.11.27" version = "latest" } plan { name = "payg" publisher = "Suseirelandltd1692213356027" product = "manager-server-4-3-ltd-image" } depends_on = [ azurerm_marketplace_agreement.suse_agree ] }
错误信息
│ Error: creating Linux Virtual Machine (Subscription: "XXX"
│ Resource Group Name: "XXX"
│ Virtual Machine Name: "XXX"): compute.VirtualMachinesClient#CreateOrUpdate: Failure sending request: StatusCode=400 -- Original Error: Code="ResourcePurchaseValidationFailed" Message="User failed validation to purchase resources. Error message: 'The plan with ID 'payg' was not found. Try one of these: 1- Make sure the plan name is written correctly. 2- If this plan was recently created, allow up to 30 minutes for it to be available. 3- The subscription you're using is associated with Market IN which doesn't support this plan. Try using a different subscription. 4- The subscription/tenant you're using isn't part of the plan's private audience. Ask the offer publisher to add your subscription/tenant to the plan's private audience. subscription ID: XXX. Publisher ID: 'suseirelandltd1692213356027', Offer ID: 'manager-server-4-3-ltd-image', Plan ID: 'payg', Correlation ID: XXX'.'"
已尝试的排查命令(Az PowerShell)
$pubName="Suseirelandltd1692213356027" $locName="westeurope" $offerName = "manager-server-4-3-ltd-image" $skuName="gen2" Get-AzVMImageOffer -Location $locName -PublisherName $pubName | Select Offer Get-AzVMImageSku -Location $locName -PublisherName $pubName -Offer $offerName | Select Skus Get-AzVMImage -Location $locName -PublisherName $pubName -Offer $offerName -Sku $skuName | Select Version Get-AzMarketplaceTerms -Publisher "suseirelandltd1692213356027" -Product "manager-server-4-3-ltd-image" -Name "payg"
解决步骤
1. 确认镜像的正确Plan信息
错误核心是指定的payg plan不存在,先通过以下步骤确认目标区域的实际plan名称:
- 执行PowerShell命令获取该offer下的所有可用plan:
$pubName="Suseirelandltd1692213356027" $locName="westeurope" $offerName = "manager-server-4-3-ltd-image" Get-AzMarketplacePlan -Publisher $pubName -Offer $offerName -Location $locName - 若命令返回空,需排查:
- 该镜像在
westeurope区域无可用plan,更换其他区域尝试; - 你的订阅不在该镜像的私有访问列表中,联系Suse添加你的订阅ID;
- 镜像/plan刚创建,等待30分钟后重试。
- 该镜像在
2. 修正Terraform配置
根据获取到的正确plan名称,同步修改两处配置:
- 更新
azurerm_marketplace_agreement的plan参数; - 更新
azurerm_linux_virtual_machine中plan块的name参数; - 确保
source_image_reference中的sku与该plan对应的SKU一致(可通过Get-AzVMImageSku命令确认)。
示例修正后的配置(需替换为实际获取到的plan和SKU值):
resource "azurerm_marketplace_agreement" "suse_agree" { publisher = "Suseirelandltd1692213356027" offer = "manager-server-4-3-ltd-image" plan = "实际正确的plan名称" } resource "azurerm_linux_virtual_machine" "vm4susemanager" { # ... 其他配置不变 source_image_reference { publisher = "Suseirelandltd1692213356027" offer = "manager-server-4-3-ltd-image" sku = "实际对应的SKU" version = "latest" } plan { name = "实际正确的plan名称" publisher = "Suseirelandltd1692213356027" product = "manager-server-4-3-ltd-image" } depends_on = [azurerm_marketplace_agreement.suse_agree] }
3. 验证协议接受状态
- 执行
Get-AzMarketplaceTerms命令时,确保参数完全匹配,若返回错误说明协议未正确接受,可手动在Azure门户搜索该镜像,完成协议接受后再通过Terraform部署; - 确保
depends_on正确关联协议资源,避免VM创建时协议还未生效。
4. 检查订阅兼容性
- 若你的订阅关联印度区域市场(Market IN),确认该镜像是否支持该区域市场;
- 尝试使用其他订阅测试,排除订阅权限问题。
内容的提问来源于stack exchange,提问作者RSW

