cri*_*iss 4 terraform terraform-provider-azure
我有下面的代码,在 for_each 块中创建 vnet:
provider "azurerm" {
features {}
}
variable "vnets" {
type = map(object({
name = string
address_space = list(string)
}))
default = {
"vnet1" = {
"name" = "vnet1",
"address_space" = ["10.0.0.0/16"]
},
"vnet2" = {
"name" = "vnet2",
"address_space" = ["10.1.0.0/16"]
}
}
}
resource "azurerm_resource_group" "vnets" {
name = "vnets"
location = "WestEurope"
}
resource "azurerm_virtual_network" "virtual_network" {
for_each = var.vnets
name = each.value.name
location = "West Europe"
resource_group_name = azurerm_resource_group.vnets.name
address_space = each.value.address_space
}
Run Code Online (Sandbox Code Playgroud)
一切都按计划进行,将创建虚拟网络,但问题是如何从 for_each 块获取创建的资源?
当我键入命令返回资源列表时:
terraform state list
Run Code Online (Sandbox Code Playgroud)
然后我从控制台得到以下输出:
azurerm_resource_group.vnets
azurerm_virtual_network.virtual_network["vnet1"]
azurerm_virtual_network.virtual_network["vnet2"]
Run Code Online (Sandbox Code Playgroud)
当我想使用引用 azurerm_virtual_network.virtual_network["vnet1"] 在代码中的任何位置使用 vnet1 时,我会收到错误。
例如我想查看资源vnet1:
terraform state show azurerm_virtual_network.virtual_network["vnet1"]
Run Code Online (Sandbox Code Playgroud)
我收到这样的错误:
Error parsing instance address: azurerm_virtual_network.virtual_network[vnet1]
This command requires that the address references one specific instance.
To view the available instances, use "terraform state list". Please modify
the address to reference a specific instance.
Run Code Online (Sandbox Code Playgroud)
我尝试了以下命令来访问资源,但它们不起作用:
terraform state show azurerm_virtual_network.virtual_network["vnet1"]
terraform state show 'azurerm_virtual_network.virtual_network["vnet1"]'
terraform state show azurerm_virtual_network.virtual_network[vnet1]
terraform state show azurerm_virtual_network.virtual_network[0]
terraform state show azurerm_virtual_network.virtual_network.vnet1
Run Code Online (Sandbox Code Playgroud)
你知道如何解决吗?
小智 8
另外,如果要在状态文件中显示特定实例,可以使用 terraform state show 'azurerm_virtual_network.virtual_network[\"vnet1\"]'
我在使用模块时遇到了同样的问题。上面引用的是正确答案,以下是如何使用模块执行它:
terraform state show 'module.module_name[\"module_instance\"].resource.resource_name[\"resource_instance\"]
Run Code Online (Sandbox Code Playgroud)
例子:
state show 'module.rsm_keyvault_solution_module_resource[\"development\"].azurerm_key_vault.keyvault_module_resource[\"rsm-playground-dev\"]'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7444 次 |
| 最近记录: |