如何从远程仓库获取并读取.tfvars配置文件?Terraform技术问询
读取HTTP数据源获取的.tfvars内容
你当前的HTTP配置存在两个关键问题,调整后即可正常读取文件内容:
- 请求头设置为
Accept = "application/json"不符合.tfvars的HCL文本格式要求,需改为Accept = "text/plain"或直接移除该请求头,确保获取到原始文件内容。 - 当前Azure DevOps URL是网页路径,而非原始文件地址,需替换为该文件的原始内容URL(在Azure DevOps文件页面点击「Raw」按钮复制)。
修正后的HTTP数据源配置:
data "http" "tfvars" { url = "https://dev.azure.com/some/sampleinfra/_git/sampleinfra/raw/infra/variable_folders.auto.tfvars?version=GBmain" # 若需要认证,添加个人访问令牌(PAT)的请求头: # request_headers = { # Authorization = "Bearer ${var.azure_devops_pat}" # } }
通过hcldecode函数解析返回的HCL内容,转为Terraform可用的本地变量:
locals { remote_folder_config = hcldecode(data.http.tfvars.response_body) }
之后即可通过local.remote_folder_config.folderList访问配置内容,例如:
output "main_process_status" { value = local.remote_folder_config.folderList.main.process }
更优的远程配置获取方式
方式1:使用Git数据源克隆仓库
若需复用多个文件或依赖版本控制逻辑,直接克隆远程仓库是更可靠的方案,无需处理单个文件的URL和认证细节:
data "git_repository" "infra_config" { url = "https://dev.azure.com/some/sampleinfra.git" # 指定目标分支,可选,默认拉取仓库默认分支 ref = "main" # 认证配置,使用Azure DevOps个人访问令牌 http_headers = { Authorization = "Bearer ${var.azure_devops_pat}" } } locals { remote_vars = hcldecode(file("${data.git_repository.infra_config.path}/infra/variable_folders.auto.tfvars")) }
此方式要求环境中已安装Git客户端,Terraform会自动将仓库克隆到临时目录。
方式2:封装为Terraform模块
若该.tfvars中的配置是多项目共用的核心逻辑,将其封装为Terraform模块是更符合最佳实践的复用方式:
module "shared_folder_config" { source = "git::https://dev.azure.com/some/sampleinfra.git//infra/shared-config?ref=main" # 若需认证,可在source URL中嵌入个人访问令牌: # source = "git::https://${var.azure_devops_pat}@dev.azure.com/some/sampleinfra.git//infra/shared-config?ref=main" }
在模块中定义好变量和输出后,主配置可直接引用模块输出值,实现更清晰的依赖管理。
内容的提问来源于stack exchange,提问作者Kylo
相关产品推荐
相关产品推荐

