From 5642fa01c86e806e827910e7dff908940d5c5430 Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Wed, 31 Jul 2013 23:05:15 -0700 Subject: [PATCH] provisioner/salt-masterless: use common lib for config decoding /cc @rgarcia - Since you opened the pull request, common config decoding stuff has been pulled out into the common Package. This simplifies a lot of code. --- provisioner/salt-masterless/provisioner.go | 46 ++++++---------------- 1 file changed, 11 insertions(+), 35 deletions(-) diff --git a/provisioner/salt-masterless/provisioner.go b/provisioner/salt-masterless/provisioner.go index c20925cf2..233ebeab9 100644 --- a/provisioner/salt-masterless/provisioner.go +++ b/provisioner/salt-masterless/provisioner.go @@ -5,11 +5,10 @@ package saltmasterless import ( "errors" "fmt" - "github.com/mitchellh/mapstructure" + "github.com/mitchellh/packer/builder/common" "github.com/mitchellh/packer/packer" "os" "path/filepath" - "sort" "strings" ) @@ -17,7 +16,7 @@ var Ui packer.Ui const DefaultTempConfigDir = "/tmp/salt" -type config struct { +type Config struct { // If true, run the salt-bootstrap script SkipBootstrap bool `mapstructure:"skip_bootstrap"` BootstrapArgs string `mapstructure:"bootstrap_args"` @@ -30,52 +29,29 @@ type config struct { } type Provisioner struct { - config config + config Config } func (p *Provisioner) Prepare(raws ...interface{}) error { - var md mapstructure.Metadata - decoderConfig := &mapstructure.DecoderConfig{ - Metadata: &md, - Result: &p.config, - } - - decoder, err := mapstructure.NewDecoder(decoderConfig) + md, err := common.DecodeConfig(&p.config, raws...) if err != nil { return err } - for _, raw := range raws { - err := decoder.Decode(raw) - if err != nil { - return err - } + if p.config.TempConfigDir == "" { + p.config.TempConfigDir = DefaultTempConfigDir } // Accumulate any errors - errs := make([]error, 0) - - // Unused keys are errors - if len(md.Unused) > 0 { - sort.Strings(md.Unused) - for _, unused := range md.Unused { - if unused != "type" && !strings.HasPrefix(unused, "packer_") { - errs = append( - errs, fmt.Errorf("Unknown configuration key: %s", unused)) - } - } - } + errs := common.CheckUnusedConfig(md) if p.config.LocalStateTree == "" { - errs = append(errs, errors.New("Please specify a local_state_tree")) - } - - if p.config.TempConfigDir == "" { - p.config.TempConfigDir = DefaultTempConfigDir + errs = packer.MultiErrorAppend(errs, + errors.New("Please specify a local_state_tree")) } - if len(errs) > 0 { - return &packer.MultiError{errs} + if errs != nil && len(errs.Errors) > 0 { + return errs } return nil