我确定这是一个快速的方法。
我正在尝试通过count创建资源,并相应地命名资源。这里有两个问题。.一个我不确定是否可以解决,所以我猜我将不得不使用以下解决方法。
这是我的实例创建,一个用于磁盘,另一个用于计算实例:
resource "google_compute_disk" "us-am-build" {
count = "${var.us_am_count}"
name = "am${count.index}-disk"
type = "pd-standard"
size = "200"
zone = "us-east1-b"
}
resource "google_compute_instance" "us-am-build" {
count = "${var.us_am_count}"
project = "${var.gcp_project}"
name = "am${count.index}"
machine_type = "n1-standard-1"
zone = "us-east1-b"
allow_stopping_for_update = "true"
tags = "${var.am_instance_tags}"
service_account {
email = "${var.service_account}"
scopes = [ "cloud-platform" ]
}
boot_disk {
initialize_params {
image = "${var.compute_image}"
}
}
attached_disk {
source = "${google_compute_disk.us-am-build.self_link}"
device_name = "${google_compute_disk.us-am-build.name}-1"
}
network_interface {
subnetwork = "${var.us-east-1-subnet}"
subnetwork_project = "${var.gcp_project}"
access_config = {}
}
metadata {
certname = "am0-us.forgerock.com"
shutdown-script = "${file("${path.module}/scripts/node_termination_publish.sh")}"
startup-script = "${file("${path.module}/scripts/startup.sh")}"
}
}
第一个问题是我想遍历4个数,其中2个在美国东部,而另外2个在欧盟西部。我想不出一种能够遍历并将它们放置在不同区域的方法。
另一个问题是上述演示,以及磁盘和计算实例之间的实例名称。
count = "${var.us_am_count}"
假设上述设置为2(对于美国)。
name = "am${count.index}-disk"
第一个磁盘的名称是否为am0-disk?
我得到的错误:
* module.am-deploy.google_compute_instance.us-am-build[1]: Resource 'google_compute_disk.us-am-build' not found for variable 'google_compute_disk.us-am-build.self_link'
* module.am-deploy.google_compute_instance.us-am-build[0]: Resource 'google_compute_disk.us-am-build' not found for variable 'google_compute_disk.us-am-build.self_link'
答案 0 :(得分:1)
第一个问题,根据计数更改区域属性。我看到了几个选项(其中1个对我来说听起来最好):
1)使此代码块成为输入为count
和region
的模块。实例化2个模块,每个区域一个,并计数2个(硬编码或传入)。
2)创建一个具有区域数量的局部,然后使用mod运算符选择要对哪个区域进行mod区域数量。
locals {
regions = ["us-east1-b", "eu-west-1b"]
}
zone = "${element{local.regions, count.index % length(local.regions)}"
3)用每个计数所需的区域作为本地人(这很简陋,您可能不想这样做):
locals {
region_per_count = ["us-east1-b", "us-east-1b", "eu-west-1b", "eu-west-1b"]
}
然后从此列表中选择
zone = "${element(local.region_per_count, count.index")
引起第二个问题是因为您没有选择特定的google_compute_disk.us-am-build
来获得self_link
属性。做这样的事情:
source = "${element(google_compute_disk.us-am-build.*.self_link, count.index)}"
.*.
将该资源组放入列表上下文,然后使用element
选择哪个资源。