Files
drsscore/packages/chatgpt.go
2023-08-31 10:13:51 +10:00

117 lines
3.4 KiB
Go

package chatgpt
import (
"context"
"fmt"
"log"
"net/url"
"github.com/vmware/govmomi"
"github.com/vmware/govmomi/property"
"github.com/vmware/govmomi/view"
"github.com/vmware/govmomi/vim25"
"github.com/vmware/govmomi/vim25/mo"
)
func connectToVCenter() (*govmomi.Client, error) {
vcenterURL := "https://vc.lab.local/sdk"
vcenterUsername := "nathan"
vcenterPassword := "VMware1!"
u, err := url.Parse(vcenterURL)
if err != nil {
return nil, err
}
ctx := context.Background()
client, err := govmomi.NewClient(ctx, u, true)
if err != nil {
return nil, err
}
err = client.Login(ctx, vcenterUsername, vcenterPassword)
if err != nil {
return nil, err
}
return client, nil
}
func getClusterConfigInfoEx(ctx context.Context, clusterRef *vim25.ClusterComputeResource) (*vim25.ClusterConfigInfoEx, error) {
properties := []string{"configurationEx"}
pc := property.DefaultCollector(clusterRef.Client())
var clusterProps vim25.ClusterComputeResource
err := pc.RetrieveOne(ctx, clusterRef.Reference(), properties, &clusterProps)
if err != nil {
return nil, err
}
return clusterProps.ConfigurationEx, nil
}
func findClusterByName(ctx context.Context, client *vim25.Client, name string) mo.ClusterComputeResource {
// Create a container view so that we can search vCenter
m := view.NewManager(client)
cv, _ := m.CreateContainerView(ctx, c.ServiceContent.RootFolder, []string{"ClusterComputeResource"}, true)
var clusters []mo.ClusterComputeResource
log.Printf("Searching for Cluster '%s'\n", name)
err := cv.Retrieve(ctx, []string{"ClusterComputeResource"}, []string{"summary", "name"}, &clusters)
if err != nil {
log.Printf("Failed searching for Cluster %s : %s\n", name, err)
return mo.ClusterComputeResource{}
} else {
for _, cluster := range clusters {
if cluster.Name == name {
log.Printf("Found corresponding Cluster with MoRef '%s'\n", cluster.Reference())
return cluster
}
}
}
// If we reached here then we didn't find the Cluster
return mo.ClusterComputeResource{}
}
func main() {
client, err := connectToVCenter()
if err != nil {
fmt.Println("Error connecting to vCenter:", err)
return
}
defer client.Logout(context.Background())
// Specify the cluster reference based on your environment
// For example: clusterRef := &vim25.ClusterComputeResource{}
clusterRef := findClusterByName(context.Background(), client.Client, "Cluster")
clusterConfigInfoEx, err := getClusterConfigInfoEx(context.Background(), clusterRef)
if err != nil {
fmt.Println("Error retrieving ClusterConfigInfoEx:", err)
return
}
// Access and print various data from clusterConfigInfoEx
fmt.Printf("Cluster Name: %s\n", clusterConfigInfoEx.Name)
fmt.Printf("Cluster DRS Enabled: %t\n", clusterConfigInfoEx.DrsConfig.Enabled)
// ... other properties ...
fmt.Println("Cluster DRS Automation Level:")
fmt.Printf(" Default: %s\n", clusterConfigInfoEx.DrsConfig.DefaultVmBehavior)
fmt.Printf(" Enable: %s\n", clusterConfigInfoEx.DrsConfig.Enabled.Value)
fmt.Printf(" Override: %s\n", clusterConfigInfoEx.DrsConfig.VmOverrideBehavior)
fmt.Printf("Cluster Admission Control: %t\n", clusterConfigInfoEx.AdmissionControlInfo.Enabled)
// ... other properties ...
// Access and print data about HostGroups
for _, hostGroup := range clusterConfigInfoEx.HostGroup {
fmt.Printf("Host Group Name: %s\n", hostGroup.Name)
fmt.Printf("Host Group Vms: %v\n", hostGroup.Vm)
// ... other properties ...
}
}