74 lines
1.4 KiB
Go
Raw Normal View History

2017-08-24 00:23:29 +03:00
package driver
import (
2018-11-01 00:42:24 +03:00
"fmt"
2017-08-24 00:23:29 +03:00
"github.com/vmware/govmomi/object"
2017-08-24 00:54:23 +03:00
"github.com/vmware/govmomi/vim25/mo"
2018-11-01 00:42:24 +03:00
"github.com/vmware/govmomi/vim25/types"
2017-08-24 00:23:29 +03:00
)
2017-08-24 03:06:50 +03:00
type Folder struct {
driver *Driver
folder *object.Folder
2017-08-24 00:23:29 +03:00
}
2017-08-24 03:06:50 +03:00
func (d *Driver) NewFolder(ref *types.ManagedObjectReference) *Folder {
return &Folder{
folder: object.NewFolder(d.client.Client, *ref),
driver: d,
}
}
func (d *Driver) FindFolder(name string) (*Folder, error) {
folders, err := d.datacenter.Folders(d.ctx)
if err != nil {
return nil, err
}
f, err := d.finder.Folder(d.ctx, fmt.Sprintf("%v/%v", folders.VmFolder.InventoryPath, name))
2017-08-24 03:06:50 +03:00
if err != nil {
return nil, err
}
return &Folder{
folder: f,
driver: d,
}, nil
}
func (f *Folder) Info(params ...string) (*mo.Folder, error) {
2017-08-24 00:54:23 +03:00
var p []string
if len(params) == 0 {
p = []string{"*"}
} else {
p = params
}
2017-08-24 03:06:50 +03:00
var info mo.Folder
err := f.folder.Properties(f.driver.ctx, f.folder.Reference(), p, &info)
2017-08-24 00:54:23 +03:00
if err != nil {
return nil, err
}
2017-08-24 03:06:50 +03:00
return &info, nil
2017-08-24 00:54:23 +03:00
}
2017-08-24 03:06:50 +03:00
func (f *Folder) Path() (string, error) {
info, err := f.Info("name", "parent")
2017-08-24 00:54:23 +03:00
if err != nil {
return "", err
}
2017-08-24 03:06:50 +03:00
if info.Parent.Type == "Datacenter" {
2017-08-24 00:54:23 +03:00
return "", nil
} else {
2017-08-24 03:06:50 +03:00
parent := f.driver.NewFolder(info.Parent)
path, err := parent.Path()
2017-08-24 00:54:23 +03:00
if err != nil {
return "", err
}
2017-08-24 03:06:50 +03:00
if path == "" {
return info.Name, nil
2017-08-24 00:54:23 +03:00
} else {
2017-08-24 03:06:50 +03:00
return fmt.Sprintf("%v/%v", path, info.Name), nil
2017-08-24 00:54:23 +03:00
}
}
2017-08-24 00:23:29 +03:00
}