builder/vmware: Start it. Creates disks so far...
This commit is contained in:
parent
87e7f17aa7
commit
2e57496a82
|
@ -0,0 +1,47 @@
|
|||
package vmware
|
||||
|
||||
import (
|
||||
"github.com/mitchellh/multistep"
|
||||
"github.com/mitchellh/packer/packer"
|
||||
)
|
||||
|
||||
const BuilderId = "mitchellh.vmware"
|
||||
|
||||
type Builder struct {
|
||||
config config
|
||||
runner multistep.Runner
|
||||
}
|
||||
|
||||
type config struct {
|
||||
OutputDir string `mapstructure:"output_directory"`
|
||||
}
|
||||
|
||||
func (b *Builder) Prepare(raw interface{}) (err error) {
|
||||
if b.config.OutputDir == "" {
|
||||
b.config.OutputDir = "vmware"
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (b *Builder) Run(ui packer.Ui, hook packer.Hook) packer.Artifact {
|
||||
steps := []multistep.Step{
|
||||
&stepPrepareOutputDir{},
|
||||
&stepCreateDisk{},
|
||||
}
|
||||
|
||||
// Setup the state bag
|
||||
state := make(map[string]interface{})
|
||||
state["config"] = &b.config
|
||||
state["hook"] = hook
|
||||
state["ui"] = ui
|
||||
|
||||
// Run!
|
||||
b.runner = &multistep.BasicRunner{Steps: steps}
|
||||
b.runner.Run(state)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (b *Builder) Cancel() {
|
||||
}
|
|
@ -0,0 +1,33 @@
|
|||
package vmware
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/mitchellh/multistep"
|
||||
"github.com/mitchellh/packer/packer"
|
||||
"os/exec"
|
||||
"path/filepath"
|
||||
)
|
||||
|
||||
type stepCreateDisk struct{}
|
||||
|
||||
func (stepCreateDisk) Run(state map[string]interface{}) multistep.StepAction {
|
||||
// TODO(mitchellh): Configurable disk size
|
||||
// TODO(mitchellh): Capture error output in case things go wrong to report it
|
||||
|
||||
config := state["config"].(*config)
|
||||
ui := state["ui"].(packer.Ui)
|
||||
|
||||
vdisk_manager := "/Applications/VMware Fusion.app/Contents/Library/vmware-vdiskmanager"
|
||||
output := filepath.Join(config.OutputDir, "disk.vmdk")
|
||||
|
||||
ui.Say("Creating virtual machine disk")
|
||||
cmd := exec.Command(vdisk_manager, "-c", "-s", "40000M", "-a", "lsilogic", "-t", "1", output)
|
||||
if err := cmd.Run(); err != nil {
|
||||
ui.Error(fmt.Sprintf("Error creating VMware disk: %s", err))
|
||||
return multistep.ActionHalt
|
||||
}
|
||||
|
||||
return multistep.ActionContinue
|
||||
}
|
||||
|
||||
func (stepCreateDisk) Cleanup(map[string]interface{}) {}
|
|
@ -0,0 +1,20 @@
|
|||
package vmware
|
||||
|
||||
import (
|
||||
"github.com/mitchellh/multistep"
|
||||
"os"
|
||||
)
|
||||
|
||||
type stepPrepareOutputDir struct{}
|
||||
|
||||
func (stepPrepareOutputDir) Run(state map[string]interface{}) multistep.StepAction {
|
||||
config := state["config"].(*config)
|
||||
|
||||
if err := os.MkdirAll(config.OutputDir, 0755); err != nil {
|
||||
return multistep.ActionHalt
|
||||
}
|
||||
|
||||
return multistep.ActionContinue
|
||||
}
|
||||
|
||||
func (stepPrepareOutputDir) Cleanup(map[string]interface{}) {}
|
|
@ -13,6 +13,7 @@ import (
|
|||
const defaultConfig = `
|
||||
[builders]
|
||||
amazon-ebs = "packer-builder-amazon-ebs"
|
||||
vmware = "packer-builder-vmware"
|
||||
|
||||
[commands]
|
||||
build = "packer-command-build"
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"github.com/mitchellh/packer/builder/vmware"
|
||||
"github.com/mitchellh/packer/packer/plugin"
|
||||
)
|
||||
|
||||
func main() {
|
||||
plugin.ServeBuilder(new(vmware.Builder))
|
||||
}
|
Loading…
Reference in New Issue