首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Terraform从输出中删除子描述详细信息

Terraform从输出中删除子描述详细信息
EN

Stack Overflow用户
提问于 2019-01-21 08:56:07
回答 3查看 166关注 0票数 0

我以下列方式宣布了安全小组:

代码语言:javascript
复制
resource "azurerm_network_security_group" "wan" {
  count               = "${var.enable_wan_subnet ? 1 : 0}"
  provider            = "azurerm.base"
  name                = "${format("%s-%s", var.environment_name, "WAN-Subnet-Security-Group")}"
  location            = "${azurerm_resource_group.this.location}"
  resource_group_name = "${azurerm_resource_group.this.name}"

tags = "${
    merge(map("Name", format("%s-%s-%s",var.environment_name,"WAN-Subnets", "Security-Group")), 
    var.tags_global, 
    var.tags_module)
    }"
}

并为该安全组创建了输出:

代码语言:javascript
复制
output "security_groups_id_wan" {
  value = "${azurerm_network_security_group.wan.*.id}"

  depends_on = [
    "azurerm_subnet.wan",
  ]
}

在输出中我得到

实际输出

代码语言:javascript
复制
security_groups_id_wan = [
    /subscriptions/111-222-333-4445/resourceGroups/default_resource_group/providers/Microsoft.Network/networkSecurityGroups/DF-DTAP-WAN-Subnet-Security-Group
]

如何从输出中删除除资源名称之外的所有内容(DTAP子网-安全性-组)

期望输出:

代码语言:javascript
复制
security_groups_id_wan = [
   DF-DTAP-WAN-Subnet-Security-Group
]
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-01-21 12:54:16

您只需使用Terraform函数并更改输出值如下:

代码语言:javascript
复制
output "security_groups_id_wan" {
  value = "${slice(split("/",azurerm_network_security_group.wan.*.id), length(split("/",azurerm_network_security_group.wan.*.id))-1, length(split("/",azurerm_network_security_group.wan.*.id)))}"

  depends_on = [
    "azurerm_subnet.wan",
  ]
}

有了这些函数,您就可以根据需要输出所有资源。有关更多细节,请参见Terraform支持内置函数

更新

使用现有NSG通过Terraform数据和模板进行的测试如下:

代码语言:javascript
复制
data "azurerm_network_security_group" "test" {
        name = "azureUbuntu18-nsg"
        resource_group_name = "charles"
}

output "substring" {
        value = "${slice(split("/",data.azurerm_network_security_group.test.id), length(split("/",data.azurerm_network_security_group.test.id))-1, length(split("/",data.azurerm_network_security_group.test.id)))}"
}

结果的截图如下:

票数 0
EN

Stack Overflow用户

发布于 2019-01-21 09:29:24

您自己用"${format("%s-%s", var.environment_name, "WAN-Subnet-Security-Group")}"构建了这个名称,那么为什么不直接输出它呢?

为了避免重复,您可以将其放入本地,并在资源和输出中引用它:

代码语言:javascript
复制
locals {
  security_group_name = "${format("%s-%s", var.environment_name, "WAN-Subnet-Security-Group")}"
}

resource "azurerm_network_security_group" "wan" {
  count               = "${var.enable_wan_subnet ? 1 : 0}"
  provider            = "azurerm.base"
  name                = "${local.security_group_name}"
  # ...
}

output "security_groups_id_wan" {
  value = "${local.security_group_name}"
}

注意,您也不需要depends_on,因为a)它是一个输出,它无论如何都发生在事情的末尾;b)您已经有了对该资源的隐式依赖,因为您使用了包含该资源的内插。

您可以通过Hashicorp学习平台阅读更多关于Terraform依赖关系的信息。

票数 0
EN

Stack Overflow用户

发布于 2019-01-21 14:50:26

除了@Charles许的回答:必须先将列表转换为字符串

代码语言:javascript
复制
output "subnets_id_wan" {

  value = "${slice(split("/",join(",",azurerm_subnet.wan.*.id)), length(split("/",join(",",azurerm_subnet.wan.*.id)))-1, length(split("/",join(",",azurerm_subnet.wan.*.id))))}"



  depends_on = [
    "azurerm_subnet.wan",
  ]
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54286318

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档