58 lines
1.1 KiB
Go
58 lines
1.1 KiB
Go
|
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
|
||
|
}
|