Terraform 如何将文件路径传递到模块?

Terraform 如何将文件路径传递到模块?,terraform,Terraform,我正在学习terraform模块 我已经为Google Provider创建了一个模块 provider "google" { credentials = "${var.credentials}" project = "${var.project_id}" region = "${var.region}" zone = "${var.zone}" } 我想从上面的模块传递凭证文件路径 这是消费者模块 main.tf module "google"

我正在学习terraform模块

我已经为Google Provider创建了一个模块

provider "google" {
  credentials = "${var.credentials}"
  project     = "${var.project_id}"
  region      = "${var.region}"
  zone        = "${var.zone}"
}
我想从上面的模块传递凭证文件路径

这是消费者模块

main.tf

module "google" {
  source      = "../modules/google-provider"
  project_id = "${var.project_id}"
  credentials = "${var.credentials}"
}
variable "credentials" {
    default = "${file("cred.json")}"
}
变量。tf

module "google" {
  source      = "../modules/google-provider"
  project_id = "${var.project_id}"
  credentials = "${var.credentials}"
}
variable "credentials" {
    default = "${file("cred.json")}"
}
这就是我得到的错误:

错误:变量“凭据”:默认值可能不包含插值

我读了这个stackoverflow,但不明白它将如何工作

提前感谢您的帮助。

从文档中

在配置的根模块中声明变量时, 您可以使用CLI选项和环境变量设置它们的值。 当您在子模块中声明它们时,调用模块应该通过 模块块中的值

就你而言

#This is your calling module, hence you need to pass variables to child module from here
module "google" {
  source      = "../modules/google-provider"
  passed_project_id_to_child = "${var.project_id}"
  passed_credentials_to_child = "${var.credentials}"
}
更新:由于某些原因,terraform不允许您使用插值语法读取文件并创建类型为local\u file

然后您需要在模块的配置文件中执行类似操作,或者您也可以为此创建单独的文件

variable passed_project_id_to_child{
  default = "${jsonencode(data.credJSON.content).projectId}"
}
variable passed_credentials_to_child{}

provider "google" {
      credentials = "${var.passed_project_id_to_child}"
      project     = "${var.passed_project_id_to_child}"
      region      = "${var.region}"
      zone        = "${var.zone}"
    }
希望这能奏效。
阅读更多

关于链接的答案,你不明白什么?我不明白应该在哪里定义本地人-在消费者模块或主模块(谷歌提供商)中。我试着在消费者模块中定义它,并把它传下去,但它给了我同样的错误。谢谢你的回答和到文档的链接。但是,我在将文件内容向下传递到模块时遇到问题。我想,我的问题必须改为“如何访问模块中的文件内容?”因为我说
变量“credentials”时出错:默认值可能不包含插值。如果我走错了路,请告诉我。谢谢@clax的编辑。我将阅读你提到的文档并尝试一下。