Skip to content

Commit

Permalink
Set moid and add test
Browse files Browse the repository at this point in the history
  • Loading branch information
appilon committed Apr 13, 2023
1 parent 9b4ea83 commit 6402c68
Show file tree
Hide file tree
Showing 2 changed files with 74 additions and 1 deletion.
7 changes: 6 additions & 1 deletion vsphere/data_source_vsphere_virtual_machine.go
Original file line number Diff line number Diff line change
Expand Up @@ -152,13 +152,15 @@ func dataSourceVSphereVirtualMachine() *schema.Resource {
// include the number of cpus, memory, firmware, disks, etc.
structure.MergeSchema(s, schemaVirtualMachineConfigSpec())

// make name/uuid/moid Optional/AtLeastOneOf since UUID lookup is now supported
// make name/uuid/moid Optional/AtLeastOneOf
s["name"].Required = false
s["name"].Optional = true
s["name"].AtLeastOneOf = []string{"name", "uuid", "moid"}

s["uuid"].Required = false
s["uuid"].Optional = true
s["uuid"].AtLeastOneOf = []string{"name", "uuid", "moid"}

s["moid"].Required = false
s["moid"].Optional = true
s["moid"].AtLeastOneOf = []string{"name", "uuid", "moid"}
Expand Down Expand Up @@ -202,6 +204,9 @@ func dataSourceVSphereVirtualMachineRead(d *schema.ResourceData, meta interface{
return fmt.Errorf("error fetching virtual machine: %s", err)
}

// Set the managed object id.
d.Set("moid", vm.Reference().Value)

props, err := virtualmachine.Properties(vm)
if err != nil {
return fmt.Errorf("error fetching virtual machine properties: %s", err)
Expand Down
68 changes: 68 additions & 0 deletions vsphere/data_source_vsphere_virtual_machine_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,52 @@ func TestAccDataSourceVSphereVirtualMachine_uuid(t *testing.T) {
})
}

func TestAccDataSourceVSphereVirtualMachine_moid(t *testing.T) {
resource.Test(t, resource.TestCase{
PreCheck: func() {
RunSweepers()
testAccPreCheck(t)
testAccDataSourceVSphereVirtualMachinePreCheck(t)
},
Providers: testAccProviders,
Steps: []resource.TestStep{
{
Config: testAccDataSourceVSphereVirtualMachineConfigMOID(),
Check: resource.ComposeTestCheckFunc(
resource.TestMatchResourceAttr(
"data.vsphere_virtual_machine.moid",
"id",
regexp.MustCompile("^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$")),
resource.TestCheckResourceAttrSet("data.vsphere_virtual_machine.moid", "guest_id"),
resource.TestCheckResourceAttrSet("data.vsphere_virtual_machine.moid", "scsi_type"),
resource.TestCheckResourceAttrSet("data.vsphere_virtual_machine.moid", "memory"),
resource.TestCheckResourceAttrSet("data.vsphere_virtual_machine.moid", "num_cpus"),
resource.TestCheckResourceAttrSet("data.vsphere_virtual_machine.moid", "num_cores_per_socket"),
resource.TestCheckResourceAttrSet("data.vsphere_virtual_machine.moid", "firmware"),
resource.TestCheckResourceAttrSet("data.vsphere_virtual_machine.moid", "hardware_version"),
resource.TestCheckResourceAttrSet("data.vsphere_virtual_machine.moid", "disks.#"),
resource.TestCheckResourceAttrSet("data.vsphere_virtual_machine.moid", "disks.0.size"),
resource.TestCheckResourceAttrSet("data.vsphere_virtual_machine.moid", "disks.0.eagerly_scrub"),
resource.TestCheckResourceAttrSet("data.vsphere_virtual_machine.moid", "disks.0.thin_provisioned"),
resource.TestCheckResourceAttrSet("data.vsphere_virtual_machine.moid", "disks.0.unit_number"),
resource.TestCheckResourceAttrSet("data.vsphere_virtual_machine.moid", "disks.0.label"),
resource.TestCheckResourceAttrSet("data.vsphere_virtual_machine.moid", "network_interface_types.#"),
resource.TestCheckResourceAttrSet("data.vsphere_virtual_machine.moid", "network_interfaces.#"),
resource.TestCheckResourceAttrSet("data.vsphere_virtual_machine.moid", "network_interfaces.0.adapter_type"),
resource.TestCheckResourceAttrSet("data.vsphere_virtual_machine.moid", "network_interfaces.0.bandwidth_limit"),
resource.TestCheckResourceAttrSet("data.vsphere_virtual_machine.moid", "network_interfaces.0.bandwidth_reservation"),
resource.TestCheckResourceAttrSet("data.vsphere_virtual_machine.moid", "network_interfaces.0.bandwidth_share_level"),
resource.TestCheckResourceAttrSet("data.vsphere_virtual_machine.moid", "network_interfaces.0.bandwidth_share_count"),
resource.TestCheckResourceAttrSet("data.vsphere_virtual_machine.moid", "network_interfaces.0.mac_address"),
resource.TestCheckResourceAttrSet("data.vsphere_virtual_machine.moid", "network_interfaces.0.network_id"),
resource.TestCheckResourceAttrSet("data.vsphere_virtual_machine.moid", "firmware"),
resource.TestCheckResourceAttrSet("data.vsphere_virtual_machine.moid", "moid"),
),
},
},
})
}

func testAccDataSourceVSphereVirtualMachinePreCheck(t *testing.T) {
if os.Getenv("TF_VAR_VSPHERE_DATACENTER") == "" {
t.Skip("set TF_VAR_VSPHERE_DATACENTER to run vsphere_virtual_machine data source acceptance tests")
Expand Down Expand Up @@ -181,6 +227,28 @@ data "vsphere_virtual_machine" "uuid" {
)
}

func testAccDataSourceVSphereVirtualMachineConfigMOID() string {
return fmt.Sprintf(`
%s
variable "template" {
default = "%s"
}
data "vsphere_virtual_machine" "template" {
name = var.template
datacenter_id = data.vsphere_datacenter.rootdc1.id
}
data "vsphere_virtual_machine" "moid" {
moid = data.vsphere_virtual_machine.template.moid
}
`,
testhelper.CombineConfigs(testhelper.ConfigDataRootDC1(), testhelper.ConfigDataRootPortGroup1()),
os.Getenv("TF_VAR_VSPHERE_TEMPLATE"),
)
}

func testAccDataSourceVSphereVirtualMachineConfig() string {
return fmt.Sprintf(`
%s
Expand Down

0 comments on commit 6402c68

Please sign in to comment.