diff options
Diffstat (limited to 'vendor/github.com/mitchellh/packer/builder/lxc/step_prepare_output_dir.go')
-rw-r--r-- | vendor/github.com/mitchellh/packer/builder/lxc/step_prepare_output_dir.go | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/vendor/github.com/mitchellh/packer/builder/lxc/step_prepare_output_dir.go b/vendor/github.com/mitchellh/packer/builder/lxc/step_prepare_output_dir.go new file mode 100644 index 00000000..07c6f08b --- /dev/null +++ b/vendor/github.com/mitchellh/packer/builder/lxc/step_prepare_output_dir.go @@ -0,0 +1,49 @@ +package lxc + +import ( + "github.com/hashicorp/packer/packer" + "github.com/mitchellh/multistep" + "log" + "os" + "time" +) + +type stepPrepareOutputDir struct{} + +func (stepPrepareOutputDir) Run(state multistep.StateBag) multistep.StepAction { + config := state.Get("config").(*Config) + ui := state.Get("ui").(packer.Ui) + + if _, err := os.Stat(config.OutputDir); err == nil && config.PackerForce { + ui.Say("Deleting previous output directory...") + os.RemoveAll(config.OutputDir) + } + + if err := os.MkdirAll(config.OutputDir, 0755); err != nil { + state.Put("error", err) + return multistep.ActionHalt + } + + return multistep.ActionContinue +} + +func (stepPrepareOutputDir) Cleanup(state multistep.StateBag) { + _, cancelled := state.GetOk(multistep.StateCancelled) + _, halted := state.GetOk(multistep.StateHalted) + + if cancelled || halted { + config := state.Get("config").(*Config) + ui := state.Get("ui").(packer.Ui) + + ui.Say("Deleting output directory...") + for i := 0; i < 5; i++ { + err := os.RemoveAll(config.OutputDir) + if err == nil { + break + } + + log.Printf("Error removing output dir: %s", err) + time.Sleep(2 * time.Second) + } + } +} |