我在下面有文件结构,terraform CLI 没有在 S3 文件的内容中使用运行时变量值。它始终默认为 0 值。
结构:
terraform
main.tf
api/
variables.tf
s3.tf
main.tf
module "api" {
source = "./api"
providers = {
aws = "aws.us-east-1"
}
}
variables.tf
variable "build-number" {
description = "jenkins build number"
type = "string"
default = "0"
}
s3.tf
resource "aws_s3_bucket_object" "api-build-version" {
bucket = "api-code"
key = "build-version"
content = "${var.build-number}"
etag = "${md5("${var.build-number}")}"
}
terraform plan -var "build-number=2" -target aws_s3_bucket_object.api-build-version
我的 Terraform 版本是 v0.11.8
在您的结构中,您的变量仅在 API 模块下
terraform
main.tf
api/
variables.tf
s3.tf
您需要在根目录中使用相同的变量,将其添加到 main.tf 或自己的文件中,然后像这样传递它:
module "api" {
source = "./api"
build-number = "${var.build-number}"
providers = {
aws = "aws.us-east-1"
}
}
所有子文件夹都是地形形式的模块,变量不是全局的...您可以在每个级别上声明变量,如果它们相同,则可以执行指向一个文件的符号链接以减少复制粘贴。
如果它只是一个平面结构,你不需要它,如果你愿意,
试试这个:
variable "build-number" {
type = "string"
default = "0"
}
output "test" {
value = "${var.build-number}"
}
terraform apply -var "build-number=2"
输出正确的变量值