【问题标题】:Terraform variables not applied from command lineTerraform 变量未从命令行应用
【发布时间】:2020-06-03 22:33:01
【问题描述】:

我有下面的文件结构,terraform CLI 没有使用 S3 文件内容中的运行时变量值。它始终默认为 0 值。


结构:

terraform
    main.tf
    api/
        variables.tf
        s3.tf

ma​​in.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

【问题讨论】:

    标签: terraform terraform-provider-aws


    【解决方案1】:

    在你的结构中,你的变量只在 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"
      }
    }
    

    所有子文件夹都是 terraform 中的模块,变量不是全局变量...您需要在每一层上声明变量,如果它们相同,您可以对一个文件进行符号链接以减少复制粘贴。


    如果它只是一个扁平结构,你就不需要它了,
    如果你愿意,试试这个:

    variable "build-number" {
      type    = "string"
      default = "0"
    }
    
    output "test" {
      value = "${var.build-number}"
    }
    

    terraform apply -var "build-number=2"

    输出正确的变量值

    【讨论】:

    • 您应该删除此答案的第一部分,因为现在已对问题进行了编辑以显示用户未将变量正确传递给模块,因此它没有帮助。
    • 根据您的建议,只有当我还将 variables.tf 文件复制到与 main.tf 相同的级别时,它才有效。这很奇怪,需要相同变量文件的 2 个副本。 terraform.io/docs/configuration/… 显然限制了将值分配给根级变量,并且不提供覆盖模块级变量。
    • @sumanj 这就是 terraform 的工作方式,所有文件夹都是模块,这就是为什么你使用 source = "./api" 下的所有“沙盒”变量都不是全局的......你不需要只复制你需要的变量文件,如果它们相同,你可以做一个符号链接
    猜你喜欢
    • 2022-01-27
    • 1970-01-01
    • 2021-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-08
    相关资源
    最近更新 更多