From fbd621d2279d809db2206cb2f19fc570d9ff2829 Mon Sep 17 00:00:00 2001 From: Matthew Hooker Date: Wed, 19 Apr 2017 21:20:47 -0700 Subject: [PATCH] fail prepare if hash not found --- post-processor/checksum/post-processor.go | 43 +++++++++++------------ 1 file changed, 21 insertions(+), 22 deletions(-) diff --git a/post-processor/checksum/post-processor.go b/post-processor/checksum/post-processor.go index 9f95755c6..81bc2d460 100644 --- a/post-processor/checksum/post-processor.go +++ b/post-processor/checksum/post-processor.go @@ -37,6 +37,17 @@ type outputPathTemplate struct { HashType string } +func getHashMap() map[string]func() hash.Hash { + return map[string]func() hash.Hash{ + "md5": func() hash.Hash { return md5.New() }, + "sha1": func() hash.Hash { return sha1.New() }, + "sha224": func() hash.Hash { return sha256.New224() }, + "sha256": func() hash.Hash { return sha256.New() }, + "sha384": func() hash.Hash { return sha512.New384() }, + "sha512": func() hash.Hash { return sha512.New() }, + } +} + func (p *PostProcessor) Configure(raws ...interface{}) error { err := config.Decode(&p.config, &config.DecodeOpts{ Interpolate: true, @@ -47,17 +58,24 @@ func (p *PostProcessor) Configure(raws ...interface{}) error { if err != nil { return err } + errs := new(packer.MultiError) if p.config.ChecksumTypes == nil { p.config.ChecksumTypes = []string{"md5"} } + hashMap := getHashMap() + for _, k := range p.config.ChecksumTypes { + if _, ok := hashMap[k]; !ok { + errs = packer.MultiErrorAppend(errs, + fmt.Errorf("Unrecognized checksum type: %s", k)) + } + } + if p.config.OutputPath == "" { p.config.OutputPath = "packer_{{.BuildName}}_{{.BuilderType}}_{{.HashType}}.checksum" } - errs := new(packer.MultiError) - if err = interpolate.Validate(p.config.OutputPath, &p.config.ctx); err != nil { errs = packer.MultiErrorAppend( errs, fmt.Errorf("Error parsing target template: %s", err)) @@ -70,25 +88,6 @@ func (p *PostProcessor) Configure(raws ...interface{}) error { return nil } -func getHash(t string) hash.Hash { - var h hash.Hash - switch t { - case "md5": - h = md5.New() - case "sha1": - h = sha1.New() - case "sha224": - h = sha256.New224() - case "sha256": - h = sha256.New() - case "sha384": - h = sha512.New384() - case "sha512": - h = sha512.New() - } - return h -} - func (p *PostProcessor) PostProcess(ui packer.Ui, artifact packer.Artifact) (packer.Artifact, bool, error) { files := artifact.Files() var h hash.Hash @@ -101,7 +100,7 @@ func (p *PostProcessor) PostProcess(ui packer.Ui, artifact packer.Artifact) (pac } for _, ct := range p.config.ChecksumTypes { - h = getHash(ct) + h = getHashMap()[ct]() opTpl.HashType = ct p.config.ctx.Data = &opTpl