Azure 如何在Terraform的虚拟机资源中使用共享的镜像计划数据,如发布者、产品和sku
使用Terraform v0.12.9,azurerm provider v1.36.1 情景:Azure 如何在Terraform的虚拟机资源中使用共享的镜像计划数据,如发布者、产品和sku,azure,terraform,terraform-provider-azure,terraform0.12+,Azure,Terraform,Terraform Provider Azure,Terraform0.12+,使用Terraform v0.12.9,azurerm provider v1.36.1 情景: 您已经基于第三方市场映像创建了一个映像 您已将此图像发布到共享图像库 您已经能够使用Terraform和Azure Devops管道以自动化的方式实现这一点。(例如,CIS硬化图像) 对于上述每个步骤,您都提供了计划信息数据。否则,您将无法从此映像创建VM,因为使用marketplace映像会带来额外的成本 现在,您希望其他团队能够通过Terraform Automation使用共享图像库中的图像
- 您已经基于第三方市场映像创建了一个映像
- 您已将此图像发布到共享图像库
- 您已经能够使用Terraform和Azure Devops管道以自动化的方式实现这一点。(例如,CIS硬化图像)
- 对于上述每个步骤,您都提供了计划信息数据。否则,您将无法从此映像创建VM,因为使用marketplace映像会带来额外的成本
- 现在,您希望其他团队能够通过Terraform Automation使用共享图像库中的图像
data "azurerm_shared_image" "image" {
name = var.image_name
gallery_name = var.gallery_name
resource_group_name = var.rsg_name
}
并在虚拟机资源中使用必要的块,如下所示:
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
}
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
}
但是,我得到一个错误声明:
Error: Unsupported attribute
This object has no argument, nested block, or exported attribute named "sku".
对于每个sku、发布者和产品。我们可以更好地了解我们正在处理的内容,以便添加用于测试目的的输出,例如:
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\u shared\u image.image.identifier.sku
在这里也不起作用。就地形而言,标识符块只是阵列中的一个元素
解决方案:
我们检索数据的方式仍然相同:
data "azurerm_shared_image" "image" {
name = var.image_name
gallery_name = var.gallery_name
resource_group_name = var.rsg_name
}
我们在虚拟机资源中引用它,如下所示:
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
}
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
}