Terraform中如何遍历函数对象的dependencies列表适配数据源
解决Terraform遍历函数依赖列表的问题
问题背景
需要遍历var.admin_functions中每个对象的dependencies列表,但flexibleengine_fgs_dependencies数据源的name字段仅支持传入单个字符串,无法直接处理列表,此前写法只能获取第一个依赖项,无法覆盖所有依赖。
配置文件
fgs.tfvars
admin_functions = [ { name = "function1" description = "Function1 Description" memory = 128 timeout = 90 dependencies = [ "esdk_obs_python", "provider", "common_finops" ] }, { name = "function2" memory = 128 timeout = 90 dependencies = [ "esdk_obs_python" ] } ]
variables.tf
variable "admin_functions" { type = list(object({ name = string description = optional(string) memory = number timeout = number user_data = optional(object({})) dependencies = optional(list(string)) })) }
此前尝试的写法(main.tf)
locals { admin_functions_map = { for func in var.admin_functions : func.name => { dependencies = func.dependencies } } } data "flexibleengine_fgs_dependencies" "admin_functions" { for_each = local.admin_functions_map name = each.value.dependencies }
解决方案
核心思路是扁平化所有依赖项,将每个函数的每个依赖转换为独立的条目,再通过for_each遍历这些条目:
locals { # 扁平化处理:将每个函数的每个依赖生成唯一键值对 admin_function_dependencies = merge([ for func in var.admin_functions : { for dep in func.dependencies : # 用"函数名:依赖名"作为唯一键,避免不同函数的同名依赖冲突 "${func.name}:${dep}" => { func_name = func.name dep_name = dep } } ]...) } data "flexibleengine_fgs_dependencies" "admin_functions" { for_each = local.admin_function_dependencies # 每个数据源实例对应一个依赖项 name = each.value.dep_name }
说明
- 嵌套的
for循环会遍历每个函数,再遍历该函数的所有依赖,生成以函数名:依赖名为唯一标识的映射条目,确保不会出现重复键。 - 每个
flexibleengine_fgs_dependencies数据源实例对应一个独立的依赖项,满足name字段仅接受字符串的要求。 - 后续若需要关联依赖与所属函数,可通过
each.value.func_name字段进行关联。
内容的提问来源于stack exchange,提问作者Isador
相关产品推荐
相关产品推荐

