Terraform 附加 NIC 以更正 Azure 中的子网 ID
Terraform attaching NIC to correct subnet id in Azure
我有一个模块可以创建具有 5 个子网的 vNet。该模块使用块将每个子网的 id 写入变量:
output "vnet_subnets" {
description = "The ids of subnets created inside the newly created vNet"
value = azurerm_subnet.subnet.*.id
}
然后我使用块将其输出到状态文件:
output "vnet_subnets" {
value = module.virtual_network.vnet_subnets
}
在状态文件中,输出如下所示:
"vnet_subnets": {
"value": [
"/subscriptions/<my_sub_id>/resourceGroups/rg/providers/Microsoft.Network/virtualNetworks/vnet/subnets/GatewaySubnet",
"/subscriptions/<my_sub_id/resourceGroups/rg/providers/Microsoft.Network/virtualNetworks/vnet/subnets/VDMS",
"/subscriptions/<my_sub_id/resourceGroups/rg/providers/Microsoft.Network/virtualNetworks/vnet/subnets/external",
"/subscriptions/<my_sub_id/resourceGroups/rg/providers/Microsoft.Network/virtualNetworks/vnet/subnets/internal",
"/subscriptions/<my_sub_id/resourceGroups/rg/providers/Microsoft.Network/virtualNetworks/vnet/subnets/management"
],
"type": [
"tuple",
[
"string",
"string",
"string",
"string",
"string"
]
]
}
我有一个虚拟机部署,我想使用 vnet 状态文件作为数据源,以便我可以将 VM 分配到正确的子网。我的问题是,如何在 vnet_subnets
输出集中找到正确的子网?
根据您的要求,我认为您遇到的问题是您无法从输出中找到您想要使用的特殊版本。
我认为您可以使用的可能方法是将子网 ID 放入具有子网名称的映射中。然后您可以使用带有名称的特殊子网并从地图中获取它。以下是您可以查看的示例代码:
variable "subnets" {
type = list(string)
default = [
"test1",
"test2",
"test3"
]
}
variable "subnet_prefix" {
type = list(string)
default = [
"10.0.1.0/24",
"10.0.2.0/24",
"10.0.3.0/24"
]
}
resource "azurerm_virtual_network" "example" {
name = "acceptanceTestVirtualNetwork1"
address_space = ["10.0.0.0/16"]
location = "East US"
resource_group_name = "group_name"
}
resource "azurerm_subnet" "example" {
count = length(var.subnets)
name = element(var.subnets, count.index)
resource_group_name = "group_name"
virtual_network_name = azurerm_virtual_network.example.name
address_prefix = element(var.subnet_prefix, count.index)
}
output "subnets_map" {
value = zipmap(var.subnets, azurerm_subnet.example.*.id)
}
我看到你使用了模块,所以你可以将 vnet 模块的输出作为 VM 模块的输入。
我有一个模块可以创建具有 5 个子网的 vNet。该模块使用块将每个子网的 id 写入变量:
output "vnet_subnets" {
description = "The ids of subnets created inside the newly created vNet"
value = azurerm_subnet.subnet.*.id
}
然后我使用块将其输出到状态文件:
output "vnet_subnets" {
value = module.virtual_network.vnet_subnets
}
在状态文件中,输出如下所示:
"vnet_subnets": {
"value": [
"/subscriptions/<my_sub_id>/resourceGroups/rg/providers/Microsoft.Network/virtualNetworks/vnet/subnets/GatewaySubnet",
"/subscriptions/<my_sub_id/resourceGroups/rg/providers/Microsoft.Network/virtualNetworks/vnet/subnets/VDMS",
"/subscriptions/<my_sub_id/resourceGroups/rg/providers/Microsoft.Network/virtualNetworks/vnet/subnets/external",
"/subscriptions/<my_sub_id/resourceGroups/rg/providers/Microsoft.Network/virtualNetworks/vnet/subnets/internal",
"/subscriptions/<my_sub_id/resourceGroups/rg/providers/Microsoft.Network/virtualNetworks/vnet/subnets/management"
],
"type": [
"tuple",
[
"string",
"string",
"string",
"string",
"string"
]
]
}
我有一个虚拟机部署,我想使用 vnet 状态文件作为数据源,以便我可以将 VM 分配到正确的子网。我的问题是,如何在 vnet_subnets
输出集中找到正确的子网?
根据您的要求,我认为您遇到的问题是您无法从输出中找到您想要使用的特殊版本。
我认为您可以使用的可能方法是将子网 ID 放入具有子网名称的映射中。然后您可以使用带有名称的特殊子网并从地图中获取它。以下是您可以查看的示例代码:
variable "subnets" {
type = list(string)
default = [
"test1",
"test2",
"test3"
]
}
variable "subnet_prefix" {
type = list(string)
default = [
"10.0.1.0/24",
"10.0.2.0/24",
"10.0.3.0/24"
]
}
resource "azurerm_virtual_network" "example" {
name = "acceptanceTestVirtualNetwork1"
address_space = ["10.0.0.0/16"]
location = "East US"
resource_group_name = "group_name"
}
resource "azurerm_subnet" "example" {
count = length(var.subnets)
name = element(var.subnets, count.index)
resource_group_name = "group_name"
virtual_network_name = azurerm_virtual_network.example.name
address_prefix = element(var.subnet_prefix, count.index)
}
output "subnets_map" {
value = zipmap(var.subnets, azurerm_subnet.example.*.id)
}
我看到你使用了模块,所以你可以将 vnet 模块的输出作为 VM 模块的输入。