From 1c1909d1f9abb672d4f60cce738f366e8cab67b6 Mon Sep 17 00:00:00 2001 From: avnish30jn Date: Thu, 4 Jan 2018 03:41:01 -0500 Subject: [PATCH] MRPHS-4262: Update CreateVMs call to use round-robin strategy for placements of vm on available hosts in cluster --- virtualmachine/vsphere/vm.go | 44 ++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/virtualmachine/vsphere/vm.go b/virtualmachine/vsphere/vm.go index ca6b1704..35175dde 100644 --- a/virtualmachine/vsphere/vm.go +++ b/virtualmachine/vsphere/vm.go @@ -1832,3 +1832,47 @@ func (vm *VM) ValidateAuth() error { defer vm.cancel() return nil } + +// GetCompatibleHosts: Lists the hosts compatible with the network and datastores +func GetCompatibleHosts(vm *VM) ([]string, error) { + if err := SetupSession(vm); err != nil { + return nil, err + } + defer vm.cancel() + + if len(vm.Datastores) != 0 { + vm.datastore = vm.Datastores[0] + } + + hosts := make([]string, 0) + switch vm.Destination.DestinationType { + case DestinationTypeCluster: + dcMo, err := GetDatacenter(vm) + if err != nil { + return hosts, err + } + crMo, err := findClusterComputeResource(vm, dcMo, + vm.Destination.DestinationName) + if err != nil { + return hosts, err + } + if len(crMo.Host) <= 0 { + err = errNoHostsInCluster + return hosts, err + } + filteredHosts, err := filterHosts(vm, crMo.Host) + if err != nil { + return hosts, err + } + hsMos := []mo.HostSystem{} + err = vm.collector.Retrieve(vm.ctx, filteredHosts, []string{ + "name"}, &hsMos) + if err != nil { + return hosts, err + } + for _, host := range hsMos { + hosts = append(hosts, host.Name) + } + } + return hosts, nil +}