0

我正在尝试使用govmomi library确定我的 ESX 资产中每台服务器的集群成员资格。从文档中,它看起来像ComputeResource嵌入在ClusterComputeResource但我没有阅读它。到目前为止,我有:

package main

import (
        "context"
        "fmt"
        "log"
        "net/url"
        "github.com/crooks/vmware_exporter/config"
        "github.com/vmware/govmomi/session/cache"
        "github.com/vmware/govmomi/vim25"
        "github.com/vmware/govmomi/vim25/mo"
        "github.com/vmware/govmomi/view"
        "github.com/vmware/govmomi/vim25/soap"
)

var (
        cfg *config.Config
)

func newClient(ctx context.Context) (*vim25.Client, error) {
        u, err := soap.ParseURL(cfg.API.URL)
        u.User = url.UserPassword(cfg.API.UserID, cfg.API.Password)
        s := &cache.Session{
                URL: u,
                Insecure: cfg.API.Insecure,
        }

        c := new(vim25.Client)
        err = s.Login(ctx, c, nil)
        if err != nil {
                return nil, err
        }

        return c, nil
}

func main() {
        var err error
        flags := config.ParseFlags()
        cfg, err = config.ParseConfig(flags.ConfigFile)
        if err != nil {
                log.Fatal(err)
        }

        ctx := context.Background()
    c, err := newClient(ctx)
    if err != nil {
        log.Fatal(err)
    }

        m := view.NewManager(c)
        v, err := m.CreateContainerView(ctx, c.ServiceContent.RootFolder, []string{"ClusterComputeResource"}, true)
    if err != nil {
        log.Fatal(err)
    }
    defer v.Destroy(ctx)

        var hss []mo.ClusterComputeResource
        err = v.Retrieve(ctx, []string{"ClusterComputeResource"}, []string{"host", "summary", "name"}, &hss)
        if err != nil {
                log.Fatalf("Retrieval Error: %v", err)
        }
        for _, hs := range hss {
                fmt.Printf("%+v\n", hs.Name)
                fmt.Printf("Host: %+v\n", hs.Host)
                fmt.Printf("%+v\n", hs.Summary)
        }
}

host属性中,我可以看到以下形式的集群节点: [HostSystem:host-8600 HostSystem:host-8571] 这些看起来像 HostSystem 对象,但不是我可以从中提取项目(如主机名)的结构。

使用govc,我的目标是微不足道的!govc tree <DC>/host/<cluster>.

4

0 回答 0