Skip to content

Commit

Permalink
Merge pull request #28 from mikerosile/master
Browse files Browse the repository at this point in the history
Add cluster mapping for hosts
  • Loading branch information
sofixa committed Aug 28, 2017
2 parents 64e9f3e + 1fb821f commit d62d5bf
Showing 1 changed file with 43 additions and 27 deletions.
70 changes: 43 additions & 27 deletions vsphere-influxdb.go
Expand Up @@ -253,7 +253,9 @@ func (vcenter *VCenter) Query(config Configuration, InfluxDBClient influxclient.

newMors := []types.ManagedObjectReference{}

spew.Dump(mors)
if debug == true {
spew.Dump(mors)
}
// Assign each MORS type to a specific array
for _, mor := range mors {
if mor.Type == "VirtualMachine" {
Expand All @@ -268,9 +270,9 @@ func (vcenter *VCenter) Query(config Configuration, InfluxDBClient influxclient.
respoolRefs = append(respoolRefs, mor)
}
}

// Copy the mors without the clusters
mors = newMors

pc := property.DefaultCollector(client.Client)

// Retrieve properties for all vms
Expand All @@ -283,12 +285,20 @@ func (vcenter *VCenter) Query(config Configuration, InfluxDBClient influxclient.

// Retrieve properties for hosts
var hsmo []mo.HostSystem
err = pc.Retrieve(ctx, hostRefs, []string{"summary"}, &hsmo)
err = pc.Retrieve(ctx, hostRefs, []string{"parent", "summary"}, &hsmo)
if err != nil {
fmt.Println(err)
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
var rpmo []mo.ResourcePool
err = pc.Retrieve(ctx, respoolRefs, []string{"summary"}, &rpmo)
Expand Down Expand Up @@ -331,36 +341,40 @@ func (vcenter *VCenter) Query(config Configuration, InfluxDBClient influxclient.
// Initialize the map that will hold the VM MOR to cluster reference
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
if len(clusterRefs) > 0 {
if debug == true {
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 {
if debug == true {
stdlog.Println("--VM ID - you should see every VM ID here--")
stdlog.Println(vm.Key.Value)
}
// Step 1 : Get ObjectContents and Host info for VM
// The host is found under the runtime structure.

// 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
Expand All @@ -377,6 +391,8 @@ func (vcenter *VCenter) Query(config Configuration, InfluxDBClient influxclient.
for _, host := range hsmo {
hostSummary[host.Self] = make(map[string]string)
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]["cpu_corecount_total"] = int64(host.Summary.Hardware.NumCpuThreads)
}
Expand Down

0 comments on commit d62d5bf

Please sign in to comment.