【发布时间】:2021-04-01 18:14:34
【问题描述】:
尝试使用 terraform 模块并遇到一个奇怪的问题(我认为)。这是我的结构: [TF目录结构][1] [1]:https://i.stack.imgur.com/P4fyr.png
这是根 main.tf:
provider "azurerm" {
features {
}
}
module "createrg" {
source = "./modules/rg"
my_loc = var.my_loc
rgName = var.rgName
}
这是根变量.tf
variable "my_loc" {
type = "string"
}
variable "rgName" {
type = "string"
}
这是“rg”模块的 main.tf:
provider "azurerm" {
## dev_subscription_id = var.dev_subscription
features {
}
}
resource "azurerm_resource_group" "rgDev" {
location = var.my_loc
name = var.rgName
}
这是“rg”模块的 variable.tf
variable "my_loc" {
type = "string"
}
variable "rgName" {
type = "string"
}
这里是 dev.tfvars
my_loc = "canadacentral"
rgName = "rg_ModuleTest"
我的计划是:
terraform plan -var-file=./variables/dev.tfvars
由于我刚开始使用 terraform,所以我使用的是最新版本。如果我从一个或两个 variables.tf 中删除任何变量,我会收到错误并且计划不会执行。例如,如果我从根 variables.tf 文件中删除变量声明,我会收到错误:“错误:引用未声明的输入变量”,如果我从 rg 模块中的 variable.tf 中删除变量声明,我会收到一个错误:“错误:不支持的参数...此处不应使用名为“rgName”的参数。”该计划有效的唯一方法是当我在根模块和 rg 模块的 variables.tf 文件中具有相同的变量时。
这就是模块应该如何工作的方式吗?我已经在互联网上搜索了一个解释,但我认为我在这里遗漏了一些东西。我的意思是,如果我要为 20 个资源创建模块,那么认为我必须在两个地方(根目录和相应模块的 variables.tf 文件)复制变量感觉很荒谬。
提前感谢您的帮助。
【问题讨论】:
标签: module terraform terraform-provider-azure