如何通过Terraform archive_file访问GitLab子模块目录生成压缩包
用GitLab子模块作为源路径生成Terraform ZIP文件
Terraform的archive_file数据源不支持直接引用Git远程路径作为source_dir,必须先将GitLab子模块拉取到本地文件系统,再使用本地路径作为打包源。以下是实现步骤:
1. 拉取GitLab子模块到本地
使用git_submodule资源将目标子模块克隆到本地指定目录,替换示例中的仓库URL为你的GitLab子模块克隆地址:
resource "git_submodule" "lab_submodule" { url = "https://gitlab.com/your-org/your-submodule-repo.git" # GitLab子模块的克隆地址 path = "${path.module}/local-submodule-dir" # 本地存放子模块的相对路径 }
2. 配置archive_file打包子模块目录
修改archive_file的source_dir,指向本地拉取的子模块中的目标目录,并通过depends_on确保子模块拉取完成后再执行打包:
data "archive_file" "zip_file" { type = "zip" output_path = "${path.module}/${var.archive_name}" source_dir = "${git_submodule.lab_submodule.path}/source_files" # 子模块内的目标目录 depends_on = [git_submodule.lab_submodule] }
关键注意事项
- 必须使用GitLab子模块的克隆地址(HTTPS或SSH格式),而非网页端的
/-/tree/路径,后者是浏览器访问链接,无法用于Git克隆。 git_submodule的path需设置为Terraform工作目录下的相对路径,确保archive_file能访问到拉取后的文件。depends_on是必要的,它强制Terraform先完成子模块拉取,再执行打包操作,避免因文件未同步导致的错误。
内容的提问来源于stack exchange,提问作者VRJ
相关产品推荐
相关产品推荐

