首页 > 解决方案 > Terraform 模块变量.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
    }

这是根变量.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 文件。

预先感谢您的帮助。

标签: moduleterraformterraform-provider-azure

解决方案


模块是独立的。成功执行 rg 模块所需的所有变量都在./modules/rg/variables.tf.

由于您没有为它们定义任何默认值,因此它们是未初始化的。因此,在您的根 main.tf 中,当您创建createrg模块时,您必须明确设置所有这些变量。

关于命名,在您的“.root/main”中,您的变量不需要与var.my_loc.root /main 中的变量名称相同。只要您要设置模块的所有这些未初始化的变量,它们就可以具有任何名称或常量。var.rgName./modules/rg/variables.tf


推荐阅读