【问题标题】:Terraform : How to pass output value of one module to another module in azureTerraform:如何将一个模块的输出值传递给天蓝色的另一个模块
【发布时间】:2019-08-16 12:27:16
【问题描述】:

环境文件夹设置:

  • 模块 A 包含 rg.tf 文件以在 azure 上创建资源组。
  • 模块 B 包含 vnet.tf 文件,它需要来自模块 A 的资源组名称。

如何将一个的输出用于另一个?

Terraform -v = Terraform v0.12.6

文件夹结构:

C:\Terraform\ResourceGroup
   \rg.tf 
   \var.tf
   \output.tf
C:\Terraform\Vnet
    \vnet.tf 

rg.tf 包含:

provider "azurerm" { 
  Subscription ID : xxxxxxxxxxxxxx
  Subscription Name :xxxxxxxxxxxxx
  Client ID : xxxxxxxxxxxxxxxxx
  Client Secret: xxxxxxxxxxxx
}
terraform {
  backend "azurerm" {
    storage_account_name  = xxxxxxxxxxxxx
    resource_group_name   = xxxxxxxxxxxxx
    container_name        = "versiontf"
    key                   = "terraform.tfstate"
  }
}
resource "azurerm_resource_group" "res_group" {
  location = "${var.location}"
  name     = "${var.name}"
}

var.tf 包含

variable "location" {
  default     = "West US"
}

variable "name" {
  default = "testing"
}

output.tf 包含:

output "rg_name" {
  value = "${azurerm_resource_group.res_group.name}"
}

vnet.tf 包含:

provider "azurerm" { 
  Subscription ID : xxxxxxxxxxxxxx
  Subscription Name :xxxxxxxxxxxxx
  Client ID : xxxxxxxxxxxxxxxxx
  Client Secret: xxxxxxxxxxxx
}

resource "azurerm_virtual_network" "test" {
  name                = "vnet"
  location            = "east us"
  resource_group_name = "????????????"  (How do i read the resource group name which i created using rg.tf)
  address_space       = ["10.0.0.0/16"]
}

仅供参考:我能够创建输出值并将其添加到后端状态文件。

【问题讨论】:

  • 你能分享你的 Terraform 代码吗?如果它们在单独的文件中,还包括事物的目录布局。
  • @ydaetskcoR 我已经添加了文件夹结构和整个代码。谢谢。
  • 我尝试了下面的代码,但它显示了我发布的以下错误。我尝试更改名称和位置并围绕它进行游戏。能够创建 RG,但在创建 vnet 时会抛出错误。
  • 你能显示错误信息吗?对我来说效果很好。
  • 在 ..\rg\main.tf 第 8 行,在资源“azurerm_resource_group”“rgtest”中:8:资源“azurerm_resource_group”“rgtest”{

标签: azure terraform


【解决方案1】:

您只需要使用文件vnet.tf 中的模块,如下所示:

provider "azurerm" { 
    Subscription ID : xxxxxxxxxxxxxx
    Subscription Name :xxxxxxxxxxxxx
    Client ID : xxxxxxxxxxxxxxxxx
    Client Secret: xxxxxxxxxxxx
}

module "resourceGroup" {
  source = "../ResourceGroup"

  # the variable that you set for your resource group
  name = "rg_name"
  location = "rg_location"

}

resource "azurerm_virtual_network" "test" {
    name                = "vnet"
    location            = "east us"

    # use the module resource group
    resource_group_name = "${module.resourceGroup.rg_name}"     

    address_space       = ["10.0.0.0/16"]
}

【讨论】:

    猜你喜欢
    • 2019-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-11
    • 1970-01-01
    • 2013-01-16
    相关资源
    最近更新 更多