如何设置虚拟机映像详细信息,例如发布者,报价,SKU和版本

时间:2019-08-07 13:02:07

标签: azure gitlab-ci azure-virtual-machine arm-template terraform-provider-azure

我有一个Terraform脚本,它根据来自Azure市场的图像在Azure上创建虚拟机: https://azuremarketplace.microsoft.com/en-us/marketplace/apps/gitlab.gitlab-ce

但是我不知道如何识别要放在这些字段中的值:

  • 发布者
  • 提供
  • sku
  • 版本

这是Terraform脚本的一个片段

resource "azurerm_virtual_machine" "gitlab_vm" {
  # ... other configuration

  storage_image_reference {
    publisher = "GitLab"
    offer     = "GitLab Community Edition"
    # sku       = "???"
    version   = "latest"
  }

  # ... other configuration
}

如果我使用terraform plan和例如publisher = "GitLabXXX"(不存在的东西),那么Terraform不会引发任何错误。一段时间后,当我运行terraform apply时,出现错误,并且未创建VM资源(尽管所有其他资源,例如网络资源也已创建)。

这类似于Azure ARM模板:

"imageReference": {
    "publisher": "[variables('pubName')]",
    "offer": "[variables('offerName')]",
    "sku" : "[parameters('skuName')]",
    "version":"latest"
},

我有一些虚拟机已经启动并且正在运行,并且该虚拟机使用我在互联网上找到的类似Terraform配置(请参见下面的Ubuntu示例),但是将信息从Azure Marketplace网页转换为脚本的规则是什么?

  storage_image_reference {
    publisher = "Canonical"
    offer     = "UbuntuServer"
    sku       = "16.04-LTS"
    version   = "latest"
  }

1 个答案:

答案 0 :(得分:1)

也许有一种更有效的方法来执行此操作,但是我通常使用Azure CLI来获取发布者,商品,SKU和版本。首先,如果您执行以下操作:

  

az vm映像列表-提供GitLab -o表--all

您将返回一个列表,其中包含商品,发布者,SKU,URN和版本。在您的情况下,对于gitlab-ce应该是这样的:

  • 发布者:gitlab
  • 提供:gitlab-ce
  • SKU:gitlab-ce
  • 版本:1.0.4

我敢肯定,azurerm提供程序只是使用这些值调用ARM,因此它应该与您从CLI中获得的值匹配,尽管如果我弄错了我当然可以对此进行更正。

您还需要包含一个plan block。可以通过CLI使用以下内容检索其详细信息:

  

az vm image show --location westus --urn gitlab:gitlab-ce:gitlab-ce:1.0.4 -o json

所以您的计划块看起来像这样:

plan {
  name = "gitlab-ce" 
  publisher = "gitlab"
  product = "gitlab-ce"
}