Added options for the cpu count, memory, audio, and usb to the virtualbox builder.
This commit is contained in:
parent
06c2c35e4c
commit
51948daf92
|
@ -0,0 +1,46 @@
|
||||||
|
package common
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/hashicorp/packer/template/interpolate"
|
||||||
|
)
|
||||||
|
|
||||||
|
type HWConfig struct {
|
||||||
|
|
||||||
|
// cpu information
|
||||||
|
CpuCount int `mapstructure:"cpu_count"`
|
||||||
|
MemorySize int `mapstructure:"memory_size"`
|
||||||
|
|
||||||
|
// device presence
|
||||||
|
Sound string `mapstructure:"sound"`
|
||||||
|
USB bool `mapstructure:"usb"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *HWConfig) Prepare(ctx *interpolate.Context) []error {
|
||||||
|
var errs []error
|
||||||
|
|
||||||
|
// Hardware and cpu options
|
||||||
|
if c.CpuCount < 0 {
|
||||||
|
errs = append(errs, fmt.Errorf("An invalid cpu_count was specified (cpu_count < 0): %d", c.CpuCount))
|
||||||
|
c.CpuCount = 0
|
||||||
|
}
|
||||||
|
if c.CpuCount == 0 {
|
||||||
|
c.CpuCount = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
if c.MemorySize < 0 {
|
||||||
|
errs = append(errs, fmt.Errorf("An invalid memory_size was specified (memory_size < 0): %d", c.MemorySize))
|
||||||
|
c.MemorySize = 0
|
||||||
|
}
|
||||||
|
if c.MemorySize == 0 {
|
||||||
|
c.MemorySize = 512
|
||||||
|
}
|
||||||
|
|
||||||
|
// devices
|
||||||
|
if c.Sound == "" {
|
||||||
|
c.Sound = "none"
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
|
@ -0,0 +1,20 @@
|
||||||
|
package common
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestHWConfigPrepare(t *testing.T) {
|
||||||
|
c := new(HWConfig)
|
||||||
|
if errs := c.Prepare(testConfigTemplate(t)); len(errs) > 0 {
|
||||||
|
t.Fatalf("err: %#v", errs)
|
||||||
|
}
|
||||||
|
|
||||||
|
if c.CpuCount < 1 {
|
||||||
|
t.Errorf("bad cpu count: %d", c.CpuCount)
|
||||||
|
}
|
||||||
|
|
||||||
|
if c.MemorySize < 64 {
|
||||||
|
t.Errorf("bad memory size: %d", c.MemorySize)
|
||||||
|
}
|
||||||
|
}
|
|
@ -35,6 +35,7 @@ type Config struct {
|
||||||
vboxcommon.RunConfig `mapstructure:",squash"`
|
vboxcommon.RunConfig `mapstructure:",squash"`
|
||||||
vboxcommon.ShutdownConfig `mapstructure:",squash"`
|
vboxcommon.ShutdownConfig `mapstructure:",squash"`
|
||||||
vboxcommon.SSHConfig `mapstructure:",squash"`
|
vboxcommon.SSHConfig `mapstructure:",squash"`
|
||||||
|
vboxcommon.HWConfig `mapstructure:",squash"`
|
||||||
vboxcommon.VBoxManageConfig `mapstructure:",squash"`
|
vboxcommon.VBoxManageConfig `mapstructure:",squash"`
|
||||||
vboxcommon.VBoxManagePostConfig `mapstructure:",squash"`
|
vboxcommon.VBoxManagePostConfig `mapstructure:",squash"`
|
||||||
vboxcommon.VBoxVersionConfig `mapstructure:",squash"`
|
vboxcommon.VBoxVersionConfig `mapstructure:",squash"`
|
||||||
|
@ -92,6 +93,7 @@ func (b *Builder) Prepare(raws ...interface{}) ([]string, error) {
|
||||||
errs = packer.MultiErrorAppend(errs, b.config.RunConfig.Prepare(&b.config.ctx)...)
|
errs = packer.MultiErrorAppend(errs, b.config.RunConfig.Prepare(&b.config.ctx)...)
|
||||||
errs = packer.MultiErrorAppend(errs, b.config.ShutdownConfig.Prepare(&b.config.ctx)...)
|
errs = packer.MultiErrorAppend(errs, b.config.ShutdownConfig.Prepare(&b.config.ctx)...)
|
||||||
errs = packer.MultiErrorAppend(errs, b.config.SSHConfig.Prepare(&b.config.ctx)...)
|
errs = packer.MultiErrorAppend(errs, b.config.SSHConfig.Prepare(&b.config.ctx)...)
|
||||||
|
errs = packer.MultiErrorAppend(errs, b.config.HWConfig.Prepare(&b.config.ctx)...)
|
||||||
errs = packer.MultiErrorAppend(errs, b.config.VBoxManageConfig.Prepare(&b.config.ctx)...)
|
errs = packer.MultiErrorAppend(errs, b.config.VBoxManageConfig.Prepare(&b.config.ctx)...)
|
||||||
errs = packer.MultiErrorAppend(errs, b.config.VBoxManagePostConfig.Prepare(&b.config.ctx)...)
|
errs = packer.MultiErrorAppend(errs, b.config.VBoxManagePostConfig.Prepare(&b.config.ctx)...)
|
||||||
errs = packer.MultiErrorAppend(errs, b.config.VBoxVersionConfig.Prepare(&b.config.ctx)...)
|
errs = packer.MultiErrorAppend(errs, b.config.VBoxVersionConfig.Prepare(&b.config.ctx)...)
|
||||||
|
|
|
@ -3,6 +3,8 @@ package iso
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
|
||||||
vboxcommon "github.com/hashicorp/packer/builder/virtualbox/common"
|
vboxcommon "github.com/hashicorp/packer/builder/virtualbox/common"
|
||||||
"github.com/hashicorp/packer/helper/multistep"
|
"github.com/hashicorp/packer/helper/multistep"
|
||||||
|
@ -24,7 +26,7 @@ func (s *stepCreateVM) Run(_ context.Context, state multistep.StateBag) multiste
|
||||||
|
|
||||||
name := config.VMName
|
name := config.VMName
|
||||||
|
|
||||||
commands := make([][]string, 4)
|
commands := make([][]string, 6)
|
||||||
commands[0] = []string{
|
commands[0] = []string{
|
||||||
"createvm", "--name", name,
|
"createvm", "--name", name,
|
||||||
"--ostype", config.GuestOSType, "--register",
|
"--ostype", config.GuestOSType, "--register",
|
||||||
|
@ -33,8 +35,15 @@ func (s *stepCreateVM) Run(_ context.Context, state multistep.StateBag) multiste
|
||||||
"modifyvm", name,
|
"modifyvm", name,
|
||||||
"--boot1", "disk", "--boot2", "dvd", "--boot3", "none", "--boot4", "none",
|
"--boot1", "disk", "--boot2", "dvd", "--boot3", "none", "--boot4", "none",
|
||||||
}
|
}
|
||||||
commands[2] = []string{"modifyvm", name, "--cpus", "1"}
|
commands[2] = []string{"modifyvm", name, "--cpus", strconv.Itoa(config.HWConfig.CpuCount)}
|
||||||
commands[3] = []string{"modifyvm", name, "--memory", "512"}
|
commands[3] = []string{"modifyvm", name, "--memory", strconv.Itoa(config.HWConfig.MemorySize)}
|
||||||
|
commands[4] = []string{"modifyvm", name, "--usb", map[bool]string{true: "on", false: "off"}[config.HWConfig.USB]}
|
||||||
|
|
||||||
|
if strings.ToLower(config.HWConfig.Sound) == "none" {
|
||||||
|
commands[5] = []string{"modifyvm", name, "--audio", config.HWConfig.Sound}
|
||||||
|
} else {
|
||||||
|
commands[5] = []string{"modifyvm", name, "--audio", config.HWConfig.Sound, "--audioin", "on", "--audioout", "on"}
|
||||||
|
}
|
||||||
|
|
||||||
ui.Say("Creating virtual machine...")
|
ui.Say("Creating virtual machine...")
|
||||||
for _, command := range commands {
|
for _, command := range commands {
|
||||||
|
|
Loading…
Reference in New Issue