首页 > 解决方案 > 无法使用 terraform 获取 VM 的 vSphere Instance UUID

问题描述

我们已经使用 terraform 在 vSphere 中配置了一个 VM,它会在状态文件中返回 VM 详细信息。但它不会返回用于唯一标识 vCenter 中的 VM 的 VM Instance UUID。

它仅提供无法用于进行 vSphere API 调用的 VM uuid。vSphere API 需要实例 UUID 来识别 VM。

任何帮助/指针将不胜感激。

以下是在 vSphere 中配置 VM 的主要 terraform 文件:

###############################
#Description: to provide linux vm using Vsphere
#Owner: Iautomate
#Created On: 29th Oct, 2020
#Output: Provides a Linux Vm using a template
####################################
#VMWARE PROVIDER
provider "vsphere" {
  version        = "1.12"
  user           = var.vsphere_user
  password       = var.vsphere_password
  vsphere_server = var.vsphere_server

  # If you have a self-signed cert
  allow_unverified_ssl = true
}

data "vsphere_datacenter" "dc" {
  name = var.datacenter_name
}

data "vsphere_datastore" "datastore" {
  name          = var.datastore_name
  datacenter_id = data.vsphere_datacenter.dc.id
}

data "vsphere_resource_pool" "pool" {
  name          = var.resource_pool
  datacenter_id = data.vsphere_datacenter.dc.id
}

data "vsphere_network" "network" {
  name          = var.network_name
  datacenter_id = data.vsphere_datacenter.dc.id
}

data "vsphere_virtual_machine" "template" {
  name          = var.template_name
  datacenter_id = data.vsphere_datacenter.dc.id
}
resource "vsphere_virtual_machine" "vm" {
  name             = var.vm_name
  resource_pool_id = data.vsphere_resource_pool.pool.id
  datastore_id     = data.vsphere_datastore.datastore.id

  num_cpus = var.cpus
  memory   = var.mem
  guest_id = var.guest

  network_interface {
    network_id = data.vsphere_network.network.id
  }

  disk {
    label = var.disk_label
    size  = var.disk_size
  }

  clone {
    template_uuid = data.vsphere_virtual_machine.template.id

    customize {
      linux_options {
        host_name = var.vm_name
        domain    = var.domain_name
      }
      network_interface {
        ipv4_address = var.ipaddress
        ipv4_netmask = var.netmask
      }

      ipv4_gateway    = var.gateway
    }
  }
}

==================================================== ================

它接受另一个提供所有参数的变量文件。

正在配置 VM,但 terraform 未返回用于在 vCenter 中标识 VM 的唯一 id-Instance UUID。有什么方法可以让我将此实例 UUID 作为 terraform 中的响应?

标签: terraformvsphereterraform-provider-vsphere

解决方案


您可以使用输出块的概念来返回有关已创建 VM 的一些信息。

资源块返回的属性vsphere_virtual_machine可以在这里找到:属性参考

关于输出块的信息可以在这里找到:输出命令

可以添加到您的代码中以生成 UUID 和 MoRef 的几个示例:

output "vm_uuid" {
  value = vsphere_virtual_machine.vm.uuid
}

output "vm_moref" {
  value = vsphere_virtual_machine.vm.moid
}

推荐阅读