From 7cafcf5879de796b0ead408b00254ae313bcbdae Mon Sep 17 00:00:00 2001 From: Sander Jans Date: Wed, 30 May 2018 13:59:44 +0200 Subject: [PATCH] Support for local HTTP server --- iso/builder.go | 5 +++++ iso/config.go | 2 ++ iso/step_create.go | 28 ++++++++++++++++++++++++++++ 3 files changed, 35 insertions(+) diff --git a/iso/builder.go b/iso/builder.go index fb2b424bb..c42acd0d4 100644 --- a/iso/builder.go +++ b/iso/builder.go @@ -63,6 +63,11 @@ func (b *Builder) Run(ui packer.Ui, hook packer.Hook, cache packer.Cache) (packe Datastore: b.config.Datastore, Host: b.config.Host, }, + &packerCommon.StepHTTPServer{ + HTTPDir: b.config.HTTPDir, + HTTPPortMin: b.config.HTTPPortMin, + HTTPPortMax: b.config.HTTPPortMax, + }, &common.StepRun{ Config: &b.config.RunConfig, SetOrder: true, diff --git a/iso/config.go b/iso/config.go index f4b486fab..21daf494e 100644 --- a/iso/config.go +++ b/iso/config.go @@ -11,6 +11,7 @@ import ( type Config struct { packerCommon.PackerConfig `mapstructure:",squash"` + packerCommon.HTTPConfig `mapstructure:",squash"` common.ConnectConfig `mapstructure:",squash"` CreateConfig `mapstructure:",squash"` @@ -46,6 +47,7 @@ func NewConfig(raws ...interface{}) (*Config, []string, error) { errs = packer.MultiErrorAppend(errs, c.CreateConfig.Prepare()...) errs = packer.MultiErrorAppend(errs, c.LocationConfig.Prepare()...) errs = packer.MultiErrorAppend(errs, c.HardwareConfig.Prepare()...) + errs = packer.MultiErrorAppend(errs, c.HTTPConfig.Prepare(&c.ctx)...) errs = packer.MultiErrorAppend(errs, c.CDRomConfig.Prepare()...) errs = packer.MultiErrorAppend(errs, c.BootConfig.Prepare()...) diff --git a/iso/step_create.go b/iso/step_create.go index 122e542e8..30237ee96 100644 --- a/iso/step_create.go +++ b/iso/step_create.go @@ -3,10 +3,13 @@ package iso import ( "context" "fmt" + packerCommon "github.com/hashicorp/packer/common" "github.com/hashicorp/packer/helper/multistep" "github.com/hashicorp/packer/packer" "github.com/jetbrains-infra/packer-builder-vsphere/common" "github.com/jetbrains-infra/packer-builder-vsphere/driver" + "net" + "os" ) type CreateConfig struct { @@ -23,6 +26,29 @@ type CreateConfig struct { USBController bool `mapstructure:"usb_controller"` Notes string `mapstructure:"notes"` + + HTTPIP string `mapstructure:"http_ip"` +} + +func getHostIP(s string) string { + if net.ParseIP(s) != nil { + return s + } + + var ipaddr string + addrs, err := net.InterfaceAddrs() + if err != nil { + fmt.Println(err) + os.Exit(2) + } + + for _, a := range addrs { + if ip, ok := a.(*net.IPNet); ok && !ip.IP.IsLoopback() { + ipaddr = ip.IP.String() + break + } + } + return ipaddr } func (c *CreateConfig) Prepare() []error { @@ -66,6 +92,8 @@ func (s *StepCreateVM) Run(_ context.Context, state multistep.StateBag) multiste } } + packerCommon.SetHTTPIP(getHostIP(s.Config.HTTPIP)) + ui.Say("Creating VM...") vm, err := d.CreateVM(&driver.CreateConfig{ DiskThinProvisioned: s.Config.DiskThinProvisioned,