Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
P
packer
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Kristopher Ruzic
packer
Commits
118e0b8a
Commit
118e0b8a
authored
Sep 05, 2014
by
Mitchell Hashimoto
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'rasa-1082-add-boot-commands-to-vmx-and-ovf-builders'
parents
2ec84931
c74f0c7c
Changes
15
Hide whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
92 additions
and
32 deletions
+92
-32
builder/virtualbox/common/step_type_boot_command.go
builder/virtualbox/common/step_type_boot_command.go
+12
-11
builder/virtualbox/iso/builder.go
builder/virtualbox/iso/builder.go
+5
-1
builder/virtualbox/ovf/builder.go
builder/virtualbox/ovf/builder.go
+5
-0
builder/virtualbox/ovf/config.go
builder/virtualbox/ovf/config.go
+8
-0
builder/vmware/common/host_ip.go
builder/vmware/common/host_ip.go
+1
-1
builder/vmware/common/host_ip_ifconfig.go
builder/vmware/common/host_ip_ifconfig.go
+1
-1
builder/vmware/common/host_ip_ifconfig_test.go
builder/vmware/common/host_ip_ifconfig_test.go
+1
-1
builder/vmware/common/host_ip_vmnetnatconf.go
builder/vmware/common/host_ip_vmnetnatconf.go
+2
-4
builder/vmware/common/host_ip_vmnetnatconf_test.go
builder/vmware/common/host_ip_vmnetnatconf_test.go
+1
-1
builder/vmware/common/step_type_boot_command.go
builder/vmware/common/step_type_boot_command.go
+12
-11
builder/vmware/iso/builder.go
builder/vmware/iso/builder.go
+5
-1
builder/vmware/vmx/builder.go
builder/vmware/vmx/builder.go
+5
-0
builder/vmware/vmx/config.go
builder/vmware/vmx/config.go
+8
-0
website/source/docs/builders/virtualbox-ovf.html.markdown
website/source/docs/builders/virtualbox-ovf.html.markdown
+13
-0
website/source/docs/builders/vmware-vmx.html.markdown
website/source/docs/builders/vmware-vmx.html.markdown
+13
-0
No files found.
builder/virtualbox/
iso
/step_type_boot_command.go
→
builder/virtualbox/
common
/step_type_boot_command.go
View file @
118e0b8a
package
iso
package
common
import
(
"fmt"
"github.com/mitchellh/multistep"
vboxcommon
"github.com/mitchellh/packer/builder/virtualbox/common"
"github.com/mitchellh/packer/packer"
"log"
"strings"
...
...
@@ -23,7 +22,6 @@ type bootCommandTemplateData struct {
// This step "types" the boot command into the VM over VNC.
//
// Uses:
// config *config
// driver Driver
// http_port int
// ui packer.Ui
...
...
@@ -31,11 +29,14 @@ type bootCommandTemplateData struct {
//
// Produces:
// <nothing>
type
stepTypeBootCommand
struct
{}
type
StepTypeBootCommand
struct
{
BootCommand
[]
string
VMName
string
Tpl
*
packer
.
ConfigTemplate
}
func
(
s
*
stepTypeBootCommand
)
Run
(
state
multistep
.
StateBag
)
multistep
.
StepAction
{
config
:=
state
.
Get
(
"config"
)
.
(
*
config
)
driver
:=
state
.
Get
(
"driver"
)
.
(
vboxcommon
.
Driver
)
func
(
s
*
StepTypeBootCommand
)
Run
(
state
multistep
.
StateBag
)
multistep
.
StepAction
{
driver
:=
state
.
Get
(
"driver"
)
.
(
Driver
)
httpPort
:=
state
.
Get
(
"http_port"
)
.
(
uint
)
ui
:=
state
.
Get
(
"ui"
)
.
(
packer
.
Ui
)
vmName
:=
state
.
Get
(
"vmName"
)
.
(
string
)
...
...
@@ -43,12 +44,12 @@ func (s *stepTypeBootCommand) Run(state multistep.StateBag) multistep.StepAction
tplData
:=
&
bootCommandTemplateData
{
"10.0.2.2"
,
httpPort
,
config
.
VMName
,
s
.
VMName
,
}
ui
.
Say
(
"Typing the boot command..."
)
for
_
,
command
:=
range
config
.
BootCommand
{
command
,
err
:=
config
.
t
pl
.
Process
(
command
,
tplData
)
for
_
,
command
:=
range
s
.
BootCommand
{
command
,
err
:=
s
.
T
pl
.
Process
(
command
,
tplData
)
if
err
!=
nil
{
err
:=
fmt
.
Errorf
(
"Error preparing boot command: %s"
,
err
)
state
.
Put
(
"error"
,
err
)
...
...
@@ -90,7 +91,7 @@ func (s *stepTypeBootCommand) Run(state multistep.StateBag) multistep.StepAction
return
multistep
.
ActionContinue
}
func
(
*
s
tepTypeBootCommand
)
Cleanup
(
multistep
.
StateBag
)
{}
func
(
*
S
tepTypeBootCommand
)
Cleanup
(
multistep
.
StateBag
)
{}
func
scancodes
(
message
string
)
[]
string
{
// Scancodes reference: http://www.win.tue.nl/~aeb/linux/kbd/scancodes-1.html
...
...
builder/virtualbox/iso/builder.go
View file @
118e0b8a
...
...
@@ -320,7 +320,11 @@ func (b *Builder) Run(ui packer.Ui, hook packer.Hook, cache packer.Cache) (packe
BootWait
:
b
.
config
.
BootWait
,
Headless
:
b
.
config
.
Headless
,
},
new
(
stepTypeBootCommand
),
&
vboxcommon
.
StepTypeBootCommand
{
BootCommand
:
b
.
config
.
BootCommand
,
VMName
:
b
.
config
.
VMName
,
Tpl
:
b
.
config
.
tpl
,
},
&
common
.
StepConnectSSH
{
SSHAddress
:
vboxcommon
.
SSHAddress
,
SSHConfig
:
vboxcommon
.
SSHConfigFunc
(
b
.
config
.
SSHConfig
),
...
...
builder/virtualbox/ovf/builder.go
View file @
118e0b8a
...
...
@@ -89,6 +89,11 @@ func (b *Builder) Run(ui packer.Ui, hook packer.Hook, cache packer.Cache) (packe
BootWait
:
b
.
config
.
BootWait
,
Headless
:
b
.
config
.
Headless
,
},
&
vboxcommon
.
StepTypeBootCommand
{
BootCommand
:
b
.
config
.
BootCommand
,
VMName
:
b
.
config
.
VMName
,
Tpl
:
b
.
config
.
tpl
,
},
&
common
.
StepConnectSSH
{
SSHAddress
:
vboxcommon
.
SSHAddress
,
SSHConfig
:
vboxcommon
.
SSHConfigFunc
(
b
.
config
.
SSHConfig
),
...
...
builder/virtualbox/ovf/config.go
View file @
118e0b8a
...
...
@@ -24,6 +24,7 @@ type Config struct {
vboxcommon
.
VBoxManagePostConfig
`mapstructure:",squash"`
vboxcommon
.
VBoxVersionConfig
`mapstructure:",squash"`
BootCommand
[]
string
`mapstructure:"boot_command"`
SourcePath
string
`mapstructure:"source_path"`
GuestAdditionsMode
string
`mapstructure:"guest_additions_mode"`
GuestAdditionsPath
string
`mapstructure:"guest_additions_path"`
...
...
@@ -115,6 +116,13 @@ func NewConfig(raws ...interface{}) (*Config, []string, error) {
}
}
for
i
,
command
:=
range
c
.
BootCommand
{
if
err
:=
c
.
tpl
.
Validate
(
command
);
err
!=
nil
{
errs
=
packer
.
MultiErrorAppend
(
errs
,
fmt
.
Errorf
(
"Error processing boot_command[%d]: %s"
,
i
,
err
))
}
}
validates
:=
map
[
string
]
*
string
{
"guest_additions_path"
:
&
c
.
GuestAdditionsPath
,
"guest_additions_url"
:
&
c
.
GuestAdditionsURL
,
...
...
builder/vmware/
iso
/host_ip.go
→
builder/vmware/
common
/host_ip.go
View file @
118e0b8a
package
iso
package
common
// Interface to help find the host IP that is available from within
// the VMware virtual machines.
...
...
builder/vmware/
iso
/host_ip_ifconfig.go
→
builder/vmware/
common
/host_ip_ifconfig.go
View file @
118e0b8a
package
iso
package
common
import
(
"bytes"
...
...
builder/vmware/
iso
/host_ip_ifconfig_test.go
→
builder/vmware/
common
/host_ip_ifconfig_test.go
View file @
118e0b8a
package
iso
package
common
import
"testing"
...
...
builder/vmware/
iso
/host_ip_vmnetnatconf.go
→
builder/vmware/
common
/host_ip_vmnetnatconf.go
View file @
118e0b8a
package
iso
package
common
import
(
"bufio"
...
...
@@ -8,8 +8,6 @@ import (
"os"
"regexp"
"strings"
vmwcommon
"github.com/mitchellh/packer/builder/vmware/common"
)
// VMnetNatConfIPFinder finds the IP address of the host machine by
...
...
@@ -18,7 +16,7 @@ import (
type
VMnetNatConfIPFinder
struct
{}
func
(
*
VMnetNatConfIPFinder
)
HostIP
()
(
string
,
error
)
{
driver
:=
&
vmwcommon
.
Workstation9Driver
{}
driver
:=
&
Workstation9Driver
{}
vmnetnat
:=
driver
.
VmnetnatConfPath
()
if
vmnetnat
==
""
{
...
...
builder/vmware/
iso
/host_ip_vmnetnatconf_test.go
→
builder/vmware/
common
/host_ip_vmnetnatconf_test.go
View file @
118e0b8a
package
iso
package
common
import
"testing"
...
...
builder/vmware/
iso
/step_type_boot_command.go
→
builder/vmware/
common
/step_type_boot_command.go
View file @
118e0b8a
package
iso
package
common
import
(
"fmt"
"github.com/mitchellh/go-vnc"
"github.com/mitchellh/multistep"
vmwcommon
"github.com/mitchellh/packer/builder/vmware/common"
"github.com/mitchellh/packer/packer"
"log"
"net"
...
...
@@ -26,18 +25,20 @@ type bootCommandTemplateData struct {
// This step "types" the boot command into the VM over VNC.
//
// Uses:
// config *config
// http_port int
// ui packer.Ui
// vnc_port uint
//
// Produces:
// <nothing>
type
stepTypeBootCommand
struct
{}
type
StepTypeBootCommand
struct
{
BootCommand
[]
string
VMName
string
Tpl
*
packer
.
ConfigTemplate
}
func
(
s
*
stepTypeBootCommand
)
Run
(
state
multistep
.
StateBag
)
multistep
.
StepAction
{
config
:=
state
.
Get
(
"config"
)
.
(
*
config
)
driver
:=
state
.
Get
(
"driver"
)
.
(
vmwcommon
.
Driver
)
func
(
s
*
StepTypeBootCommand
)
Run
(
state
multistep
.
StateBag
)
multistep
.
StepAction
{
driver
:=
state
.
Get
(
"driver"
)
.
(
Driver
)
httpPort
:=
state
.
Get
(
"http_port"
)
.
(
uint
)
ui
:=
state
.
Get
(
"ui"
)
.
(
packer
.
Ui
)
vncIp
:=
state
.
Get
(
"vnc_ip"
)
.
(
string
)
...
...
@@ -88,12 +89,12 @@ func (s *stepTypeBootCommand) Run(state multistep.StateBag) multistep.StepAction
tplData
:=
&
bootCommandTemplateData
{
hostIp
,
httpPort
,
config
.
VMName
,
s
.
VMName
,
}
ui
.
Say
(
"Typing the boot command over VNC..."
)
for
_
,
command
:=
range
config
.
BootCommand
{
command
,
err
:=
config
.
t
pl
.
Process
(
command
,
tplData
)
for
_
,
command
:=
range
s
.
BootCommand
{
command
,
err
:=
s
.
T
pl
.
Process
(
command
,
tplData
)
if
err
!=
nil
{
err
:=
fmt
.
Errorf
(
"Error preparing boot command: %s"
,
err
)
state
.
Put
(
"error"
,
err
)
...
...
@@ -113,7 +114,7 @@ func (s *stepTypeBootCommand) Run(state multistep.StateBag) multistep.StepAction
return
multistep
.
ActionContinue
}
func
(
*
s
tepTypeBootCommand
)
Cleanup
(
multistep
.
StateBag
)
{}
func
(
*
S
tepTypeBootCommand
)
Cleanup
(
multistep
.
StateBag
)
{}
func
vncSendString
(
c
*
vnc
.
ClientConn
,
original
string
)
{
// Scancodes reference: https://github.com/qemu/qemu/blob/master/ui/vnc_keysym.h
...
...
builder/vmware/iso/builder.go
View file @
118e0b8a
...
...
@@ -348,7 +348,11 @@ func (b *Builder) Run(ui packer.Ui, hook packer.Hook, cache packer.Cache) (packe
DurationBeforeStop
:
5
*
time
.
Second
,
Headless
:
b
.
config
.
Headless
,
},
&
stepTypeBootCommand
{},
&
vmwcommon
.
StepTypeBootCommand
{
BootCommand
:
b
.
config
.
BootCommand
,
VMName
:
b
.
config
.
VMName
,
Tpl
:
b
.
config
.
tpl
,
},
&
common
.
StepConnectSSH
{
SSHAddress
:
driver
.
SSHAddress
,
SSHConfig
:
vmwcommon
.
SSHConfigFunc
(
&
b
.
config
.
SSHConfig
),
...
...
builder/vmware/vmx/builder.go
View file @
118e0b8a
...
...
@@ -76,6 +76,11 @@ func (b *Builder) Run(ui packer.Ui, hook packer.Hook, cache packer.Cache) (packe
DurationBeforeStop
:
5
*
time
.
Second
,
Headless
:
b
.
config
.
Headless
,
},
&
vmwcommon
.
StepTypeBootCommand
{
BootCommand
:
b
.
config
.
BootCommand
,
VMName
:
b
.
config
.
VMName
,
Tpl
:
b
.
config
.
tpl
,
},
&
common
.
StepConnectSSH
{
SSHAddress
:
driver
.
SSHAddress
,
SSHConfig
:
vmwcommon
.
SSHConfigFunc
(
&
b
.
config
.
SSHConfig
),
...
...
builder/vmware/vmx/config.go
View file @
118e0b8a
...
...
@@ -20,6 +20,7 @@ type Config struct {
vmwcommon
.
ToolsConfig
`mapstructure:",squash"`
vmwcommon
.
VMXConfig
`mapstructure:",squash"`
BootCommand
[]
string
`mapstructure:"boot_command"`
FloppyFiles
[]
string
`mapstructure:"floppy_files"`
RemoteType
string
`mapstructure:"remote_type"`
SkipCompaction
bool
`mapstructure:"skip_compaction"`
...
...
@@ -82,6 +83,13 @@ func NewConfig(raws ...interface{}) (*Config, []string, error) {
}
}
for
i
,
command
:=
range
c
.
BootCommand
{
if
err
:=
c
.
tpl
.
Validate
(
command
);
err
!=
nil
{
errs
=
packer
.
MultiErrorAppend
(
errs
,
fmt
.
Errorf
(
"Error processing boot_command[%d]: %s"
,
i
,
err
))
}
}
if
c
.
SourcePath
==
""
{
errs
=
packer
.
MultiErrorAppend
(
errs
,
fmt
.
Errorf
(
"source_path is required"
))
}
else
{
...
...
website/source/docs/builders/virtualbox-ovf.html.markdown
View file @
118e0b8a
...
...
@@ -52,6 +52,19 @@ each category, the available options are alphabetized and described.
### Optional:
*
`boot_command`
(array of strings) - This is an array of commands to type
when the virtual machine is first booted. The goal of these commands should
be to type just enough to initialize the operating system installer. Special
keys can be typed as well, and are covered in the section below on the boot
command. If this is not specified, it is assumed the installer will start
itself.
*
`boot_wait`
(string) - The time to wait after booting the initial virtual
machine before typing the
`boot_command`
. The value of this should be
a duration. Examples are "5s" and "1m30s" which will cause Packer to wait
five seconds and one minute 30 seconds, respectively. If this isn't specified,
the default is 10 seconds.
*
`export_opts`
(array of strings) - Additional options to pass to the
`VBoxManage export`
.
This can be useful for passing product information to include in the resulting
appliance file.
...
...
website/source/docs/builders/vmware-vmx.html.markdown
View file @
118e0b8a
...
...
@@ -51,6 +51,19 @@ each category, the available options are alphabetized and described.
### Optional:
*
`boot_command`
(array of strings) - This is an array of commands to type
when the virtual machine is firsted booted. The goal of these commands should
be to type just enough to initialize the operating system installer. Special
keys can be typed as well, and are covered in the section below on the boot
command. If this is not specified, it is assumed the installer will start
itself.
*
`boot_wait`
(string) - The time to wait after booting the initial virtual
machine before typing the
`boot_command`
. The value of this should be
a duration. Examples are "5s" and "1m30s" which will cause Packer to wait
five seconds and one minute 30 seconds, respectively. If this isn't specified,
the default is 10 seconds.
*
`floppy_files`
(array of strings) - A list of files to place onto a floppy
disk that is attached when the VM is booted. This is most useful
for unattended Windows installs, which look for an
`Autounattend.xml`
file
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment