Terraform 模块 variables.tf
Terraform Module variables.tf
尝试使用 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
}
这是根variables.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 文件。
预先感谢您的帮助。
Modules 是独立的。成功执行 rg 模块所需的所有变量都在 ./modules/rg/variables.tf
.
中定义
因为你还没有为它们定义任何default values,所以它们被单元化了。因此,在您的根 main.tf 中,当您创建 createrg
模块时,您必须 显式设置 所有这些变量。
关于命名,在你的'.root/main'中,你的变量 var.my_loc
和 var.rgName
不需要与 ./modules/rg/variables.tf
中的变量同名.它们可以有任何名称或常量,只要您要设置模块的所有这些未初始化变量即可。
尝试使用 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
}
这是根variables.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 文件。
预先感谢您的帮助。
Modules 是独立的。成功执行 rg 模块所需的所有变量都在 ./modules/rg/variables.tf
.
因为你还没有为它们定义任何default values,所以它们被单元化了。因此,在您的根 main.tf 中,当您创建 createrg
模块时,您必须 显式设置 所有这些变量。
关于命名,在你的'.root/main'中,你的变量 var.my_loc
和 var.rgName
不需要与 ./modules/rg/variables.tf
中的变量同名.它们可以有任何名称或常量,只要您要设置模块的所有这些未初始化变量即可。