如何通过变量控制GCP Terraform中access_config配置块的增删
Terraform 动态控制GCP实例access_config块实现方案
你可以通过Terraform内置的dynamic动态块特性实现需求,无需编写两份重复的资源定义,仅通过external_ip变量的布尔值就能控制是否生成access_config配置块:
1. 变量声明(可选补充,如已定义可忽略)
确保external_ip变量为布尔类型,示例声明如下:
variable "external_ip" { type = bool default = false description = "控制是否为实例分配公网IP,true为分配,false为不分配" }
2. 完整资源配置代码
resource "google_compute_instance_from_template" "default_name_index" { name = "${length(var.instances[change_with_index].instance_backup_ip) == 1 ? var.instances[change_with_index].instance_backup_name : format("%s-%s", var.instances[change_with_index].instance_backup_name, count.index + 1)}" count = length(var.instances[change_with_index].instance_backup_ip) source_instance_template = "projects/${var.provider_project}/global/instanceTemplates/${replace(var.instances[change_with_index].instance_name, "-app-image", "")}-${var.release_version}" network_interface { network = var.instances[change_with_index].instance_network subnetwork = var.instances[change_with_index].instance_subnetwork network_ip = var.instances[change_with_index].instance_backup_ip[count.index] # 动态控制access_config块是否生成 dynamic "access_config" { for_each = var.external_ip ? [1] : [] content {} } } }
3. 逻辑说明
- 当
var.external_ip取值为true时,for_each参数接收非空列表[1],动态块会生成1个空的access_config配置块,实例会被分配公网IP - 当
var.external_ip取值为false时,for_each参数接收空列表[],动态块不会生成任何配置,实例不会被分配公网IP
内容的提问来源于stack exchange,提问作者adhithia
相关产品推荐
相关产品推荐

