From c335dc101576763d271c3601fc30e1ec0d745a39 Mon Sep 17 00:00:00 2001 From: Michael Kuzmin Date: Thu, 24 Aug 2017 00:54:23 +0300 Subject: [PATCH] test for subfolders --- builder_acc_test.go | 4 ++-- driver/folder.go | 38 ++++++++++++++++++++++++++++++++++++-- 2 files changed, 38 insertions(+), 4 deletions(-) diff --git a/builder_acc_test.go b/builder_acc_test.go index 24bc57dfa..9d1cf7afc 100644 --- a/builder_acc_test.go +++ b/builder_acc_test.go @@ -108,13 +108,13 @@ func TestBuilderAcc_folder(t *testing.T) { builderT.Test(t, builderT.TestCase{ Builder: &Builder{}, Template: folderConfig(), - Check: checkFolder(t, "folder1"), + Check: checkFolder(t, "folder1/folder2"), }) } func folderConfig() string { config := defaultConfig() - config["folder"] = "folder1" + config["folder"] = "folder1/folder2" config["linked_clone"] = true // speed up return renderConfig(config) } diff --git a/driver/folder.go b/driver/folder.go index 23b9d56d6..5c90ed4ba 100644 --- a/driver/folder.go +++ b/driver/folder.go @@ -3,12 +3,46 @@ package driver import ( "github.com/vmware/govmomi/object" "github.com/vmware/govmomi/vim25/types" + "github.com/vmware/govmomi/vim25/mo" + "fmt" ) func (d *Driver) NewFolder(ref *types.ManagedObjectReference) *object.Folder { return object.NewFolder(d.client.Client, *ref) } -func (d *Driver) GetFolderPath(folder *object.Folder) (string, error) { - return folder.ObjectName(d.ctx) +func (d *Driver) FolderInfo(folder *object.Folder, params ...string) (*mo.Folder, error) { + var p []string + if len(params) == 0 { + p = []string{"*"} + } else { + p = params + } + var folderInfo mo.Folder + err := folder.Properties(d.ctx, folder.Reference(), p, &folderInfo) + if err != nil { + return nil, err + } + return &folderInfo, nil +} + +func (d *Driver) GetFolderPath(folder *object.Folder) (string, error) { + f, err := d.FolderInfo(folder, "name", "parent") + if err != nil { + return "", err + } + if f.Parent.Type == "Datacenter" { + return "", nil + } else { + parent := d.NewFolder(f.Parent) + parentPath, err := d.GetFolderPath(parent) + if err != nil { + return "", err + } + if parentPath == "" { + return f.Name, nil + } else { + return fmt.Sprintf("%v/%v", parentPath, f.Name), nil + } + } }