support for chef solo environments, upcoming in chef 11.6

This commit is contained in:
Marc Paradise 2013-07-11 01:52:37 -04:00
parent abd22dfe72
commit 081aa12873
4 changed files with 30 additions and 10 deletions

View File

@ -11,6 +11,8 @@ module VagrantPlugins
attr_accessor :nfs attr_accessor :nfs
attr_accessor :encrypted_data_bag_secret_key_path attr_accessor :encrypted_data_bag_secret_key_path
attr_accessor :encrypted_data_bag_secret attr_accessor :encrypted_data_bag_secret
attr_accessor :environments_path
attr_accessor :environment
def initialize def initialize
super super
@ -22,7 +24,8 @@ module VagrantPlugins
@encrypted_data_bag_secret = UNSET_VALUE @encrypted_data_bag_secret = UNSET_VALUE
@encrypted_data_bag_secret_key_path = UNSET_VALUE @encrypted_data_bag_secret_key_path = UNSET_VALUE
@nfs = UNSET_VALUE @nfs = UNSET_VALUE
@environments_path = UNSET_VALUE
@environment = UNSET_VALUE
@__defaulted_cookbooks_path = false @__defaulted_cookbooks_path = false
end end
@ -34,6 +37,7 @@ module VagrantPlugins
super super
@recipe_url = nil if @recipe_url == UNSET_VALUE @recipe_url = nil if @recipe_url == UNSET_VALUE
@environment = nil if @environment == UNSET_VALUE
if @cookbooks_path == UNSET_VALUE if @cookbooks_path == UNSET_VALUE
@cookbooks_path = [] @cookbooks_path = []
@ -42,13 +46,15 @@ module VagrantPlugins
@__defaulted_cookbooks_path = true @__defaulted_cookbooks_path = true
end end
@data_bags_path = [] if @data_bags_path == UNSET_VALUE @data_bags_path = [] if @data_bags_path == UNSET_VALUE
@roles_path = [] if @roles_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. # Make sure the path is an array.
@cookbooks_path = prepare_folders_config(@cookbooks_path) @cookbooks_path = prepare_folders_config(@cookbooks_path)
@data_bags_path = prepare_folders_config(@data_bags_path) @data_bags_path = prepare_folders_config(@data_bags_path)
@roles_path = prepare_folders_config(@roles_path) @roles_path = prepare_folders_config(@roles_path)
@environments_path = prepare_folders_config(@environments_path)
@encrypted_data_bag_secret = "/tmp/encrypted_data_bag_secret" if \ @encrypted_data_bag_secret = "/tmp/encrypted_data_bag_secret" if \
@encrypted_data_bag_secret == UNSET_VALUE @encrypted_data_bag_secret == UNSET_VALUE
@ -61,7 +67,8 @@ module VagrantPlugins
errors = _detected_errors errors = _detected_errors
errors << I18n.t("vagrant.config.chef.cookbooks_path_empty") if \ errors << I18n.t("vagrant.config.chef.cookbooks_path_empty") if \
!cookbooks_path || [cookbooks_path].flatten.empty? !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 } { "chef solo provisioner" => errors }
end end

View File

@ -11,7 +11,7 @@ module VagrantPlugins
class ChefSolo < Base class ChefSolo < Base
extend Vagrant::Util::Counter extend Vagrant::Util::Counter
include Vagrant::Util::Counter include Vagrant::Util::Counter
attr_reader :environments_folders
attr_reader :cookbook_folders attr_reader :cookbook_folders
attr_reader :role_folders attr_reader :role_folders
attr_reader :data_bags_folders attr_reader :data_bags_folders
@ -25,16 +25,18 @@ module VagrantPlugins
@cookbook_folders = expanded_folders(@config.cookbooks_path, "cookbooks") @cookbook_folders = expanded_folders(@config.cookbooks_path, "cookbooks")
@role_folders = expanded_folders(@config.roles_path, "roles") @role_folders = expanded_folders(@config.roles_path, "roles")
@data_bags_folders = expanded_folders(@config.data_bags_path, "data_bags") @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, "csc", @cookbook_folders)
share_folders(root_config, "csr", @role_folders) share_folders(root_config, "csr", @role_folders)
share_folders(root_config, "csdb", @data_bags_folders) share_folders(root_config, "csdb", @data_bags_folders)
share_folders(root_config, "cse", @environments_folders)
end end
def provision def provision
# Verify that the proper shared folders exist. # Verify that the proper shared folders exist.
check = [] 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| folders.each do |type, local_path, remote_path|
# We only care about checking folders that have a local path, meaning # We only care about checking folders that have a local path, meaning
# they were shared from the local machine, rather than assumed to # they were shared from the local machine, rather than assumed to
@ -122,7 +124,7 @@ module VagrantPlugins
cookbooks_path = guest_paths(@cookbook_folders) cookbooks_path = guest_paths(@cookbook_folders)
roles_path = guest_paths(@role_folders).first roles_path = guest_paths(@role_folders).first
data_bags_path = guest_paths(@data_bags_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", { setup_config("provisioners/chef_solo/solo", "solo.rb", {
:node_name => @config.node_name, :node_name => @config.node_name,
:provisioning_path => @config.provisioning_path, :provisioning_path => @config.provisioning_path,
@ -131,6 +133,8 @@ module VagrantPlugins
:roles_path => roles_path, :roles_path => roles_path,
:data_bags_path => data_bags_path, :data_bags_path => data_bags_path,
:encrypted_data_bag_secret => @config.encrypted_data_bag_secret, :encrypted_data_bag_secret => @config.encrypted_data_bag_secret,
:environments_path => environments_path,
:environment => @config.environment,
}) })
end end

View File

@ -586,6 +586,7 @@ en:
error_empty: "`%{field}` must be not be empty." error_empty: "`%{field}` must be not be empty."
chef: chef:
cookbooks_path_empty: "Must specify a cookbooks path for chef solo." 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: |- cookbooks_path_missing: |-
Cookbook path doesn't exist: %{path} Cookbook path doesn't exist: %{path}
server_url_empty: "Chef server URL must be populated." server_url_empty: "Chef server URL must be populated."

View File

@ -18,6 +18,14 @@ data_bag_path <%= data_bags_path.inspect %>
recipe_url "<%= recipe_url %>" recipe_url "<%= recipe_url %>"
<% end -%> <% end -%>
<% if environments_path %>
environment_path <%= environments_path.inspect %>
<% end -%>
<% if environment %>
environment "<%= environment %>"
<% end -%>
http_proxy <%= http_proxy.inspect %> http_proxy <%= http_proxy.inspect %>
http_proxy_user <%= http_proxy_user.inspect %> http_proxy_user <%= http_proxy_user.inspect %>
http_proxy_pass <%= http_proxy_pass.inspect %> http_proxy_pass <%= http_proxy_pass.inspect %>