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

Posted

技术标签:

【中文标题】如何获取 vsphere_virtual_machine 的 IP 来运行 ansible-playbook?【英文标题】:How do I get the IP of a vsphere_virtual_machine to run ansible-playbook? 【发布时间】:2020-10-11 09:07: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。

【问题讨论】:

看起来错误出现在self.clone[4] 上,您确定这是正确的吗? 看文档default_ip_address应该是你需要的:terraform.io/docs/providers/vsphere/r/… @HelderSepulveda 感谢您的评论!我通过将'$self.clone[4]' 更改为'$self.default_ip_address' 解决了这个问题。 【参考方案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 地址。

【讨论】:

以上是关于如何获取 vsphere_virtual_machine 的 IP 来运行 ansible-playbook?的主要内容,如果未能解决你的问题,请参考以下文章

JS如何获取OBJECT的值

js如何获取某一个元素,如果获取不到就继续获取,直到获取到后停止获取?

Groovy如何获取访问地址

js如何获取时间

js如何获取地址栏加密参数

webbrowser如何获取cookie中的sessionid