From 84af7f5583e997182598d97adcf176c2e3975d90 Mon Sep 17 00:00:00 2001 From: Michael Kuzmin Date: Sat, 1 Jul 2017 18:32:16 +0300 Subject: [PATCH] code cleanup --- README.md | 6 ++-- config.go | 70 +++++++++++++++++++++++--------------------- step_configure_hw.go | 4 +-- 3 files changed, 42 insertions(+), 38 deletions(-) diff --git a/README.md b/README.md index eb250de0a..cbf11f0c0 100644 --- a/README.md +++ b/README.md @@ -60,10 +60,11 @@ Destination: Hardware customization: * `CPUs` - number of CPU sockets. Inherited from source VM by default. -* `ram` - Amount of RAM in megabytes. Inherited from source VM by default. +* `RAM` - Amount of RAM in megabytes. Inherited from source VM by default. Post-processing: * `shutdown_command` - VMware guest tools are used by default. +* `shutdown_timeout` - [Duration](https://golang.org/pkg/time/#ParseDuration) how long to wait for a graceful shutdown. 5 minutes by default. * `create_snapshot` - add a snapshot, so VM can be used as a base for linked clones. `false` by default. * `convert_to_template` - convert VM to a template. `false` by default. @@ -93,12 +94,13 @@ Post-processing: "linked_clone": true, "CPUs": 2, - "ram": 8192, + "RAM": 8192, "ssh_username": "root", "ssh_password": "{{user `guest_password`}}", "shutdown_command": "echo '{{user `guest_password`}}' | sudo -S shutdown -P now", + "shutdown_timeout": "5m", "create_snapshot": true, "convert_to_template": true } diff --git a/config.go b/config.go index 641b97810..fc07447f8 100644 --- a/config.go +++ b/config.go @@ -14,45 +14,49 @@ import ( type Config struct { common.PackerConfig `mapstructure:",squash"` - communicator.Config `mapstructure:",squash"` + // Connection VCenterHost string `mapstructure:"vcenter_host"` + Datacenter string `mapstructure:"datacenter"` Username string `mapstructure:"username"` Password string `mapstructure:"password"` // Location Template string `mapstructure:"template"` - VMName string `mapstructure:"vm_name"` FolderName string `mapstructure:"folder"` - Datacenter string `mapstructure:"datacenter"` + VMName string `mapstructure:"vm_name"` Host string `mapstructure:"host"` ResourcePool string `mapstructure:"resource_pool"` Datastore string `mapstructure:"datastore"` - - // Settings - LinkedClone bool `mapstructure:"linked_clone"` - ConvertToTemplate bool `mapstructure:"convert_to_template"` - RawShutdownTimeout string `mapstructure:"shutdown_timeout"` - ShutdownTimeout time.Duration + LinkedClone bool `mapstructure:"linked_clone"` // Customization - CPUs string `mapstructure:"CPUs"` - ShutdownCommand string `mapstructure:"shutdown_command"` - Ram string `mapstructure:"RAM"` - CreateSnapshot bool `mapstructure:"create_snapshot"` + CPUs string `mapstructure:"CPUs"` + RAM string `mapstructure:"RAM"` + // Provisioning + communicator.Config `mapstructure:",squash"` - ctx interpolate.Context + // Post-processing + ShutdownCommand string `mapstructure:"shutdown_command"` + RawShutdownTimeout string `mapstructure:"shutdown_timeout"` + ShutdownTimeout time.Duration + CreateSnapshot bool `mapstructure:"create_snapshot"` + ConvertToTemplate bool `mapstructure:"convert_to_template"` + + ctx interpolate.Context } func NewConfig(raws ...interface{}) (*Config, []string, error) { c := new(Config) - err := config.Decode(c, &config.DecodeOpts{ - Interpolate: true, - InterpolateContext: &c.ctx, - }, raws...) - if err != nil { - return nil, nil, err + { + err := config.Decode(c, &config.DecodeOpts{ + Interpolate: true, + InterpolateContext: &c.ctx, + }, raws...) + if err != nil { + return nil, nil, err + } } // Accumulate any errors @@ -84,26 +88,24 @@ func NewConfig(raws ...interface{}) (*Config, []string, error) { // Verify numeric parameters if present if c.CPUs != "" { - if _, err = strconv.Atoi(c.CPUs); err != nil { + if _, err := strconv.Atoi(c.CPUs); err != nil { errs = packer.MultiErrorAppend(errs, fmt.Errorf("Invalid number of CPU sockets")) } } - if c.Ram != "" { - if _, err = strconv.Atoi(c.Ram); err != nil { - errs = packer.MultiErrorAppend(errs, fmt.Errorf("Invalid number for Ram")) + if c.RAM != "" { + if _, err := strconv.Atoi(c.RAM); err != nil { + errs = packer.MultiErrorAppend(errs, fmt.Errorf("Invalid number for RAM")) } } - if c.RawShutdownTimeout == "" { - c.RawShutdownTimeout = "5m" + if c.RawShutdownTimeout != "" { + timeout, err := time.ParseDuration(c.RawShutdownTimeout) + if err != nil { + errs = packer.MultiErrorAppend(errs, fmt.Errorf("Failed parsing shutdown_timeout: %s", err)) + } + c.ShutdownTimeout = timeout + } else { + c.ShutdownTimeout = 5 * time.Minute } - c.ShutdownTimeout, err = time.ParseDuration(c.RawShutdownTimeout) - if err != nil { - errs = packer.MultiErrorAppend(errs, fmt.Errorf("Failed parsing shutdown_timeout: %s", err)) - } - - //if c.Datastore == "" { - // warnings = append(warnings, "Datastore is not specified, will try to find the default one") - //} if len(errs.Errors) > 0 { return nil, warnings, errs diff --git a/step_configure_hw.go b/step_configure_hw.go index de91d7e4f..4b5f7d2e2 100644 --- a/step_configure_hw.go +++ b/step_configure_hw.go @@ -35,8 +35,8 @@ func (s *StepConfigureHW) Run(state multistep.StateBag) multistep.StepAction { confSpec.NumCPUs = int32(CPUs) parametersFlag.NumCPUsPtr = &(confSpec.NumCPUs) } - if s.config.Ram != "" { - ram, err := strconv.Atoi(s.config.Ram) + if s.config.RAM != "" { + ram, err := strconv.Atoi(s.config.RAM) if err != nil { state.Put("error", err) return multistep.ActionHalt