From fb52c42b3de069dd4e72c65b0e03e08e98acf09c Mon Sep 17 00:00:00 2001 From: bugbuilder Date: Tue, 25 Jul 2017 23:14:59 -0400 Subject: [PATCH] Only add the folder when the error is NotFoundError --- .../vsphere-template/post-processor.go | 10 +++---- .../vsphere-template/step_create_folder.go | 26 ++++++++++++------- 2 files changed, 21 insertions(+), 15 deletions(-) diff --git a/post-processor/vsphere-template/post-processor.go b/post-processor/vsphere-template/post-processor.go index 843c23432..2b87f7ffd 100644 --- a/post-processor/vsphere-template/post-processor.go +++ b/post-processor/vsphere-template/post-processor.go @@ -103,7 +103,7 @@ func (p *PostProcessor) PostProcess(ui packer.Ui, artifact packer.Artifact) (pac c, err := govmomi.NewClient(context.Background(), p.url, p.config.Insecure) if err != nil { - return nil, true, fmt.Errorf("Error connecting to vSphere: %s", err) + return nil, false, fmt.Errorf("Error connecting to vSphere: %s", err) } state := new(multistep.BasicStateBag) @@ -114,13 +114,13 @@ func (p *PostProcessor) PostProcess(ui packer.Ui, artifact packer.Artifact) (pac &stepChooseDatacenter{ Datacenter: p.config.Datacenter, }, + &stepCreateFolder{ + Folder: p.config.Folder, + }, &stepFetchVm{ VMName: p.config.VMName, Source: source, }, - &stepCreateFolder{ - Folder: p.config.Folder, - }, &stepMarkAsTemplate{}, &stepMoveTemplate{ Folder: p.config.Folder, @@ -131,7 +131,7 @@ func (p *PostProcessor) PostProcess(ui packer.Ui, artifact packer.Artifact) (pac runner.Run(state) if rawErr, ok := state.GetOk("error"); ok { - return nil, true, rawErr.(error) + return nil, false, rawErr.(error) } return artifact, true, nil } diff --git a/post-processor/vsphere-template/step_create_folder.go b/post-processor/vsphere-template/step_create_folder.go index 0f02aefaf..80be005ee 100644 --- a/post-processor/vsphere-template/step_create_folder.go +++ b/post-processor/vsphere-template/step_create_folder.go @@ -36,18 +36,24 @@ func (s *stepCreateFolder) Run(state multistep.StateBag) multistep.StepAction { for { root, err = finder.Folder(context.Background(), filepath.ToSlash(filepath.Join(base, path))) if err != nil { - _, folder := filepath.Split(path) - folders = append(folders, folder) - if i := strings.LastIndex(path, "/"); i == 0 { - root, err = finder.Folder(context.Background(), filepath.ToSlash(base)) - if err != nil { - state.Put("error", err) - ui.Error(err.Error()) - return multistep.ActionHalt + if _, ok := err.(*find.NotFoundError); ok { + _, folder := filepath.Split(path) + folders = append(folders, folder) + if i := strings.LastIndex(path, "/"); i == 0 { + root, err = finder.Folder(context.Background(), filepath.ToSlash(base)) + if err != nil { + state.Put("error", err) + ui.Error(err.Error()) + return multistep.ActionHalt + } + break + } else { + path = path[:i] } - break } else { - path = path[:i] + state.Put("error", err) + ui.Error(err.Error()) + return multistep.ActionHalt } } else { break