我对地形变量应该做什么感到困惑。现在,他们似乎根本无法解决我的特定要求,也许我真的在树错了树。假设我有一个这样的配置:
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?看起来很乏味,而且不重要!
答案 0 :(得分:1)
工作区是您的朋友。您可以使用工作区在“设置”之间进行切换,而无需触摸脚本。这些“设置”可以是版本,环境等等。
要满足您的特定需求,您可以将其放在您的变量中。tf
variable "majorVersion" {
type = "map"
default = {
v1 = "v1"
v2 = "v2"
}
}
module "media-assets" {
majorVersion = "${var.majorVersion[terraform.workspace]}"
}
在运行apply命令之前,选择正确的工作区
terraform workspace select v1
尽管如此,您可能会看到需要随行添加到majorVersion映射中。为此,我建议不要将版本控制放在terraform脚本之外。