vm query works
This commit is contained in:
106
internal/vcenter/vcenter.go
Normal file
106
internal/vcenter/vcenter.go
Normal file
@@ -0,0 +1,106 @@
|
||||
package vcenter
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"log"
|
||||
"log/slog"
|
||||
"net/url"
|
||||
"os"
|
||||
|
||||
"github.com/vmware/govmomi"
|
||||
"github.com/vmware/govmomi/view"
|
||||
"github.com/vmware/govmomi/vim25/mo"
|
||||
"github.com/vmware/govmomi/vim25/soap"
|
||||
)
|
||||
|
||||
type Vcenter struct {
|
||||
logger *slog.Logger
|
||||
ctx context.Context
|
||||
client *govmomi.Client
|
||||
}
|
||||
|
||||
// New creates a new Vcenter with the given logger
|
||||
func New(logger *slog.Logger) *Vcenter {
|
||||
|
||||
//ctx, cancel := context.WithCancel(context.Background())
|
||||
//defer cancel()
|
||||
|
||||
return &Vcenter{
|
||||
logger: logger,
|
||||
ctx: context.Background(),
|
||||
}
|
||||
}
|
||||
|
||||
func (v *Vcenter) Login(vUrl string) error {
|
||||
var insecure bool
|
||||
|
||||
insecureString := os.Getenv("VCENTER_INSECURE")
|
||||
username := os.Getenv("VCENTER_USERNAME")
|
||||
password := os.Getenv("VCENTER_PASSWORD")
|
||||
|
||||
// Connect to vCenter
|
||||
u, err := soap.ParseURL(vUrl)
|
||||
if err != nil {
|
||||
log.Fatalf("Error parsing vCenter URL: %s", err)
|
||||
}
|
||||
|
||||
u.User = url.UserPassword(username, password)
|
||||
|
||||
/*
|
||||
c, err := govmomi.NewClient(ctx, u, insecure)
|
||||
if err != nil {
|
||||
log.Fatalf("Error connecting to vCenter: %s", err)
|
||||
}
|
||||
*/
|
||||
|
||||
if insecureString == "true" {
|
||||
insecure = true
|
||||
}
|
||||
|
||||
c, err := govmomi.NewClient(v.ctx, u, insecure)
|
||||
if err != nil {
|
||||
v.logger.Error("Unable to connect to vCenter", "error", err)
|
||||
return fmt.Errorf("unable to connect to vCenter : %s", err)
|
||||
}
|
||||
|
||||
//defer c.Logout(v.ctx)
|
||||
|
||||
v.client = c
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (v *Vcenter) Logout() error {
|
||||
return v.client.Logout(v.ctx)
|
||||
}
|
||||
|
||||
func (v *Vcenter) FindVMByName(vmName string) ([]mo.VirtualMachine, error) {
|
||||
m := view.NewManager(v.client.Client)
|
||||
|
||||
vms, err := m.CreateContainerView(v.ctx, v.client.ServiceContent.RootFolder, []string{"VirtualMachine"}, true)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer vms.Destroy(v.ctx)
|
||||
|
||||
var matchingVMs []mo.VirtualMachine
|
||||
|
||||
err = vms.Retrieve(v.ctx, []string{"VirtualMachine"}, []string{"name"}, &matchingVMs)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Temporarily just return all VMs
|
||||
//return matchingVMs, nil
|
||||
|
||||
var result []mo.VirtualMachine
|
||||
|
||||
for _, vm := range matchingVMs {
|
||||
if vm.Name == vmName {
|
||||
result = append(result, vm)
|
||||
}
|
||||
}
|
||||
|
||||
return result, nil
|
||||
}
|
Reference in New Issue
Block a user