使用 for_each 使用列表输入创建多个磁盘及其快照
Use for_each to create multiple disks and their snapshots using a list input
我正在编写 TF 代码以在 GCP 中创建多个磁盘。目的是有干代码,有列表作为输入。
我的变量 app_disks
具有以下定义
variable "app_disks" {
type = list(object({
name = string
size = number
}))
}
在我的 main.tf 中,我使用这样的变量
app_disks = [
{
name = loki
size = 200
},
{
name = repo
size = 100
}
]
在我的模块中,我的 disk.tf 看起来像这样
locals {
app_disk_map = {
for disk in var.app_disks : "${disk.name}" => disk
}
}
resource "google_compute_resource_policy" "app_disk_backup" {
for_each = local.app_disk_map
name = "${each.value.name}-backup"
snapshot_schedule_policy {
schedule {
hourly_schedule {
hours_in_cycle = 8
start_time = "04:00"
}
}
retention_policy {
max_retention_days = 14
on_source_disk_delete = "APPLY_RETENTION_POLICY"
}
}
}
resource "google_compute_disk" "app_disk" {
for_each = local.app_disk_map
provider = google-beta
name = each.value.name
zone = "${var.region}-a"
size = each.value.size
resource_policies = [each.google_compute_resource_policy.app_disk_backup[${each.value.name}-backup].self_link]
}
我不确定如何 link 磁盘的 resource_policies
与其相关 google_compute_resource_policy"
。
我试过像
这样的组合
each.google_compute_resource_policy.app_disk_backup[${each.value.name}-backup].self_link
each.google_compute_resource_policy.app_disk_backup."${each.value.name}-backup".self_link
但 none 似乎有效
我不完全确定我是否解决了问题(因为缺少错误输出),但根据我的理解,您希望获得以下参考:google_compute_resource_policy.app_disk_backup[each.key].self_link
所以资源看起来像:
resource "google_compute_disk" "app_disk" {
for_each = local.app_disk_map
....
resource_policies = [google_compute_resource_policy.app_disk_backup[each.key].self_link]
}
这将引用用于创建依赖资源并在依赖项之间创建 1:1 映射的同一键。
我正在编写 TF 代码以在 GCP 中创建多个磁盘。目的是有干代码,有列表作为输入。
我的变量 app_disks
具有以下定义
variable "app_disks" {
type = list(object({
name = string
size = number
}))
}
在我的 main.tf 中,我使用这样的变量
app_disks = [
{
name = loki
size = 200
},
{
name = repo
size = 100
}
]
在我的模块中,我的 disk.tf 看起来像这样
locals {
app_disk_map = {
for disk in var.app_disks : "${disk.name}" => disk
}
}
resource "google_compute_resource_policy" "app_disk_backup" {
for_each = local.app_disk_map
name = "${each.value.name}-backup"
snapshot_schedule_policy {
schedule {
hourly_schedule {
hours_in_cycle = 8
start_time = "04:00"
}
}
retention_policy {
max_retention_days = 14
on_source_disk_delete = "APPLY_RETENTION_POLICY"
}
}
}
resource "google_compute_disk" "app_disk" {
for_each = local.app_disk_map
provider = google-beta
name = each.value.name
zone = "${var.region}-a"
size = each.value.size
resource_policies = [each.google_compute_resource_policy.app_disk_backup[${each.value.name}-backup].self_link]
}
我不确定如何 link 磁盘的 resource_policies
与其相关 google_compute_resource_policy"
。
我试过像
这样的组合each.google_compute_resource_policy.app_disk_backup[${each.value.name}-backup].self_link
each.google_compute_resource_policy.app_disk_backup."${each.value.name}-backup".self_link
但 none 似乎有效
我不完全确定我是否解决了问题(因为缺少错误输出),但根据我的理解,您希望获得以下参考:google_compute_resource_policy.app_disk_backup[each.key].self_link
所以资源看起来像:
resource "google_compute_disk" "app_disk" {
for_each = local.app_disk_map
....
resource_policies = [google_compute_resource_policy.app_disk_backup[each.key].self_link]
}
这将引用用于创建依赖资源并在依赖项之间创建 1:1 映射的同一键。