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

如何在Terraform数据源中使用通配符创建过滤器?是否可行?

Terraform OCI数据源过滤器的通配符与正则使用说明

核心结论

Terraform OCI数据源的默认过滤器不支持*这类通配符,你当前的写法会将*当作字面量字符串进行精确匹配,因此无法找到目标资源,返回空结果。而使用正则表达式是官方支持的合规方式,只要正确配置就能实现前缀/模糊匹配。

问题原因分析

你的代码中,filter块默认regex = false(可从输出结果里看到该参数值),此时values中的内容会被当作精确匹配的字符串。也就是说,Terraform会去寻找display_name完全等于vcn-spoke*的VCN,而不是前缀为vcn-spoke的VCN,自然找不到匹配项。

正确实现方式:开启正则匹配

要实现前缀匹配,只需在filter块中添加regex = true,并使用正则表达式编写匹配规则。针对你的场景,匹配以vcn-spoke开头的display_name,可以用^锚定字符串起始位置:

variable vcn_prefix {
  default = "vcn-spoke"
}

data "oci_core_vcns" "spoke_vcns" {
  compartment_id = var.network_comp_id
        
  filter {
    name   = "display_name"
    values = ["^${var.vcn_prefix}"]
    regex  = true
  }
}

output "vcn_names" {
  value = data.oci_core_vcns.spoke_vcns.virtual_networks.*.display_name
}

正则规则说明

  • ^:表示匹配字符串的起始位置,确保只有以vcn-spoke开头的名称会被匹配
  • 如果需要包含匹配(即名称中任意位置包含vcn-spoke),可以直接写["${var.vcn_prefix}"]
  • 复杂匹配需求可参考标准正则语法编写规则

补充说明

使用regex = true是OCI Terraform Provider官方支持的功能,属于合规用法,并非非正规实现。之前的代码无报错是因为语法完全合法,只是匹配逻辑不符合预期,因此Terraform仅返回空的匹配结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 10:41:14