gpt4 book ai didi

azure - 来自远程 terraform 模块的输出变量

转载 作者:行者123 更新时间:2023-12-03 04:57:17 25 4
gpt4 key购买 nike

对于一个项目,我使用远程模块(git 模块),这些模块在 terraformMain.tf 文件中调用和执行。

例如,我使用 Azure 资源组模块,该模块通过“count = length (var.resourcegroups)”在 terraformMain.tf 中循环。我现在遇到的问题是,我想在下一个模块(创建 VNET)中使用两个创建的资源组之一,但我不断遇到以下错误:

Error: Unsupported attribute

on outputs.tf line 2, in output "RG": 2: value =[module.resourceGroups.resource_group_name]

This value does not have any attributes.

Unsupported attribute

on terraformMain.tf line 33, in module "vnet": 33:resourcegroup_name = module.resourceGroups.resource_group_name[0]

This value does not have any attributes.

Azure 资源组模块代码如下所示:

ma​​in.tf

resource "azurerm_resource_group" "RG" {
name = var.resource_group_name
location = var.location
}

变量.tf

variable "location" {
type = string
}

variable "resource_group_name" {
type = string
}

outputs.tf

output "resource_group_names" {
value = concat(azurerm_resource_group.RG.*.name, [""])[0]
}

terraformMain.tf 的代码如下所示:

terraformMain.tf

terraform {
required_version = ">= 0.13"

required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "2.45.1"
}
}

backend "azurerm" {
resource_group_name = "__terraformresourcegroup__"
storage_account_name = "__terraformstorageaccount__"
container_name = "__terraformcontainer__"
key = "__terraformkey__"
}

}

provider "azurerm" {
features {}
}

module "resourceGroups" {
count = length(var.resourcegroups)
source = "git::https://*****@dev.azure.com/****/TerraformAzureModules/_git/ResourceGroup"
location = var.location
resource_group_name = var.resourcegroups[count.index]
}

module "vnet" {
source = "git::https://*****@dev.azure.com/****/TerraformAzureModules/_git/VirtualNetwork"
resourcegroup_name = module.resourceGroups.resource_group_name[0]
location = var.location
vnet_name = var.vnet_name

count = length(var.subnet_names)
vnet_cidr = var.vnet_cidr[count.index]
subnet_cidr = var.subnet_cidr[count.index]
subnet_name = var.subnet_names[count.index]
}

变量.tf

variable "location" {
default = "westeurope"
}

variable "resourcegroups" {
default = ["rg1", "rg2"]
}

#Azure Vnet / Subnet
variable "vnet_name" {
default = "vnet_1"
}
variable "subnet_names" {
default = ["subnet1", "subnet2"]
}
variable "vnet_cidr" {
default = ["10.116.15.0/24"]
}
variable "subnet_cidr" {
default = ["10.116.15.0/26", "10.116.15.128/27"]
}

outputs.tf

output "RG" {
value = [module.resourceGroups.resource_group_name]
}

感谢任何帮助!

最佳答案

您的 resourceGroups 模块设置了 count = length(var.resourcegroups),因此 module.resourceGroups 是一个对象列表,因此在访问属性之前,您需要从列表中请求特定元素:

module.resourceGroups[0].resource_group_name

或者,如果您的目标是返回所有资源组名称的列表,则可以使用 the [*] operator简洁地访问每个元素的 resource_group_name 参数并以列表形式返回结果:

resource.resourceGroups[*].resource_group_name

关于azure - 来自远程 terraform 模块的输出变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66014827/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com