使用Terraform v0.12.9,azurerm提供程序v1.36.1
场景:
对于上述每个步骤,您都提供了计划信息数据。否则,您将无法从该映像创建VM,因为使用市场映像会产生额外的费用。
现在,您希望其他团队能够通过Terraform Automation使用“共享图像库”中的图像。
如何在不进行硬编码的情况下从共享图像中获取计划信息?
好吧,我想只使用以下数据源检索数据:
data "azurerm_shared_image" "image" {
name = var.image_name
gallery_name = var.gallery_name
resource_group_name = var.rsg_name
}
并使用virtual_machine资源内部的必要块,如下所示:
storage_image_reference {
id = data.azurerm_shared_image.image.id
}
plan {
name = data.azurerm_shared_image.image.sku
publisher = data.azurerm_shared_image.image.publisher
product = data.azurerm_shared_image.image.offer
}
但是,我收到一条错误消息:
Error: Unsupported attribute
This object has no argument, nested block, or exported attribute named "sku".
每个sku,发布者和要约。
答案 0 :(得分:0)
我们可以更好地了解要处理的内容,以便为测试目的添加输出,例如:
output "imagedata" {
value = data.azurerm_shared_image.image
}
我们获得了重要的见识:
imagedata = {
"description" = ""
"eula" = ""
"gallery_name" = [removed]
"id" = [removed]
"identifier" = [
{
"offer" = "cis-centos-7-l1"
"publisher" = "center-for-internet-security-inc"
"sku" = "cis-centos75-l1"
},
]
"location" = [removed]
"name" = [removed]
"os_type" = "Linux"
"privacy_statement_uri" = ""
"release_note_uri" = ""
"resource_group_name" = [removed]
"tags" = {}
}
现在使用data.azurerm_shared_image.image.identifier.sku
的方法在这里也不行。就Terraform而言,标识符块仅是数组中的一个元素。
我们仍然以相同的方式检索数据:
data "azurerm_shared_image" "image" {
name = var.image_name
gallery_name = var.gallery_name
resource_group_name = var.rsg_name
}
我们在virtual_machine资源中引用它,如下所示:
storage_image_reference {
id = data.azurerm_shared_image.image.id
}
plan {
name = data.azurerm_shared_image.image.identifier[0].sku
publisher = data.azurerm_shared_image.image.identifier[0].publisher
product = data.azurerm_shared_image.image.identifier[0].offer
}