【问题标题】:How to display values from a list in terraform?如何在 terraform 中显示列表中的值?
【发布时间】:2019-03-06 17:01:56
【问题描述】:

我有一个从资源组获取托管磁盘的模块,然后我从另一个模块调用此模块,其中将显示所有托管磁盘的名称。

当我运行计划命令时,我收到一个错误“名称必须是单个值,而不是列表”。如何显示列表中的值??

模块 1 - 获取值

data "azurerm_managed_disk" "disk" {
resource_group_name = "mfa-rg"
name = ["*"]
}

output "disks" {  
value = ["${data.azurerm_managed_disk.disk.name}"]

}

模块 2 - 调用模块 1 来显示值

 module "rgmod"{
 source = "./RG"
 }

output "rgdetails"{
value = "${module.rgmod.disks}"
  }

【问题讨论】:

  • 如果像 disks 输出一样将 rgdetails 输出括在方括号中,错误会消失吗?
  • 不,它没有……我也试过了

标签: azure terraform


【解决方案1】:

在您的问题中,当您创建包含所有 Azure 托管磁盘的列表时,您可以像这样显示列表中的所有磁盘名称:

output "disks" {  
  value = "${data.azurerm_managed_disk.disk.*.name}"
}

我们看一下多接口列表的例子。当您像这样创建多个接口时:

resource "azurerm_network_interface" "test" {
  count               = 5
  name                = "acceptanceTestNetworkInterface1"
  location            = "${azurerm_resource_group.test.location}"
  resource_group_name = "${azurerm_resource_group.test.name}"

  ip_configuration {
    name                          = "testconfiguration1"
    subnet_id                     = "${azurerm_subnet.test.id}"
    private_ip_address_allocation = "Dynamic"
  }

  tags {
    environment = "staging"
  }
}

然后你可以像这样显示所有接口名称:

    output "disks" {  
      value = "${azurerm_network_interface.test.*.id}"
    }

因此,您应该确保该列表是真实的列表。然后像上面一样输出。

【讨论】:

  • 当我通过将通配符 * 放在(名称)列中来获取磁盘时,它不接受它,用什么替代 * 来获取所有磁盘?
  • @user2549572 我认为您不能只将通配符 * 放在名称列中。它需要准确的磁盘名称。
  • @user2549572 还有问题吗?或者,如果它有帮助,你可以接受它。如果你用另一种方式解决,你可以为遇到类似问题的人添加答案。
  • @user2549572 当您想将磁盘放入列表时,您知道所有磁盘名称吗?
猜你喜欢
  • 1970-01-01
  • 2019-05-05
  • 1970-01-01
  • 2021-06-06
  • 2021-01-04
  • 2023-03-15
  • 1970-01-01
  • 2021-12-11
  • 2020-12-03
相关资源
最近更新 更多