通过 C# 从市场图像提升 Azure VM

Raise Azure VM from marketplace image via C#

无法以编程方式从 marketplace image 提升 azure VM。

代码:

var linuxVM = await _azure.VirtualMachines.Define(linuxVmName)
          .WithRegion(Region)
          .WithExistingResourceGroup(rgName)
          .WithNewPrimaryNetwork("10.0.0.0/28")
          .WithPrimaryPrivateIPAddressDynamic()
          .WithoutPrimaryPublicIPAddress()
          .WithSpecificLinuxImageVersion(new ImageReference())
          .WithRootUsername(userName)
          .WithRootPassword(password)
          .WithSize(VirtualMachineSizeTypes.StandardNC6sV3)
          .WithPlan(new PurchasePlan("nvidia", "ngc-base-version-20-10-1", "ngc_azure_17_11"))
          .CreateAsync();

在 Azure 中,我为给定图像启用了“想要以编程方式部署?开始吧”(如 here 所述)。

选择图像的方法有多种选择,不确定应该使用哪种方法以及使用哪些参数。尝试了几种组合,但都返回了各种错误消息。

没有找到更详细的代码示例this(其中没有说明如何使用来自市场的图像)。


编辑:

上面的代码returns这个异常:

Microsoft.Rest.Azure.CloudException: 'This resource was created without a plan. A new plan cannot be associated with an update.'

使用更多填充参数的另一次尝试导致相同的异常:

.WithSpecificLinuxImageVersion(new ImageReference(new ImageReferenceInner(
                          publisher: "nvidia",
                          offer: "ngc_azure_17_11",
                          sku: "ngc-base-version-20-10-1"
                          )))

缺少的参数是图像的版本。提升图像的代码如下所示:

    var vm = await _azure.VirtualMachines.Define(linuxVmName)
          .WithRegion(_region)
          .WithExistingResourceGroup(_rgName)
          .WithNewPrimaryNetwork("10.0.0.0/28")
          .WithPrimaryPrivateIPAddressDynamic()
          .WithoutPrimaryPublicIPAddress()
          .WithSpecificLinuxImageVersion(new ImageReference(new ImageReferenceInner(
              publisher: "nvidia",
              offer: "ngc_azure_17_11",
              sku: "ngc-base-version-20-10-1",
              version: "20.10.1"
              )))
          .WithRootUsername(userName)
          .WithRootPassword(password)
          .WithSize(VirtualMachineSizeTypes.StandardNC6sV3)
          .WithPlan(new PurchasePlan("nvidia", "ngc-base-version-20-10-1", "ngc_azure_17_11"))
          .CreateAsync();

可以在 UI 中找到版本:

也可以通过 CLI 获取图像的所有详细信息:

Get-AzVMImageOffer -Location "West Europe" -PublisherName nvidia

可以找到更全面的指南here