我被Terraform变量应该做的混淆。现在,他们似乎无用解决我的特定要求,也许我真的在吠叫错误的树。假设我有这样的配置:
variable "majorVersion" {
type = "string"
}
module "media-assets" {
majorVersion = "${var.majorVersion}"
region = "us-east-1"
bucket = "uploads-${var.majorVersion}"
source = "./modules/media-assets"
user = "appics-production"
}
让我们简单地假设资产模块暂时定义了S3存储库。如果我像这样运行Terraform,一切都很好:
terraform apply -var="majorVersion=v1"
但是,如果我用
再次运行它terraform apply -var="majorVersion=v2"
我希望Terraform独自离开V1的资源!相反,Terraform想要拆除V1!如何完成一组参数化的配置集,而不必为每个版本再次编写整个Shebang?这似乎很乏味,而且旁边!
工作区
工作空间是您的朋友。您使用工作区在"设置"之间切换,而无需触摸脚本。这些"设置"可以是版本,环境,what。
要达到您的特定需求,您可以将其放在您的变量中。tf
variable "majorVersion" {
type = "map"
default = {
v1 = "v1"
v2 = "v2"
}
}
module "media-assets" {
majorVersion = "${var.majorVersion[terraform.workspace]}"
}
在运行应用命令之前,请选择正确的工作区
terraform workspace select v1
,尽管您可能会看到您需要添加到Majorversion图中。为此,我建议将版本删除从Terraform脚本中删除。