You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Terraform locals条件语句中tonumber转换失效的问题咨询

问题解答

1. 打印tolist(local.port_mappings)的值排查问题

直接通过Terraform的output块输出即可:

output "debug_port_mappings" {
  value = tolist(local.port_mappings)
}

添加该块后,执行terraform plan或terraform apply时,终端会输出该变量的具体内容;也可在apply完成后,用以下命令单独查看:

terraform output debug_port_mappings

2. tonumber()未生效的问题

这不是预期行为,tonumber()没生效通常是因为你没有在给containerPort和hostPort赋值的环节显式应用转换。要让转换生效,需确保每个端口字段的赋值都包裹tonumber():

示例1:条件语句中的正确写法

如果port_mappings是通过条件判断生成的,要在字段赋值时直接做转换:

locals {
  port_mappings = var.enable_ports ? [
    {
      containerPort = tonumber(var.container_port_str)
      hostPort      = tonumber(var.host_port_str)
    }
  ] : []
}

示例2:循环生成时的正确写法

如果是通过for表达式批量生成端口映射,要在循环内部对每个字段做转换:

locals {
  port_mappings = [
    for item in var.raw_port_mappings : {
      containerPort = tonumber(item.containerPort)
      hostPort      = tonumber(item.hostPort)
    }
  ]
}

额外注意:如果端口值来自字符串类型的变量、数据源输出或配置文件,必须显式用tonumber()转换;如果变量本身定义为number类型,要排查是否在中间环节被意外转为字符串(比如拼接、格式化操作)。

内容的提问来源于stack exchange,提问作者user7692855

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 23:59:55