azure - 远程 terraform 模块的输出变量
问题描述
对于我使用远程模块(git 模块)的项目,这些模块在 terraformMain.tf 文件中被调用和执行。
例如,我使用 Azure 资源组模块,该模块在 terraformMain.tf 中通过“count = length (var.resourcegroups)”循环。我现在遇到的问题是我想在下一个模块(创建 VNET)中使用两个创建的资源组之一,但我一直遇到以下错误:
错误:不支持的属性
在 output.tf 第 2 行,在输出“RG”中: 2: value = [module.resourceGroups.resource_group_name]
该值没有任何属性。
不支持的属性
在 terraformMain.tf 第 33 行,在模块“vnet”中:33:resourcegroup_name = module.resourceGroups.resource_group_name[0]
该值没有任何属性。
Azure 资源组模块代码如下所示:
主文件
resource "azurerm_resource_group" "RG" {
name = var.resource_group_name
location = var.location
}
变量.tf
variable "location" {
type = string
}
variable "resource_group_name" {
type = string
}
输出.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"]
}
输出.tf
output "RG" {
value = [module.resourceGroups.resource_group_name]
}
任何帮助表示赞赏!
解决方案
您的resourceGroups
模块已count = length(var.resourcegroups)
设置,module.resourceGroups
对象列表也是如此,因此您需要在访问属性之前从列表中请求特定元素:
module.resourceGroups[0].resource_group_name
或者,如果您的目标是返回所有资源组名称的列表,则可以使用运算[*]
符简洁地访问resource_group_name
每个元素的参数并将结果作为列表返回:
resource.resourceGroups[*].resource_group_name
推荐阅读
- rhel7 - 如何解析 YAML 文件以了解 RHEL7 上安装的最新补丁
- c# - AppListEntry.LaunchAsync 与 Launcher.LaunchUriAsync
- html - 如何在溢出的 div 中获取每个项目?
- kubernetes - terminateGracePeriodSeconds 不适用于 KEDA 的队列触发功能
- angular - Angular 接口:在标签名称中使用括号
- javascript - React Material-ui 选择
- laravel - SQLSTATE[23000]:livewire 中的完整性约束违规
- android - 如何使用 Kobo API 将数据从 android 项目发布到 kobotoolbox 表单?
- arduino - 改变四线触摸屏的起源
- c - 使用指针,但发生错误(以退出代码终止:3221225477)