esxlib/esx/inventory_networks.go

58 lines
1.1 KiB
Go
Raw Permalink Normal View History

2023-06-24 19:57:08 +00:00
package esx
import (
"context"
"git.twelvetwelve.org/library/core/log"
"github.com/vmware/govmomi/find"
"github.com/vmware/govmomi/property"
"github.com/vmware/govmomi/vim25/mo"
)
type Networks struct {
ClientRef
}
type Network struct {
Id string
Name string
VLAN int32
}
func (net *Networks) List(ctx context.Context) ([]Network, error) {
finder := find.NewFinder(net.VIM())
host, err := finder.DefaultHostSystem(ctx)
if err != nil {
log.Errorf("Could not find default host")
return nil, err
}
ns, err := host.ConfigManager().NetworkSystem(ctx)
if err != nil {
log.Errorf("Could not get host config")
return nil, err
}
var mns mo.HostNetworkSystem
pc := property.DefaultCollector(net.VIM())
err = pc.RetrieveOne(ctx, ns.Reference(), []string{"networkInfo.portgroup"}, &mns)
if err != nil {
log.Errorf("Could not get portgroup config")
return nil, err
}
networks := make([]Network, 0)
for _, pg := range mns.NetworkInfo.Portgroup {
networks = append(networks, Network{
Id: pg.Spec.Name,
Name: pg.Spec.Name,
VLAN: pg.Spec.VlanId,
})
}
// return mns.NetworkInfo.Portgroup, nil
return networks, nil
}