如何将Terraform数据源结果合并到现有对象映射中
解决方案
要将OpenAPI规范的响应内容合并到原元数据映射中,你可以利用Terraform的merge函数和for表达式直接关联原变量与HTTP数据源的结果,生成包含完整信息的新映射。
1. 合并元数据与OpenAPI规范内容
修改本地变量定义,创建一个包含原元数据和JSON响应体的新映射:
locals { api_definitions_with_spec = { for api_key, api_meta in var.open_api_definitions : api_key => merge( api_meta, { json_body = data.http.url_responses[api_key].response_body } ) } }
- 由于
data.http.url_responses的键与var.open_api_definitions完全一致(for_each基于原变量),可以通过api_key直接索引到对应API的HTTP响应。 merge函数会将原元数据对象与新增的json_body字段合并,生成你需要的结构。
2. 验证合并结果(可选)
通过output块确认合并后的结构是否符合预期:
output "merged_api_definitions" { value = local.api_definitions_with_spec }
3. 生成Azure APIM API
基于合并后的映射,批量创建Azure APIM API资源:
resource "azurerm_api_management_api" "apis" { for_each = local.api_definitions_with_spec name = each.value.api_name api_management_name = "<你的APIM实例名称>" resource_group_name = "<你的资源组名称>" revision = "1" display_name = each.value.api_name service_url = each.value.service_url path = each.value.api_url_suffix import { content_format = "openapi+json" content_value = each.value.json_body } }
- 若你的OpenAPI规范是YAML格式,将
content_format改为"openapi+yaml"即可。
内容的提问来源于stack exchange,提问作者Devin Goble
相关产品推荐
相关产品推荐

