Terraform模块能否直接引用launchdarkly_provider的资源类型定义变量
结论
目前Terraform类型系统不支持直接引用Provider定义的资源类型作为变量的类型约束,你示例中期望的map(launchdarkly_feature_flags)写法暂时无法实现。
LaunchDarkly Provider的launchdarkly_feature_flag资源的Schema定义是Provider内部实现的一部分,并没有作为可直接引用的HCL类型暴露给Terraform配置层使用。
替代实现方案
如果要实现类型安全校验,你可以用以下两种方式替代map(any)写法:
方案1:自定义匹配资源结构的object类型
按照你实际用到的launchdarkly_feature_flag资源字段,自定义对应的object结构约束:
variable "feature_flags" { type = map(object({ key = string name = string project = string variation_type = string description = optional(string) tags = optional(list(string)) temporary = optional(bool, true) # 其他你需要用到的launchdarkly_feature_flag对应字段按需补全 })) default = {} }
你可以根据自己实际用到的字段增删object内的属性,可选字段可以用Terraform 0.14+支持的optional()修饰,还可以直接设置默认值。
方案2:增加自定义校验规则(可选)
如果需要更严格的逻辑校验,可以额外搭配validation块做规则校验,比如校验flag key的命名格式、枚举值校验等:
variable "feature_flags" { type = map(object({ key = string name = string project = string variation_type = string })) validation { condition = alltrue([for k, v in var.feature_flags : length(regexall("^[a-z0-9-_]+$", v.key)) > 0]) error_message = "所有feature flag的key只能包含小写字母、数字、短横线和下划线。" } }
内容的提问来源于stack exchange,提问作者Hitmands
相关产品推荐
相关产品推荐

