diff --git a/provisioner/chef-solo/provisioner.go b/provisioner/chef-solo/provisioner.go index 90ee13811..2d255375d 100644 --- a/provisioner/chef-solo/provisioner.go +++ b/provisioner/chef-solo/provisioner.go @@ -145,46 +145,6 @@ func (p *Provisioner) Prepare(raws ...interface{}) error { return nil } -func (p *Provisioner) processJsonUserVars() (map[string]interface{}, error) { - jsonBytes, err := json.Marshal(p.config.Json) - if err != nil { - // This really shouldn't happen since we literally just unmarshalled - panic(err) - } - - // Copy the user variables so that we can restore them later, and - // make sure we make the quotes JSON-friendly in the user variables. - originalUserVars := make(map[string]string) - for k, v := range p.config.tpl.UserVars { - originalUserVars[k] = v - } - - // Make sure we reset them no matter what - defer func() { - p.config.tpl.UserVars = originalUserVars - }() - - // Make the current user variables JSON string safe. - for k, v := range p.config.tpl.UserVars { - v = strings.Replace(v, `\`, `\\`, -1) - v = strings.Replace(v, `"`, `\"`, -1) - p.config.tpl.UserVars[k] = v - } - - // Process the bytes with the template processor - jsonBytesProcessed, err := p.config.tpl.Process(string(jsonBytes), nil) - if err != nil { - return nil, err - } - - var result map[string]interface{} - if err := json.Unmarshal([]byte(jsonBytesProcessed), &result); err != nil { - return nil, err - } - - return result, nil -} - func (p *Provisioner) Provision(ui packer.Ui, comm packer.Communicator) error { if !p.config.SkipInstall { if err := p.installChef(ui, comm); err != nil { @@ -361,6 +321,46 @@ func (p *Provisioner) installChef(ui packer.Ui, comm packer.Communicator) error return nil } +func (p *Provisioner) processJsonUserVars() (map[string]interface{}, error) { + jsonBytes, err := json.Marshal(p.config.Json) + if err != nil { + // This really shouldn't happen since we literally just unmarshalled + panic(err) + } + + // Copy the user variables so that we can restore them later, and + // make sure we make the quotes JSON-friendly in the user variables. + originalUserVars := make(map[string]string) + for k, v := range p.config.tpl.UserVars { + originalUserVars[k] = v + } + + // Make sure we reset them no matter what + defer func() { + p.config.tpl.UserVars = originalUserVars + }() + + // Make the current user variables JSON string safe. + for k, v := range p.config.tpl.UserVars { + v = strings.Replace(v, `\`, `\\`, -1) + v = strings.Replace(v, `"`, `\"`, -1) + p.config.tpl.UserVars[k] = v + } + + // Process the bytes with the template processor + jsonBytesProcessed, err := p.config.tpl.Process(string(jsonBytes), nil) + if err != nil { + return nil, err + } + + var result map[string]interface{} + if err := json.Unmarshal([]byte(jsonBytesProcessed), &result); err != nil { + return nil, err + } + + return result, nil +} + var DefaultConfigTemplate = ` cookbook_path [{{.CookbookPaths}}] `