【问题标题】:How do I get the IP of a vsphere_virtual_machine to run ansible-playbook?如何获取 vsphere_virtual_machine 的 IP 来运行 ansible-playbook?
【发布时间】:2026-02-05 22:55:02
【问题描述】:

我正在尝试调用 IP (ipv4_address) 来执行 Ansible。当我运行计划/应用时,我收到错误:“无效索引:给定键未标识此集合值中的元素。”

我的配置:

resource "vsphere_virtual_machine" "vm" {
  resource_pool_id = data.vsphere_compute_cluster.cluster.resource_pool_id
  datastore_id = data.vsphere_datastore.datastore.id
  network_interface { network_id = data.vsphere_network.network.id } 

  name= "terraform-test"
  num_cpus = 2
  memory   = 4096
  guest_id = "centos8_64Guest"
  memory_hot_add_enabled = true
  cpu_hot_add_enabled = true
  cpu_hot_remove_enabled = true

  disk {
    label = "disk0"
    size  = 20
  }

  clone {
    template_uuid = data.vsphere_virtual_machine.template.id

    customize {
      linux_options {
        host_name = "terraform-test"
        domain    = "local"
        time_zone = "Europe/Madrid"
      }

      network_interface {
        ipv4_address = "10.20.30.25
        ipv4_netmask = 22
        dns_server_list = ["8.8.8.8"]
      }

      ipv4_gateway = "10.20.30.1"
    }
  }

  provisioner "local-exec" {
    command = "sleep 60; ansible-playbook configure.yml -i '${self.clone[4]}',"
  }
}

我的目标是在您刚刚使用 IP 10.20.30.25 创建的服务器上运行 Playbook。

如何获取 vsphere_virtual_machine 的 IP 来运行 ansible-playbook?

【问题讨论】:

  • 看起来错误出现在self.clone[4] 上,您确定这是正确的吗?
  • 看文档default_ip_address应该是你需要的:terraform.io/docs/providers/vsphere/r/…
  • @HelderSepulveda 感谢您的评论!我通过将'${self.clone[4]}' 更改为'${self.default_ip_address}' 解决了这个问题。

标签: terraform vsphere


【解决方案1】:

将@Helder Sapulveda 从 cmets 对问题的指导合并为将来参考的答案:

provisioner "local-exec" {
  command = "sleep 60; ansible-playbook configure.yml -i '${self.default_ip_address}',"
}

您可以使用default_ip_address attribute of vsphere_virtual_machine 获取 ansible-playbook 命令的 IP 地址。

【讨论】:

    最近更新 更多