Commit 802168f4 authored by Mitchell Hashimoto's avatar Mitchell Hashimoto

Merge branch 'add-chef-environment' of github.com:cfortier2/packer into...

Merge branch 'add-chef-environment' of github.com:cfortier2/packer into cfortier2-add-chef-environment

Conflicts:
	provisioner/chef-client/provisioner.go
parents c9cc82d8 bf38fa9f
...@@ -20,6 +20,7 @@ import ( ...@@ -20,6 +20,7 @@ import (
type Config struct { type Config struct {
common.PackerConfig `mapstructure:",squash"` common.PackerConfig `mapstructure:",squash"`
ChefEnvironment string `mapstructure:"chef_environment"`
ConfigTemplate string `mapstructure:"config_template"` ConfigTemplate string `mapstructure:"config_template"`
ExecuteCommand string `mapstructure:"execute_command"` ExecuteCommand string `mapstructure:"execute_command"`
InstallCommand string `mapstructure:"install_command"` InstallCommand string `mapstructure:"install_command"`
...@@ -47,6 +48,7 @@ type ConfigTemplate struct { ...@@ -47,6 +48,7 @@ type ConfigTemplate struct {
ServerUrl string ServerUrl string
ValidationKeyPath string ValidationKeyPath string
ValidationClientName string ValidationClientName string
ChefEnvironment string
} }
type ExecuteTemplate struct { type ExecuteTemplate struct {
...@@ -75,6 +77,7 @@ func (p *Provisioner) Prepare(raws ...interface{}) error { ...@@ -75,6 +77,7 @@ func (p *Provisioner) Prepare(raws ...interface{}) error {
errs := common.CheckUnusedConfig(md) errs := common.CheckUnusedConfig(md)
templates := map[string]*string{ templates := map[string]*string{
"chef_environment": &p.config.ChefEnvironment,
"config_template": &p.config.ConfigTemplate, "config_template": &p.config.ConfigTemplate,
"node_name": &p.config.NodeName, "node_name": &p.config.NodeName,
"staging_dir": &p.config.StagingDir, "staging_dir": &p.config.StagingDir,
...@@ -206,7 +209,7 @@ func (p *Provisioner) Provision(ui packer.Ui, comm packer.Communicator) error { ...@@ -206,7 +209,7 @@ func (p *Provisioner) Provision(ui packer.Ui, comm packer.Communicator) error {
} }
configPath, err := p.createConfig( configPath, err := p.createConfig(
ui, comm, nodeName, serverUrl, remoteValidationKeyPath, p.config.ValidationClientName) ui, comm, nodeName, serverUrl, remoteValidationKeyPath, p.config.ValidationClientName, p.config.ChefEnvironment)
if err != nil { if err != nil {
return fmt.Errorf("Error creating Chef config file: %s", err) return fmt.Errorf("Error creating Chef config file: %s", err)
} }
...@@ -260,7 +263,7 @@ func (p *Provisioner) uploadDirectory(ui packer.Ui, comm packer.Communicator, ds ...@@ -260,7 +263,7 @@ func (p *Provisioner) uploadDirectory(ui packer.Ui, comm packer.Communicator, ds
return comm.UploadDir(dst, src, nil) return comm.UploadDir(dst, src, nil)
} }
func (p *Provisioner) createConfig(ui packer.Ui, comm packer.Communicator, nodeName string, serverUrl string, remoteKeyPath string, validationClientName string) (string, error) { func (p *Provisioner) createConfig(ui packer.Ui, comm packer.Communicator, nodeName string, serverUrl string, remoteKeyPath string, validationClientName string, chefEnvironment string) (string, error) {
ui.Message("Creating configuration file 'client.rb'") ui.Message("Creating configuration file 'client.rb'")
// Read the template // Read the template
...@@ -285,6 +288,7 @@ func (p *Provisioner) createConfig(ui packer.Ui, comm packer.Communicator, nodeN ...@@ -285,6 +288,7 @@ func (p *Provisioner) createConfig(ui packer.Ui, comm packer.Communicator, nodeN
ServerUrl: serverUrl, ServerUrl: serverUrl,
ValidationKeyPath: remoteKeyPath, ValidationKeyPath: remoteKeyPath,
ValidationClientName: validationClientName, ValidationClientName: validationClientName,
ChefEnvironment: chefEnvironment,
}) })
if err != nil { if err != nil {
return "", err return "", err
...@@ -552,4 +556,7 @@ validation_key "{{.ValidationKeyPath}}" ...@@ -552,4 +556,7 @@ validation_key "{{.ValidationKeyPath}}"
{{if ne .NodeName ""}} {{if ne .NodeName ""}}
node_name "{{.NodeName}}" node_name "{{.NodeName}}"
{{end}} {{end}}
{{if ne .ChefEnvironment ""}}
environment "{{.ChefEnvironment}}"
{{end}}
` `
...@@ -22,6 +22,22 @@ func TestProvisioner_Impl(t *testing.T) { ...@@ -22,6 +22,22 @@ func TestProvisioner_Impl(t *testing.T) {
} }
} }
func TestProvisionerPrepare_chefEnvironment(t *testing.T) {
var p Provisioner
config := testConfig()
config["chef_environment"] = "some-env"
err := p.Prepare(config)
if err != nil {
t.Fatalf("err: %s", err)
}
if p.config.ChefEnvironment != "some-env" {
t.Fatalf("unexpected: %#v", p.config.ChefEnvironment)
}
}
func TestProvisionerPrepare_configTemplate(t *testing.T) { func TestProvisionerPrepare_configTemplate(t *testing.T) {
var err error var err error
var p Provisioner var p Provisioner
......
...@@ -36,6 +36,9 @@ The reference of available configuration options is listed below. No ...@@ -36,6 +36,9 @@ The reference of available configuration options is listed below. No
configuration is actually required, but `node_name` is recommended configuration is actually required, but `node_name` is recommended
since it will allow the provisioner to clean up the node/client. since it will allow the provisioner to clean up the node/client.
* `chef_environment` (string) - The name of the chef_environment sent to the
Chef server. By default this is empty and will not use an environment.
* `config_template` (string) - Path to a template that will be used for * `config_template` (string) - Path to a template that will be used for
the Chef configuration file. By default Packer only sets configuration the Chef configuration file. By default Packer only sets configuration
it needs to match the settings set in the provisioner configuration. If it needs to match the settings set in the provisioner configuration. If
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment