Terraform是否支持使用非main.tf的自定义配置文件名执行命令?
Terraform 原生不存在 -main-file 这类直接指定单个配置文件执行的参数,默认运行时会加载当前工作目录下所有后缀为 .tf 的文件合并处理,因此你直接将两份配置放在同级目录直接运行的话,会默认合并两套资源,无法实现分开执行的需求。以下是可落地的实现方案:
方案1:分目录存放(官方推荐,最规范)
如果可以调整目录结构,直接新建两个子目录分别存放对应的配置文件,执行时通过-chdir参数指定工作目录即可,命令示例:
# 执行tfstate相关操作 terraform -chdir=./tfstate init terraform -chdir=./tfstate plan terraform -chdir=./tfstate apply # 执行project相关操作 terraform -chdir=./project init terraform -chdir=./project plan terraform -chdir=./project apply
该方案无需修改原有配置内容,逻辑清晰无副作用,是Terraform官方推荐的多套配置管理方式。
方案2:变量开关控制(必须放同级目录的首选)
如果要求两份配置必须放在同级目录,可以通过变量控制两套配置的启用状态:
- 新增
variables.tf定义控制变量:
variable "deploy_target" { type = string description = "部署目标,可选值为tfstate、project" default = "tfstate" }
- 给
tfstate.tf内的所有资源、模块添加count条件:
resource "xxx" "xxx" { count = var.deploy_target == "tfstate" ? 1 : 0 # 原有配置保持不变 }
- 给
project.tf内的所有资源、模块添加对应count条件:
resource "xxx" "xxx" { count = var.deploy_target == "project" ? 1 : 0 # 原有配置保持不变 }
执行时通过变量指定目标即可,命令示例:
terraform init # 操作tfstate配置 terraform plan -var="deploy_target=tfstate" terraform apply -var="deploy_target=tfstate" # 操作project配置 terraform plan -var="deploy_target=project" terraform apply -var="deploy_target=project"
方案3:临时修改文件后缀(仅适合临时测试)
执行操作前将不需要生效的配置文件后缀改为非.tf格式,比如要执行tfstate配置时,将project.tf重命名为project.tf.disabled,执行完成后再改回原名。该方案无需修改配置内容,但手动操作容易出错,不建议长期使用。
内容的提问来源于stack exchange,提问作者Vidya
相关产品推荐
相关产品推荐

