validation - Terraform .tfvars 转换解码错误

标签 validation syntax terraform

我正在尝试使用 Terraform 设置一些非常简单的东西,但它给了我一个我以前从未见过的错误。

当我运行 terraform validate -var-file=secrets.tfvars 时,出现以下错误:

Error loading files open /home/MYUSER/Documents/git/packer-with-terraform/terratest/-var-file=secrets.tfvars: no such file or directory

当我运行 terraform plan -var-file=secrets.tfvars 我得到这个:

invalid value "secrets.tfvars" for flag -var-file: Error decoding Terraform vars file: At 1:10: root.variable: unknown type for string *ast.ObjectList

我在同一个文件夹中有三个文件,它们的内容很少:

供应商.tf

provider "aws" {
    region                      = "us-west-1"
    access_key                  = "${var.access_key}"
    secret_key                  = "${var.secret_key}"
}

主.tf

resource "aws_instance" "master_proxy" {
    ami                         = "ami-123sample"
    instance_type               = "t2.micro"
}

secret .tfvars

variable "access_key" { default = "sampleaccesskey" }
variable "secret_key" { default = "samplesecretkey" }

如果我直接设置 access_keysecret_key,而不是通过变量,那么它就可以工作。与 secret 文件类似的设置和诸如此类的东西适用于我的另一个项目;我只是不明白这里出了什么问题。

最佳答案

首先,terraform validate 验证一个包含.tf 文件的文件夹,以检查语法是否正确。您不能将单独的 vars 文件传递​​给命令。事实上,terraform validate 甚至不会检查您的变量是否设置正确。

其次,您的 secrets.tfvars 文件使用了错误的语法。相反,您希望它看起来更像这样:

secret .tfvars:

access_key = "sampleaccesskey"
secret_key = "samplesecretkey"

但这会出错,因为您实际上没有定义 .tf 文件中的变量:

供应商.tf

variable "access_key" { default = "sampleaccesskey" }
variable "secret_key" { default = "samplesecretkey" }

provider "aws" {
    region                      = "us-west-1"
    access_key                  = "${var.access_key}"
    secret_key                  = "${var.secret_key}"
}

如果您没有合理的变量默认值(例如在这种情况下通常如此),那么您可以删除该变量的 default 参数,这将使 Terraform 计划出错,因为未设置必需的变量:

供应商.tf

variable "access_key" {}
variable "secret_key" {}

provider "aws" {
    region                      = "us-west-1"
    access_key                  = "${var.access_key}"
    secret_key                  = "${var.secret_key}"
}

关于validation - Terraform .tfvars 转换解码错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38586046/

相关文章:

azure - 使用azure terraform在3个azure虚拟机中执行shell脚本

c - C 中的数据验证

javascript - JS "for in"错误 IE7/8

Ruby:从模块中重新打开类

regex - 为什么人们捍卫正则表达式语法?

terraform - 在终端中打印 terraform 模板渲染输出?

security - 您会让哪些字符作为密码无效?

validation - 在XSD的类型为'system.security.permissions.fileiopermission的许可请求中,mscorlib版本= 4.0.0.0

python - 为什么在 Python 中调用数字文字上的方法会出现语法错误?

amazon-web-services - 用于更新现有启动模板的 Terraform 配置