Terraform 条件取决于是否已创建资源
Terraform Conditional depending if a resource has been created
我创建了一个计算模块,它有条件创建外部 IP。
resource "google_compute_address" "external" {
count = "${var.EXT_IP_CREATE ? 1 : 0}"
name = "${var.NAME}-ext-ip"
address_type = "EXTERNAL"
region = "${var.REGION}"}
在计算实例资源块中,我有以下网络接口配置:
network_interface {
network= "${var.NETWORK}"
network_ip = "${google_compute_address.internal.address}"
access_config {
nat_ip = "${var.EXT_IP_CREATE ? google_compute_address.external.address : 0 }"
}
}
如果资源google_compute_address.external还没有创建,我需要将nat_ip设置为null或者换句话说0。
这看起来应该有效,但实际上无效。
当设置EXT_IP_CREATE为true时TF创建资源成功。将其设置为 false 时,我收到以下错误:
Error: Error running plan: 1 error(s) occurred:
* module.compute-dbma-dev.google_compute_instance.compute: 1 error(s) occurred:
* module.compute-dbma-dev.google_compute_instance.compute: Resource 'google_compute_address.external' not found for variable 'google_compute_address.external.address'
当我显式传递 nat_ip = 0 时,TF 识别出空白值并成功创建了没有外部 IP 的计算实例。
我目前使用的是 Terraform 版本 Terraform v0.11。可能有一个超级简单的解决方案,但我刚开始使用 TF 中的条件语句,但我被困在这里了。
提前致谢!
两种解决方法:
TF_WARN_OUTPUT_ERRORS=1 terraform apply
${element(concat(google_compute_address.*.address, list("")), 0)}
当我尝试使用类似的条件时,出现以下错误:
* google_compute_instance.main: __builtin_StringToInt: strconv.ParseInt: parsing "": invalid syntax in:
${var.external_ip != "" ? var.external_ip : 0}
根据 GCP API 目前的工作方式,我看不出如何有条件地附加外部 IP [1]:
networkInterfaces[].accessConfigs[].natIP => string
An external IP address associated with this instance. Specify an unused static external IP address available to the project or leave this field undefined to use an IP from a shared ephemeral IP address pool. If you specify a static external IP address, it must live in the same region as the zone of the instance.
[1] https://cloud.google.com/compute/docs/reference/rest/v1/instances
我创建了一个计算模块,它有条件创建外部 IP。
resource "google_compute_address" "external" {
count = "${var.EXT_IP_CREATE ? 1 : 0}"
name = "${var.NAME}-ext-ip"
address_type = "EXTERNAL"
region = "${var.REGION}"}
在计算实例资源块中,我有以下网络接口配置:
network_interface {
network= "${var.NETWORK}"
network_ip = "${google_compute_address.internal.address}"
access_config {
nat_ip = "${var.EXT_IP_CREATE ? google_compute_address.external.address : 0 }"
}
}
如果资源google_compute_address.external还没有创建,我需要将nat_ip设置为null或者换句话说0。
这看起来应该有效,但实际上无效。
当设置EXT_IP_CREATE为true时TF创建资源成功。将其设置为 false 时,我收到以下错误:
Error: Error running plan: 1 error(s) occurred:
* module.compute-dbma-dev.google_compute_instance.compute: 1 error(s) occurred:
* module.compute-dbma-dev.google_compute_instance.compute: Resource 'google_compute_address.external' not found for variable 'google_compute_address.external.address'
当我显式传递 nat_ip = 0 时,TF 识别出空白值并成功创建了没有外部 IP 的计算实例。
我目前使用的是 Terraform 版本 Terraform v0.11。可能有一个超级简单的解决方案,但我刚开始使用 TF 中的条件语句,但我被困在这里了。
提前致谢!
两种解决方法:
TF_WARN_OUTPUT_ERRORS=1 terraform apply
${element(concat(google_compute_address.*.address, list("")), 0)}
当我尝试使用类似的条件时,出现以下错误:
* google_compute_instance.main: __builtin_StringToInt: strconv.ParseInt: parsing "": invalid syntax in:
${var.external_ip != "" ? var.external_ip : 0}
根据 GCP API 目前的工作方式,我看不出如何有条件地附加外部 IP [1]:
networkInterfaces[].accessConfigs[].natIP => string
An external IP address associated with this instance. Specify an unused static external IP address available to the project or leave this field undefined to use an IP from a shared ephemeral IP address pool. If you specify a static external IP address, it must live in the same region as the zone of the instance.
[1] https://cloud.google.com/compute/docs/reference/rest/v1/instances