diff --git a/builder/hyperv/common/run_config.go b/builder/hyperv/common/run_config.go index 4b73ae532..3ac72471c 100644 --- a/builder/hyperv/common/run_config.go +++ b/builder/hyperv/common/run_config.go @@ -1,7 +1,6 @@ package common import ( - "errors" "fmt" "github.com/mitchellh/packer/template/interpolate" "time" @@ -11,10 +10,6 @@ type RunConfig struct { Headless bool `mapstructure:"headless"` RawBootWait string `mapstructure:"boot_wait"` - HTTPDir string `mapstructure:"http_directory"` - HTTPPortMin uint `mapstructure:"http_port_min"` - HTTPPortMax uint `mapstructure:"http_port_max"` - BootWait time.Duration `` } @@ -23,14 +18,6 @@ func (c *RunConfig) Prepare(ctx *interpolate.Context) []error { c.RawBootWait = "10s" } - if c.HTTPPortMin == 0 { - c.HTTPPortMin = 8000 - } - - if c.HTTPPortMax == 0 { - c.HTTPPortMax = 9000 - } - var errs []error var err error @@ -42,10 +29,5 @@ func (c *RunConfig) Prepare(ctx *interpolate.Context) []error { } } - if c.HTTPPortMin > c.HTTPPortMax { - errs = append(errs, - errors.New("http_port_min must be less than http_port_max")) - } - return errs } diff --git a/builder/hyperv/common/step_http_server.go b/builder/hyperv/common/step_http_server.go deleted file mode 100644 index 55874992e..000000000 --- a/builder/hyperv/common/step_http_server.go +++ /dev/null @@ -1,78 +0,0 @@ -package common - -import ( - "fmt" - "github.com/mitchellh/multistep" - "github.com/mitchellh/packer/packer" - "log" - "math/rand" - "net" - "net/http" -) - -// This step creates and runs the HTTP server that is serving files from the -// directory specified by the 'http_directory` configuration parameter in the -// template. -// -// Uses: -// ui packer.Ui -// -// Produces: -// http_port int - The port the HTTP server started on. -type StepHTTPServer struct { - HTTPDir string - HTTPPortMin uint - HTTPPortMax uint - - l net.Listener -} - -func (s *StepHTTPServer) Run(state multistep.StateBag) multistep.StepAction { - ui := state.Get("ui").(packer.Ui) - - var httpPort uint = 0 - if s.HTTPDir == "" { - state.Put("http_port", httpPort) - return multistep.ActionContinue - } - - // Find an available TCP port for our HTTP server - var httpAddr string - portRange := int(s.HTTPPortMax - s.HTTPPortMin) - for { - var err error - var offset uint = 0 - - if portRange > 0 { - // Intn will panic if portRange == 0, so we do a check. - offset = uint(rand.Intn(portRange)) - } - - httpPort = offset + s.HTTPPortMin - httpAddr = fmt.Sprintf("0.0.0.0:%d", httpPort) - log.Printf("Trying port: %d", httpPort) - s.l, err = net.Listen("tcp", httpAddr) - if err == nil { - break - } - } - - ui.Say(fmt.Sprintf("Starting HTTP server on port %d", httpPort)) - - // Start the HTTP server and run it in the background - fileServer := http.FileServer(http.Dir(s.HTTPDir)) - server := &http.Server{Addr: httpAddr, Handler: fileServer} - go server.Serve(s.l) - - // Save the address into the state so it can be accessed in the future - state.Put("http_port", httpPort) - - return multistep.ActionContinue -} - -func (s *StepHTTPServer) Cleanup(multistep.StateBag) { - if s.l != nil { - // Close the listener so that the HTTP server stops - s.l.Close() - } -} diff --git a/builder/hyperv/iso/builder.go b/builder/hyperv/iso/builder.go index 430499e48..c98e584ca 100644 --- a/builder/hyperv/iso/builder.go +++ b/builder/hyperv/iso/builder.go @@ -46,6 +46,7 @@ type Builder struct { type Config struct { common.PackerConfig `mapstructure:",squash"` + common.HTTPConfig `mapstructure:",squash"` hypervcommon.FloppyConfig `mapstructure:",squash"` hypervcommon.OutputConfig `mapstructure:",squash"` hypervcommon.SSHConfig `mapstructure:",squash"` @@ -141,6 +142,7 @@ func (b *Builder) Prepare(raws ...interface{}) ([]string, error) { // Accumulate any errors and warnings var errs *packer.MultiError errs = packer.MultiErrorAppend(errs, b.config.FloppyConfig.Prepare(&b.config.ctx)...) + errs = packer.MultiErrorAppend(errs, b.config.HTTPConfig.Prepare(&b.config.ctx)...) errs = packer.MultiErrorAppend(errs, b.config.RunConfig.Prepare(&b.config.ctx)...) errs = packer.MultiErrorAppend(errs, b.config.OutputConfig.Prepare(&b.config.ctx, &b.config.PackerConfig)...) errs = packer.MultiErrorAppend(errs, b.config.SSHConfig.Prepare(&b.config.ctx)...) @@ -348,7 +350,7 @@ func (b *Builder) Run(ui packer.Ui, hook packer.Hook, cache packer.Cache) (packe &common.StepCreateFloppy{ Files: b.config.FloppyFiles, }, - &hypervcommon.StepHTTPServer{ + &common.StepHTTPServer{ HTTPDir: b.config.HTTPDir, HTTPPortMin: b.config.HTTPPortMin, HTTPPortMax: b.config.HTTPPortMax,