Terraform 引用循环资源值

Terraform reference looped resources value

我正在尝试使用配置器将新创建的 Azure 实例的 public IP 地址写入文件。

我能够为一个实例做到这一点。

resource "azurerm_public_ip" "helloterraformips" {
    name = "terraformtestip"
    location = "East US"
    resource_group_name = "${azurerm_resource_group.test.name}"
    public_ip_address_allocation = "dynamic"

    tags {
        environment = "TerraformDemo"
    }
}


resource "null_resource" "ansible-provision" {
depends_on = ["azurerm_virtual_machine.master-vm"]
count = "${var.node-count}"
   provisioner "local-exec" {
    command =  "echo \"[masters]\n ansible_ssh_host=${azurerm_public_ip.helloterraformips.ip_address} \" >> /home/osboxes/ansible-kube/ansible/inventory/testinv"
  }
}

问题是,当我尝试在 VM 通过 Terraform 循环创建时执行相同操作时,我在尝试访问它们时遇到了问题。

resource "azurerm_public_ip" "mysvcs-k8sip" {
  count                        = "${var.node-count}"
  name                         = "mysvcs-k8s-ip-${count.index}"
  location                     = "East US"
  resource_group_name          = "${azurerm_resource_group.mysvcs-res.name}"
  public_ip_address_allocation = "dynamic"
}

resource "null_resource" "ansible-provision" {

  provisioner "local-exec" {
    command =  "echo \"[masters]\n${element(azurerm_public_ip.mysvcs-k8sip.*.ip_address,count.index)} \" >> /home/osboxes/ansible-kube/ansible/inventory/inventory"
  }
 }

我遇到了这个错误

资源 'azurerm_public_ip.mysvcs-k8sip' 没有变量 'azurerm_public_ip.mysvcs-k8sip.*.ip_address'

的属性 'ip_address'

我正在深入研究 Terraform 的语义并尝试各种方法,但到目前为止它不起作用,而且每次迭代创建所有资源也需要时间。任何帮助或提示都会非常有用。

谢谢,

我能够做到并使它正常工作的一个解决方法是 运行 "terraform apply -target=azurerm_virtual_machine.master-vm" 首先创建虚拟机。然后 运行 terraform 再次应用,然后 运行 一个拥有这个

的供应商
resource "null_resource" "ansible-k8snodes"{
  count = "${var.node-count}"

  provisioner "local-exec" {
   command =  "echo \"\n[nodes]\n ${element(azurerm_public_ip.mysvcs-k8sip.*.ip_address,count.index+1)} ansible_ssh_user=testadmin ansible_ssh_pass=Password1234! \"  >>  /home/osboxes/ansible-kube/ansible/inventory/inventory"
  }
}

@Martin - 计数或不计数,没关系,每次都失败。事实上,我的问题上面发布的单个实例代码似乎只工作了一次,当我再次尝试时,它没有工作。感谢您的帮助。