diff options
Diffstat (limited to '')
-rw-r--r-- | src/go/collectors/go.d.plugin/modules/vsphere/resources/resources.go | 137 |
1 files changed, 137 insertions, 0 deletions
diff --git a/src/go/collectors/go.d.plugin/modules/vsphere/resources/resources.go b/src/go/collectors/go.d.plugin/modules/vsphere/resources/resources.go new file mode 100644 index 000000000..7f04a8587 --- /dev/null +++ b/src/go/collectors/go.d.plugin/modules/vsphere/resources/resources.go @@ -0,0 +1,137 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +package resources + +import ( + "github.com/vmware/govmomi/performance" + "github.com/vmware/govmomi/vim25/types" +) + +/* + +``` +Virtual Datacenter Architecture Representation (partial). + +<root> ++-DC0 # Virtual datacenter + +-datastore # Datastore folder (created by system) + | +-Datastore1 + | + +-host # Host folder (created by system) + | +-Folder1 # Host and Cluster folder + | | +-NestedFolder1 + | | | +-Cluster1 + | | | | +-Host1 + | +-Cluster2 + | | +-Host2 + | | | +-VM1 + | | | +-VM2 + | | | +-hadoop1 + | +-Host3 # Dummy folder for non-clustered host (created by system) + | | +-Host3 + | | | +-VM3 + | | | +-VM4 + | | | + +-vm # VM folder (created by system) + | +-VM1 + | +-VM2 + | +-Folder2 # VM and Template folder + | | +-hadoop1 + | | +-NestedFolder1 + | | | +-VM3 + | | | +-VM4 +``` +*/ + +type Resources struct { + DataCenters DataCenters + Folders Folders + Clusters Clusters + Hosts Hosts + VMs VMs +} + +type ( + Datacenter struct { + Name string + ID string + } + + Folder struct { + Name string + ID string + ParentID string + } + + HierarchyValue struct { + ID, Name string + } + + ClusterHierarchy struct { + DC HierarchyValue + } + Cluster struct { + Name string + ID string + ParentID string + Hier ClusterHierarchy + } + + HostHierarchy struct { + DC HierarchyValue + Cluster HierarchyValue + } + Host struct { + Name string + ID string + ParentID string + Hier HostHierarchy + OverallStatus string + MetricList performance.MetricList + Ref types.ManagedObjectReference + } + + VMHierarchy struct { + DC HierarchyValue + Cluster HierarchyValue + Host HierarchyValue + } + + VM struct { + Name string + ID string + ParentID string + Hier VMHierarchy + OverallStatus string + MetricList performance.MetricList + Ref types.ManagedObjectReference + } +) + +func (v HierarchyValue) IsSet() bool { return v.ID != "" && v.Name != "" } +func (v *HierarchyValue) Set(id, name string) { v.ID = id; v.Name = name } + +func (h ClusterHierarchy) IsSet() bool { return h.DC.IsSet() } +func (h HostHierarchy) IsSet() bool { return h.DC.IsSet() && h.Cluster.IsSet() } +func (h VMHierarchy) IsSet() bool { return h.DC.IsSet() && h.Cluster.IsSet() && h.Host.IsSet() } + +type ( + DataCenters map[string]*Datacenter + Folders map[string]*Folder + Clusters map[string]*Cluster + Hosts map[string]*Host + VMs map[string]*VM +) + +func (dcs DataCenters) Put(dc *Datacenter) { dcs[dc.ID] = dc } +func (dcs DataCenters) Get(id string) *Datacenter { return dcs[id] } +func (fs Folders) Put(folder *Folder) { fs[folder.ID] = folder } +func (fs Folders) Get(id string) *Folder { return fs[id] } +func (cs Clusters) Put(cluster *Cluster) { cs[cluster.ID] = cluster } +func (cs Clusters) Get(id string) *Cluster { return cs[id] } +func (hs Hosts) Put(host *Host) { hs[host.ID] = host } +func (hs Hosts) Remove(id string) { delete(hs, id) } +func (hs Hosts) Get(id string) *Host { return hs[id] } +func (vs VMs) Put(vm *VM) { vs[vm.ID] = vm } +func (vs VMs) Remove(id string) { delete(vs, id) } +func (vs VMs) Get(id string) *VM { return vs[id] } |