mirror of
https://github.com/hashicorp/packer.git
synced 2026-09-25 01:04:00 -04:00
The export process now exports the VM directly from the build directory into the output directory. There are no intermediate steps or copying of files involved. This means that there is no longer any benefit in having a separate directory to house the VHD files - see #5206 for the reasoning behind the introduction of this feature. If a user wishes to house the build files on a separate disk from the output directory (perhaps for performance reasons or due to disk space limitations) they can still do so through the use of `temp_path`.
63 lines
1.5 KiB
Go
63 lines
1.5 KiB
Go
package common
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"io/ioutil"
|
|
"os"
|
|
|
|
"github.com/hashicorp/packer/helper/multistep"
|
|
"github.com/hashicorp/packer/packer"
|
|
)
|
|
|
|
type StepCreateTempDir struct {
|
|
// User supplied directory under which we create the main build
|
|
// directory. The build directory is used to house the VM files and
|
|
// folders during the build. If unspecified the default temp directory
|
|
// for the OS is used
|
|
TempPath string
|
|
// The full path to the build directory. This is concatenation of
|
|
// TempPath plus a directory uniquely named for the build
|
|
dirPath string
|
|
}
|
|
|
|
// Creates the main directory used to house the VMs files and folders
|
|
// during the build
|
|
func (s *StepCreateTempDir) Run(_ context.Context, state multistep.StateBag) multistep.StepAction {
|
|
ui := state.Get("ui").(packer.Ui)
|
|
|
|
ui.Say("Creating temporary directory...")
|
|
|
|
if s.TempPath == "" {
|
|
s.TempPath = os.TempDir()
|
|
}
|
|
|
|
packerTempDir, err := ioutil.TempDir(s.TempPath, "packerhv")
|
|
if err != nil {
|
|
err := fmt.Errorf("Error creating temporary directory: %s", err)
|
|
state.Put("error", err)
|
|
ui.Error(err.Error())
|
|
return multistep.ActionHalt
|
|
}
|
|
|
|
s.dirPath = packerTempDir
|
|
state.Put("packerTempDir", packerTempDir)
|
|
|
|
return multistep.ActionContinue
|
|
}
|
|
|
|
// Cleanup removes the build directory
|
|
func (s *StepCreateTempDir) Cleanup(state multistep.StateBag) {
|
|
if s.dirPath == "" {
|
|
return
|
|
}
|
|
|
|
ui := state.Get("ui").(packer.Ui)
|
|
ui.Say("Deleting temporary directory...")
|
|
|
|
err := os.RemoveAll(s.dirPath)
|
|
if err != nil {
|
|
ui.Error(fmt.Sprintf("Error deleting temporary directory: %s", err))
|
|
}
|
|
}
|