如何在同一个列表上迭代多个资源?

2024-04-17

这里是 Terraform 的新手。我正在尝试使用 Terraform 创建多个项目(在 Google Cloud 中)。问题是我必须执行多个资源才能完全建立一个项目。我试过count,但是如何使用顺序绑定多个资源count?以下是我需要为每个项目执行的以下资源:

  1. 使用创建项目resource "google_project"
  2. 使用启用 API 服务resource "google_project_service"
  3. 使用以下命令将服务项目附加到宿主项目resource "google_compute_shared_vpc_service_project"(我使用的是共享VPC)

如果我想创建一个项目,这很有效。但是,如果我传递一个项目列表作为输入,如何按顺序执行该列表中每个项目的所有上述资源?

Eg.

Input

project_list=["proj-1","proj-2"]

依次执行以下命令:

resource "google-project" for "proj-1"
resource "google_project_service" for "proj-1"
resource "google_compute_shared_vpc_service_project" for "proj-1"

resource "google-project" for "proj-2"
resource "google_project_service" for "proj-2"
resource "google_compute_shared_vpc_service_project" for "proj-2"

我正在使用 Terraform 0.11 版本,它不支持for loops


在 Terraform 中,您可以使用以下方法来完成此操作count和两个插值函数,element() and length().

首先,您将为模块提供一个输入变量:

variable "project_list" {
  type = "list"
}

然后,你会得到类似的东西:

resource "google_project" {
  count = "${length(var.project_list)}"
  name  = "${element(var.project_list, count.index)}"
}

resource "google_project_service" {
  count = "${length(var.project_list)}"
  name  = "${element(var.project_list, count.index)}"
}

resource "google_compute_shared_vpc_service_project" {
  count = "${length(var.project_list)}"
  name  = "${element(var.project_list, count.index)}"
}

当然,您还将在这些资源声明中拥有其他配置。

请注意,此模式在中进行了描述Terraform 启动并运行 https://www.terraformupandrunning.com,第 5 章,还有其他使用示例count.index在文档中here https://www.terraform.io/docs/configuration-0-11/resources.html.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在同一个列表上迭代多个资源? 的相关文章

随机推荐