Terraform 如何将文件路径传递到模块?
我正在学习terraform模块 我已经为Google Provider创建了一个模块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"
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的编辑。我将阅读你提到的文档并尝试一下。