0

我正在实现一个 Cloudflare Terraform 脚本,但在删除 zone_settings 的块时遇到问题:

resource "cloudflare_zone_settings_override" "my-domain-settings-1" {
  zone_id = cloudflare_zone.my_domain1.id
  settings {
    # very_long_list_of_settings
  }
}

resource "cloudflare_zone_settings_override" "my-domain-settings-2" {
  zone_id = cloudflare_zone.my_domain2.id
  settings {
    # very_long_list_of_settings
  }
}

设置块有大约 60 行,完全相等。我试图通过 foreach 来实现这个:

variable domains {
  default = [
    # ERROR: Variables may not be used here.
    cloudflare_zone.my_domain1,
    cloudflare_zone.my_domain2,
  ]
}

resource "cloudflare_zone_settings_override" "partners-zone-settings" {
  name = var.domains[count.index].name
  zone_id = var.domains[count.index].id
  settings {
    # very_long_list_of_settings
  }
}

(完整代码:https ://gist.github.com/knyttl/ee10aa7d63adda866fe39151a9e015d9 )

但这Variables may not be used here.在变量块中失败了。

所以我尝试了当地人:

locals {
  zone_settings {
    # very_long_list_of_settings
    # ERROR: cannot have nested blocks
  }
}

resource "cloudflare_zone_settings_override" "my-domain-settings-1" {
  zone_id = cloudflare_zone.divadlouhasicu_cz.id
  # ERROR: An argument named "settings" is not expected here. Did you mean to define a block of type "settings"?
  settings = var.zone_settings
}

resource "cloudflare_zone_settings_override" "my-domain-settings-2" {
  zone_id = cloudflare_zone.divadlouhasicu_net.id
  # ERROR: An argument named "settings" is not expected here. Did you mean to define a block of type "settings"?
  settings = var.zone_settings
}

(完整代码:https ://gist.github.com/knyttl/76ff39f3baf68df19dfbd05a37eb0ea5 )

但这以上面两条评论中的错误告终。

有没有办法做到这一点?

4

1 回答 1

0

考沃伊托,

如果您是 Terraform 12 或更高版本,您可以使用for_eachconstruct。在低版本没有办法。

https://www.hashicorp.com/blog/hashicorp-terraform-0-12-preview-for-and-for-each

代码看起来像这样(我没有对此进行测试,因此几乎可以肯定需要进行一些修改):

variable domains {
  default = [
    # ERROR: Variables may not be used here.
    cloudflare_zone.my_domain1,
    cloudflare_zone.my_domain2,
  ]
}

resource "cloudflare_zone_settings_override" "my-domain-settings-1" {
  for_each = var.domains

  zone_id = each.value
  settings {
    # very_long_list_of_settings
  }
}
于 2020-10-15T09:56:14.827 回答