我正在为我的基础设施开发地形配置模块。我的结构如下所示,
terra1
|
|---terra1.tf
main.tf
main.tf
module "terra_module" {
source = "./terra1/"
}
terra1.tf
variable "PW" {}
output "data" {
value = "${var.PW}"
}
terra1.tf
在子目录中,它包含我的模块代码。当我通过main.tf
文件调用它时,它会给我变量错误.
##Command
TF_VAR_PW=bar terraform apply
顺便一提 如果我在它自己的目录上运行 terra1,我没有收到任何错误.
问题:通过模块使用环境变量,而无需在每次调用中分配它(!!从模块!!)
我该如何解决这个问题?
谢谢。
在你的模块中,它无法知道你试图通过TF_VAR_XXX
执行的环境变量。 你必须建造一座桥来转移它。
这是修复程序
variable "PW" {}
module "terra_module" {
source = "./terra1/"
PW = "${var.PW}"
}
我知道这是一些烦人的复制/粘贴工作,但这就是terraform
的工作方式
如果要从此模块获取输出,则需要添加另一个output
(将其传输回)
因此,完整的main.tf
变成了:
variable "PW" {}
module "terra_module" {
source = "./terra1/"
PW = "${var.PW}"
}
output "data" {
value = "${module.terra_module.data}"
}
然后你会得到:
$ TF_VAR_PW=bar terraform apply
Apply complete! Resources: 0 added, 0 changed, 0 destroyed.
Outputs:
data = bar
我认为您缺少从模块发送变体。Yo 可以将您的 main.tf 更改为:
module "terra_module" {
source = "./terra1/"
PW = "someValue"
}