Terraform azure-从输出中删除订阅详细信息
Terraform azure-remove subcription details from output
我通过以下方式声明了安全组:
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)
}"
}
并为该安全组创建了输出:
output "security_groups_id_wan" {
value = "${azurerm_network_security_group.wan.*.id}"
depends_on = [
"azurerm_subnet.wan",
]
}
在输出中我得到
实际产量
security_groups_id_wan = [
/subscriptions/111-222-333-4445/resourceGroups/default_resource_group/providers/Microsoft.Network/networkSecurityGroups/DF-DTAP-WAN-Subnet-Security-Group
]
如何从输出中删除除资源名称 (DF-DTAP-WAN-Subnet-Security-Group) 之外的所有内容
期望输出:
security_groups_id_wan = [
DF-DTAP-WAN-Subnet-Security-Group
]
你用 "${format("%s-%s", var.environment_name, "WAN-Subnet-Security-Group")}"
自己创建了那个名字,那为什么不直接输出呢?
为了避免重复自己,您可以将其放在本地并在资源和输出中引用它:
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 Learn platform.
阅读更多关于 Terraform 依赖项的信息
您可以只使用 Terraform 函数并像这样更改输出值:
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 Supported built-in functions。
更新
通过 Terraform 数据和此处模板对现有 NSG 进行的测试:
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)))}"
}
结果截图在这里:
除了@Charles Xu 的answer:Had 先将列表转换为字符串
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",
]
}
我通过以下方式声明了安全组:
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)
}"
}
并为该安全组创建了输出:
output "security_groups_id_wan" {
value = "${azurerm_network_security_group.wan.*.id}"
depends_on = [
"azurerm_subnet.wan",
]
}
在输出中我得到
实际产量
security_groups_id_wan = [
/subscriptions/111-222-333-4445/resourceGroups/default_resource_group/providers/Microsoft.Network/networkSecurityGroups/DF-DTAP-WAN-Subnet-Security-Group
]
如何从输出中删除除资源名称 (DF-DTAP-WAN-Subnet-Security-Group) 之外的所有内容
期望输出:
security_groups_id_wan = [
DF-DTAP-WAN-Subnet-Security-Group
]
你用 "${format("%s-%s", var.environment_name, "WAN-Subnet-Security-Group")}"
自己创建了那个名字,那为什么不直接输出呢?
为了避免重复自己,您可以将其放在本地并在资源和输出中引用它:
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 Learn platform.
阅读更多关于 Terraform 依赖项的信息您可以只使用 Terraform 函数并像这样更改输出值:
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 Supported built-in functions。
更新
通过 Terraform 数据和此处模板对现有 NSG 进行的测试:
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)))}"
}
结果截图在这里:
除了@Charles Xu 的answer:Had 先将列表转换为字符串
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",
]
}