Terragrunt配置中如何让.hcl文件的locals可选?
问题出在你当前的try仅处理了tags属性不存在的场景,但如果对应配置文件中没有定义locals块,或者locals里完全没有tags字段,try的范围没覆盖到整个属性链,就会触发"Unsupported attribute"错误。
直接扩大try的覆盖范围,就能实现省略的tags自动视为空对象的需求,两种可行写法:
写法一:先给变量默认空对象
global_vars = try((read_terragrunt_config(find_in_parent_folders("global.hcl"))).locals, {}) env_vars = try((read_terragrunt_config(find_in_parent_folders("env.hcl"))).locals, {}) workload_vars = try((read_terragrunt_config(find_in_parent_folders("workload.hcl"))).locals, {}) tags = merge( try(local.global_vars.tags, {}), try(local.env_vars.tags, {}), try(local.workload_vars.tags, {}) )
写法二:直接在merge中嵌套try(更简洁)
tags = merge( try((read_terragrunt_config(find_in_parent_folders("global.hcl"))).locals.tags, {}), try((read_terragrunt_config(find_in_parent_folders("env.hcl"))).locals.tags, {}), try((read_terragrunt_config(find_in_parent_folders("workload.hcl"))).locals.tags, {}) )
这两种写法都会在以下场景返回空对象:
- 目标配置文件不存在
- 配置文件中没有定义
locals块 locals块中没有tags属性
merge函数会自动忽略空对象,最终合并所有存在的tags属性。
内容的提问来源于stack exchange,提问作者Jamie Jonas
相关产品推荐
相关产品推荐

