diff --git a/plugins/provisioners/chef/config/chef_solo.rb b/plugins/provisioners/chef/config/chef_solo.rb index a2222a1ed..d3cd2fc30 100644 --- a/plugins/provisioners/chef/config/chef_solo.rb +++ b/plugins/provisioners/chef/config/chef_solo.rb @@ -11,12 +11,16 @@ module VagrantPlugins attr_accessor :nfs attr_accessor :encrypted_data_bag_secret_key_path attr_accessor :encrypted_data_bag_secret + attr_accessor :environments_path + attr_accessor :environment def initialize super @cookbooks_path = UNSET_VALUE @data_bags_path = UNSET_VALUE + @environments_path = UNSET_VALUE + @environment = UNSET_VALUE @recipe_url = UNSET_VALUE @roles_path = UNSET_VALUE @nfs = UNSET_VALUE @@ -32,6 +36,7 @@ module VagrantPlugins super @recipe_url = nil if @recipe_url == UNSET_VALUE + @environment = nil if @environment == UNSET_VALUE if @cookbooks_path == UNSET_VALUE @cookbooks_path = [] @@ -39,13 +44,15 @@ module VagrantPlugins @cookbooks_path << [:vm, "cookbooks"] end - @data_bags_path = [] if @data_bags_path == UNSET_VALUE - @roles_path = [] if @roles_path == UNSET_VALUE + @data_bags_path = [] if @data_bags_path == UNSET_VALUE + @roles_path = [] if @roles_path == UNSET_VALUE + @environments_path = [] if @environments_path == UNSET_VALUE or @recipe_url == nil # Make sure the path is an array. - @cookbooks_path = prepare_folders_config(@cookbooks_path) - @data_bags_path = prepare_folders_config(@data_bags_path) - @roles_path = prepare_folders_config(@roles_path) + @cookbooks_path = prepare_folders_config(@cookbooks_path) + @data_bags_path = prepare_folders_config(@data_bags_path) + @roles_path = prepare_folders_config(@roles_path) + @environments_path = prepare_folders_config(@environments_path) @nfs = false if @nfs == UNSET_VALUE @encrypted_data_bag_secret = "/tmp/encrypted_data_bag_secret" if \ @@ -59,7 +66,8 @@ module VagrantPlugins errors.concat(validate_base(machine)) errors << I18n.t("vagrant.config.chef.cookbooks_path_empty") if \ !cookbooks_path || [cookbooks_path].flatten.empty? - + errors << I18n.t("vagrant.config.chef.environment_path_required") if \ + environment and (!environments_path || [environments_path].flatten.empty?) { "chef solo provisioner" => errors } end diff --git a/plugins/provisioners/chef/provisioner/chef_solo.rb b/plugins/provisioners/chef/provisioner/chef_solo.rb index a9cf326a8..a5fc1157f 100644 --- a/plugins/provisioners/chef/provisioner/chef_solo.rb +++ b/plugins/provisioners/chef/provisioner/chef_solo.rb @@ -11,7 +11,7 @@ module VagrantPlugins class ChefSolo < Base extend Vagrant::Util::Counter include Vagrant::Util::Counter - + attr_reader :environments_folders attr_reader :cookbook_folders attr_reader :role_folders attr_reader :data_bags_folders @@ -25,16 +25,18 @@ module VagrantPlugins @cookbook_folders = expanded_folders(@config.cookbooks_path, "cookbooks") @role_folders = expanded_folders(@config.roles_path, "roles") @data_bags_folders = expanded_folders(@config.data_bags_path, "data_bags") + @environments_folders = expanded_folders(@config.environments_path, "environments") share_folders(root_config, "csc", @cookbook_folders) share_folders(root_config, "csr", @role_folders) share_folders(root_config, "csdb", @data_bags_folders) + share_folders(root_config, "cse", @environments_folders) end def provision # Verify that the proper shared folders exist. check = [] - [@cookbook_folders, @role_folders, @data_bags_folders].each do |folders| + [@cookbook_folders, @role_folders, @data_bags_folders, @environments_folders].each do |folders| folders.each do |type, local_path, remote_path| # We only care about checking folders that have a local path, meaning # they were shared from the local machine, rather than assumed to @@ -125,7 +127,7 @@ module VagrantPlugins cookbooks_path = guest_paths(@cookbook_folders) roles_path = guest_paths(@role_folders).first data_bags_path = guest_paths(@data_bags_folders).first - + environments_path = guest_paths(@environments_folders).first setup_config("provisioners/chef_solo/solo", "solo.rb", { :node_name => @config.node_name, :cookbooks_path => cookbooks_path, @@ -133,6 +135,8 @@ module VagrantPlugins :roles_path => roles_path, :data_bags_path => data_bags_path, :encrypted_data_bag_secret => @config.encrypted_data_bag_secret, + :environments_path => environments_path, + :environment => @config.environment, }) end diff --git a/templates/locales/en.yml b/templates/locales/en.yml index 26a121cae..b7b902f5a 100644 --- a/templates/locales/en.yml +++ b/templates/locales/en.yml @@ -615,6 +615,7 @@ en: error_empty: "`%{field}` must be not be empty." chef: cookbooks_path_empty: "Must specify a cookbooks path for chef solo." + environment_path_required: "When 'environment' is specified, you must provide 'environments_path'." cookbooks_path_missing: |- Cookbook path doesn't exist: %{path} custom_config_path_missing: |- diff --git a/templates/provisioners/chef_solo/solo.erb b/templates/provisioners/chef_solo/solo.erb index 9a2077d48..95c8a30f4 100644 --- a/templates/provisioners/chef_solo/solo.erb +++ b/templates/provisioners/chef_solo/solo.erb @@ -20,6 +20,14 @@ data_bag_path <%= data_bags_path.inspect %> recipe_url "<%= recipe_url %>" <% end -%> +<% if environments_path %> +environment_path <%= environments_path.inspect %> +<% end -%> + +<% if environment %> +environment "<%= environment %>" +<% end -%> + http_proxy <%= http_proxy.inspect %> http_proxy_user <%= http_proxy_user.inspect %> http_proxy_pass <%= http_proxy_pass.inspect %>