1

我创建了一个计算模块,该模块具有创建外部 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 中的条件开始,我被困在这里。

提前致谢!

4

2 回答 2

1

解决这个问题的两种方法:

  1. TF_WARN_OUTPUT_ERRORS=1 terraform apply
  2. ${element(concat(google_compute_address.*.address, list("")), 0)}
于 2019-03-13T19:30:07.537 回答
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

于 2019-05-19T03:28:07.357 回答