1
0
mirror of https://github.com/Oxalide/vsphere-influxdb-go.git synced 2023-10-10 11:36:51 +00:00

Altered VM to Cluster mapping and added Host to Cluster mapping

This commit is contained in:
Michael Rosile 2017-08-23 20:59:31 -04:00
parent 64e9f3ea28
commit 911271defd

View File

@ -268,9 +268,9 @@ func (vcenter *VCenter) Query(config Configuration, InfluxDBClient influxclient.
respoolRefs = append(respoolRefs, mor) respoolRefs = append(respoolRefs, mor)
} }
} }
// Copy the mors without the clusters // Copy the mors without the clusters
mors = newMors mors = newMors
pc := property.DefaultCollector(client.Client) pc := property.DefaultCollector(client.Client)
// Retrieve properties for all vms // Retrieve properties for all vms
@ -283,12 +283,20 @@ func (vcenter *VCenter) Query(config Configuration, InfluxDBClient influxclient.
// Retrieve properties for hosts // Retrieve properties for hosts
var hsmo []mo.HostSystem var hsmo []mo.HostSystem
err = pc.Retrieve(ctx, hostRefs, []string{"summary"}, &hsmo) err = pc.Retrieve(ctx, hostRefs, []string{"parent", "summary"}, &hsmo)
if err != nil { if err != nil {
fmt.Println(err) fmt.Println(err)
return return
} }
//Retrieve properties for Cluster(s)
var clmo []mo.ClusterComputeResource
err = pc.Retrieve(ctx, clusterRefs, []string{"name", "configuration", "host"}, &clmo)
if err != nil {
fmt.Println(err)
return
}
//Retrieve properties for ResourcePool //Retrieve properties for ResourcePool
var rpmo []mo.ResourcePool var rpmo []mo.ResourcePool
err = pc.Retrieve(ctx, respoolRefs, []string{"summary"}, &rpmo) err = pc.Retrieve(ctx, respoolRefs, []string{"summary"}, &rpmo)
@ -331,36 +339,40 @@ func (vcenter *VCenter) Query(config Configuration, InfluxDBClient influxclient.
// Initialize the map that will hold the VM MOR to cluster reference // Initialize the map that will hold the VM MOR to cluster reference
vmToCluster := make(map[types.ManagedObjectReference]string) vmToCluster := make(map[types.ManagedObjectReference]string)
// Initialize the map that will hold the VM MOR to cluster reference
hostToCluster := make(map[types.ManagedObjectReference]string)
// Retrieve properties for clusters, if any // Retrieve properties for clusters, if any
if len(clusterRefs) > 0 { if len(clusterRefs) > 0 {
if debug == true { if debug == true {
stdlog.Println("going inside clusters") stdlog.Println("going inside clusters")
} }
var clmo []mo.ClusterComputeResource
err = pc.Retrieve(ctx, clusterRefs, []string{"name", "configuration"}, &clmo)
if err != nil {
fmt.Println(err)
return
}
for _, cl := range clmo {
if debug == true {
stdlog.Println("---cluster name - you should see every cluster here---")
stdlog.Println(cl.Name)
stdlog.Println("You should see the cluster object, cluster configuration object, and cluster configuration dasvmconfig which should contain all VMs")
spew.Dump(cl)
spew.Dump(cl.Configuration)
spew.Dump(cl.Configuration.DasVmConfig)
}
for _, vm := range cl.Configuration.DasVmConfig { // Step 1 : Get ObjectContents and Host info for VM
if debug == true { // The host is found under the runtime structure.
stdlog.Println("--VM ID - you should see every VM ID here--")
stdlog.Println(vm.Key.Value) // Step 2 : Step 2: Get the ManagedObjectReference from the Host we just got.
}
// Step 3 : Get a list all the clusters that vCenter knows about, and for each one, also get the host
// Step 4 : Loop through all clusters that exist (which we got in step 3), and loop through each host
// and see if that host matches the host we got in step 2 as the host of the vm.
// If we find it, return it, otherwise we return null.
for _, vm := range vmmo {
vmhost := vm.Summary.Runtime.Host
for _, cl := range clmo {
for _, host := range cl.Host {
hostToCluster[host] = cl.Name
if *vmhost == host {
vmToCluster[vm.Self] = cl.Name
}
}
}
}
vmToCluster[vm.Key] = cl.Name
}
}
} }
// Retrieve properties for the pools // Retrieve properties for the pools
@ -377,6 +389,8 @@ func (vcenter *VCenter) Query(config Configuration, InfluxDBClient influxclient.
for _, host := range hsmo { for _, host := range hsmo {
hostSummary[host.Self] = make(map[string]string) hostSummary[host.Self] = make(map[string]string)
hostSummary[host.Self]["name"] = host.Summary.Config.Name hostSummary[host.Self]["name"] = host.Summary.Config.Name
hostSummary[host.Self]["cluster"] = hostToCluster[host.Self]
hostExtraMetrics[host.Self] = make(map[string]int64) hostExtraMetrics[host.Self] = make(map[string]int64)
hostExtraMetrics[host.Self]["cpu_corecount_total"] = int64(host.Summary.Hardware.NumCpuThreads) hostExtraMetrics[host.Self]["cpu_corecount_total"] = int64(host.Summary.Hardware.NumCpuThreads)
} }