如何从Terraform变量config_settings中获取指定字段值?
Terraform 提取 config_settings 中指定字段值的方法
你的 config_settings 变量是一个对象列表,每个对象嵌套了多层结构,要提取 pin_connection_details 和 pin_task_position,得根据它们的嵌套层级来遍历取值,具体方法如下:
提取 pin_connection_details
这个字段在 pin_config.pin_types(map 类型)的每个元素里,需要先遍历 config_settings 列表,再遍历每个配置项里的 pin_types 键值对:
提取所有非空的 pin_connection_details
locals { all_pin_connection_details = flatten([ for config in var.config_settings : [ for pin_type in config.pin_config.pin_types : pin_type.pin_connection_details if pin_type.pin_connection_details != null ] ]) }
- 外层遍历
config_settings里的每个配置对象 - 内层遍历每个配置的
pin_typesmap,取出pin_connection_details - 用
if过滤掉 null 值,flatten把嵌套列表转为一维列表
提取指定配置、指定引脚的 pin_connection_details
如果要精准获取某个配置(比如 name 为 prod-config)下某个引脚(比如 pin_types 的键为 uart-pin)的字段值:
locals { target_connection_detail = [ for config in var.config_settings : [ for pin_key, pin_type in config.pin_config.pin_types : pin_type.pin_connection_details if config.name == "prod-config" && pin_key == "uart-pin" ] ][0][0] }
- 通过
if条件筛选目标配置和引脚,最后用[0][0]取出第一个匹配结果(确保只有一个匹配项时可用)
提取 pin_task_position
这个字段在 pin_tasks(列表类型)的每个任务对象里,遍历方式类似:
提取所有非空的 pin_task_position
locals { all_pin_task_positions = flatten([ for config in var.config_settings : [ for task in config.pin_tasks : task.pin_task_position if task.pin_task_position != null ] ]) }
提取指定任务名称的 pin_task_position
如果要获取任务名称为 data-sync-task 的位置信息:
locals { target_task_position = [ for config in var.config_settings : [ for task in config.pin_tasks : task.pin_task_position if task.pin_task_name == "data-sync-task" ] ][0][0] }
注意事项
因为这两个字段都是可选字段(默认值为 null),使用时建议用 coalesce 函数设置默认值,避免 null 引发问题:
# 给目标字段设置默认值 coalesce(local.target_connection_detail, "no-connection-info")
内容的提问来源于stack exchange,提问作者xpetta
相关产品推荐
相关产品推荐

