Linux 引用使用terraform在循环中创建的特定公用ip
我无法将使用terraform创建的第一个azure公共ip正确引用到使用相同terraform脚本创建的网络安全组中 我尝试了各种方法使这条线路正常:Linux 引用使用terraform在循环中创建的特定公用ip,linux,azure,virtual-machine,terraform,Linux,Azure,Virtual Machine,Terraform,我无法将使用terraform创建的第一个azure公共ip正确引用到使用相同terraform脚本创建的网络安全组中 我尝试了各种方法使这条线路正常: source_address_prefix = "${(count.index == 0 ? var.incoming_ip : azurerm_public_ip.test.0.)}" 我试过: azurerm_public_ip.test.0.name azurerm_public_ip.test.0.ip_adress azu
source_address_prefix = "${(count.index == 0 ? var.incoming_ip : azurerm_public_ip.test.0.)}"
我试过:
azurerm_public_ip.test.0.name
azurerm_public_ip.test.0.ip_adress
azurerm_public_ip.test[0]
但我在部署时遇到一个错误,它似乎向脚本传递null或字符串,而不是使用count.index为0创建的第一个实例的public_ip
resource "azurerm_public_ip" "test" {
name = "publicIP-${count.index}"
location = "${var.regions[count.index]}"
resource_group_name = "${element(azurerm_resource_group.test.*.name, count.index)}"
allocation_method = "Static"
count = "${length(var.regions)}"
}
resource "azurerm_network_security_group" "test" {
name = "${var.nameid[count.index]}"
count = "${length(var.regions)}"
location = "${var.regions[count.index]}"
resource_group_name = "${element(azurerm_resource_group.test.*.name, count.index)}"
security_rule {
name = "SSH"
priority = 1001
direction = "Inbound"
access = "Allow"
protocol = "Tcp"
source_port_range = "*"
destination_port_range = "22"
source_address_prefix = "${var.incoming_ip}"
destination_address_prefix = "*"
}
security_rule {
name = "curl"
priority = 1002
direction = "Inbound"
access = "Allow"
protocol = "Tcp"
source_port_range = "*"
destination_port_range = "${(count.index == 0 ? 8888 : 7777)}"
source_address_prefix = "${(count.index == 0 ? var.incoming_ip : azurerm_public_ip.test.0.)}"
destination_address_prefix = "*"
}
}
我期待这句话:
source_address_prefix = "${(count.index == 0 ? var.incoming_ip : azurerm_public_ip.test.0.name)}"
这样做:
如果count.index==0,则在索引0处创建的azure公共ip的var.incoming_ip else值。此语法起到了作用:
source_address_prefix = "${(count.index == 0 ? var.incoming_ip : element(azurerm_public_ip.test.*.ip_address, 0))}"
解决方案是将其引用为:element(azurerm_public_ip.test.*.ip_address,0)。您可以添加一个答案,为正在寻找它的社区显示解决方案。是否尝试我的解决方案?我想这是你想要的一种更好的格式。我好像记得试过。我稍后再试。thxOK,当你尝试并且它真的对你有效时,请接受它作为答案。