Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 引用使用terraform在循环中创建的特定公用ip_Linux_Azure_Virtual Machine_Terraform - Fatal编程技术网

Linux 引用使用terraform在循环中创建的特定公用ip

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

我无法将使用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
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,当你尝试并且它真的对你有效时,请接受它作为答案。