Chef configuration is now pulled into Chef provisioner base. Log level is able to be specified.
This commit is contained in:
parent
965e5a12f3
commit
008e533c98
|
@ -18,6 +18,7 @@ module Vagrant
|
|||
|
||||
# Shared config
|
||||
attr_accessor :provisioning_path
|
||||
attr_accessor :log_level
|
||||
attr_accessor :json
|
||||
|
||||
def initialize
|
||||
|
@ -27,6 +28,7 @@ module Vagrant
|
|||
|
||||
@cookbooks_path = "cookbooks"
|
||||
@provisioning_path = "/tmp/vagrant-chef"
|
||||
@log_level = :info
|
||||
@json = {
|
||||
:instance_role => "vagrant",
|
||||
:run_list => ["recipe[vagrant_main]"]
|
||||
|
@ -79,6 +81,15 @@ module Vagrant
|
|||
end
|
||||
end
|
||||
|
||||
def setup_config(template, filename, template_vars)
|
||||
config_file = TemplateRenderer.render(template, {
|
||||
:log_level => env.config.chef.log_level.to_sym
|
||||
}.merge(template_vars))
|
||||
|
||||
logger.info "Uploading chef configuration script..."
|
||||
env.ssh.upload!(StringIO.new(config_file), File.join(env.config.chef.provisioning_path, filename))
|
||||
end
|
||||
|
||||
def setup_json
|
||||
logger.info "Generating chef JSON and uploading..."
|
||||
|
||||
|
|
|
@ -20,7 +20,7 @@ module Vagrant
|
|||
create_client_key_folder
|
||||
upload_validation_key
|
||||
setup_json
|
||||
setup_config
|
||||
setup_server_config
|
||||
run_chef_client
|
||||
end
|
||||
|
||||
|
@ -38,17 +38,14 @@ module Vagrant
|
|||
env.ssh.upload!(validation_key_path, guest_validation_key_path)
|
||||
end
|
||||
|
||||
def setup_config
|
||||
solo_file = TemplateRenderer.render("chef_server_client", {
|
||||
def setup_server_config
|
||||
setup_config("chef_server_client", "client.rb", {
|
||||
:node_name => env.config.chef.node_name,
|
||||
:chef_server_url => env.config.chef.chef_server_url,
|
||||
:validation_client_name => env.config.chef.validation_client_name,
|
||||
:validation_key => guest_validation_key_path,
|
||||
:client_key => env.config.chef.client_key_path
|
||||
})
|
||||
|
||||
logger.info "Uploading chef-client configuration script..."
|
||||
env.ssh.upload!(StringIO.new(solo_file), File.join(env.config.chef.provisioning_path, "client.rb"))
|
||||
end
|
||||
|
||||
def run_chef_client
|
||||
|
|
|
@ -20,13 +20,10 @@ module Vagrant
|
|||
end
|
||||
|
||||
def setup_solo_config
|
||||
solo_file = TemplateRenderer.render("chef_solo_solo", {
|
||||
setup_config("chef_solo_solo", "solo.rb", {
|
||||
:provisioning_path => env.config.chef.provisioning_path,
|
||||
:cookbooks_path => cookbooks_path
|
||||
})
|
||||
|
||||
logger.info "Uploading chef-solo configuration script..."
|
||||
env.ssh.upload!(StringIO.new(solo_file), File.join(env.config.chef.provisioning_path, "solo.rb"))
|
||||
end
|
||||
|
||||
def run_chef_solo
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
log_level :info
|
||||
log_level <%= log_level.inspect %>
|
||||
log_location STDOUT
|
||||
node_name "<%= node_name %>"
|
||||
ssl_verify_mode :verify_none
|
||||
|
|
|
@ -1,2 +1,3 @@
|
|||
file_cache_path "<%= provisioning_path %>"
|
||||
cookbook_path <%= cookbooks_path %>
|
||||
log_level <%= log_level.inspect %>
|
|
@ -54,6 +54,7 @@ class Test::Unit::TestCase
|
|||
config.chef.node_name = "baz"
|
||||
config.chef.cookbooks_path = "cookbooks"
|
||||
config.chef.provisioning_path = "/tmp/vagrant-chef"
|
||||
config.chef.log_level = :info
|
||||
config.chef.json = {
|
||||
:recipes => ["vagrant_main"]
|
||||
}
|
||||
|
|
|
@ -15,7 +15,7 @@ class ChefServerProvisionerTest < Test::Unit::TestCase
|
|||
@action.expects(:create_client_key_folder).once.in_sequence(prov_seq)
|
||||
@action.expects(:upload_validation_key).once.in_sequence(prov_seq)
|
||||
@action.expects(:setup_json).once.in_sequence(prov_seq)
|
||||
@action.expects(:setup_config).once.in_sequence(prov_seq)
|
||||
@action.expects(:setup_server_config).once.in_sequence(prov_seq)
|
||||
@action.expects(:run_chef_client).once.in_sequence(prov_seq)
|
||||
@action.provision!
|
||||
end
|
||||
|
@ -141,40 +141,18 @@ class ChefServerProvisionerTest < Test::Unit::TestCase
|
|||
context "generating and uploading chef client configuration file" do
|
||||
setup do
|
||||
@action.stubs(:guest_validation_key_path).returns("foo")
|
||||
|
||||
@env.ssh.stubs(:upload!)
|
||||
end
|
||||
|
||||
should "upload properly generate the configuration file using configuration data" do
|
||||
expected_config = <<-config
|
||||
log_level :info
|
||||
log_location STDOUT
|
||||
node_name "#{@env.config.chef.node_name}"
|
||||
ssl_verify_mode :verify_none
|
||||
chef_server_url "#{@env.config.chef.chef_server_url}"
|
||||
should "call setup_config with proper variables" do
|
||||
@action.expects(:setup_config).with("chef_server_client", "client.rb", {
|
||||
:node_name => @env.config.chef.node_name,
|
||||
:chef_server_url => @env.config.chef.chef_server_url,
|
||||
:validation_client_name => @env.config.chef.validation_client_name,
|
||||
:validation_key => @action.guest_validation_key_path,
|
||||
:client_key => @env.config.chef.client_key_path
|
||||
})
|
||||
|
||||
validation_client_name "#{@env.config.chef.validation_client_name}"
|
||||
validation_key "#{@action.guest_validation_key_path}"
|
||||
client_key "#{@env.config.chef.client_key_path}"
|
||||
|
||||
file_store_path "/srv/chef/file_store"
|
||||
file_cache_path "/srv/chef/cache"
|
||||
|
||||
pid_file "/var/run/chef/chef-client.pid"
|
||||
|
||||
Mixlib::Log::Formatter.show_time = true
|
||||
config
|
||||
|
||||
StringIO.expects(:new).with(expected_config).once
|
||||
@action.setup_config
|
||||
end
|
||||
|
||||
should "upload this file as client.rb to the provisioning folder" do
|
||||
Vagrant::Util::TemplateRenderer.expects(:render).returns("foo")
|
||||
StringIO.expects(:new).returns("foo")
|
||||
File.expects(:join).with(@env.config.chef.provisioning_path, "client.rb").once.returns("bar")
|
||||
@env.ssh.expects(:upload!).with("foo", "bar").once
|
||||
@action.setup_config
|
||||
@action.setup_server_config
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -92,22 +92,12 @@ class ChefSoloProvisionerTest < Test::Unit::TestCase
|
|||
@env.ssh.stubs(:upload!)
|
||||
end
|
||||
|
||||
should "upload properly generate the configuration file using configuration data" do
|
||||
expected_config = <<-config
|
||||
file_cache_path "#{@env.config.chef.provisioning_path}"
|
||||
cookbook_path #{@action.cookbooks_path}
|
||||
config
|
||||
should "call setup_config with proper variables" do
|
||||
@action.expects(:setup_config).with("chef_solo_solo", "solo.rb", {
|
||||
:provisioning_path => @env.config.chef.provisioning_path,
|
||||
:cookbooks_path => @action.cookbooks_path
|
||||
})
|
||||
|
||||
StringIO.expects(:new).with(expected_config).once
|
||||
@action.setup_solo_config
|
||||
end
|
||||
|
||||
should "upload this file as solo.rb to the provisioning folder" do
|
||||
Vagrant::Util::TemplateRenderer.expects(:render).returns("foo")
|
||||
@action.expects(:cookbooks_path).returns("cookbooks")
|
||||
StringIO.expects(:new).returns("foo")
|
||||
File.expects(:join).with(@env.config.chef.provisioning_path, "solo.rb").once.returns("bar")
|
||||
@env.ssh.expects(:upload!).with("foo", "bar").once
|
||||
@action.setup_solo_config
|
||||
end
|
||||
end
|
||||
|
|
|
@ -77,6 +77,56 @@ class ChefProvisionerTest < Test::Unit::TestCase
|
|||
end
|
||||
end
|
||||
|
||||
context "generating and uploading chef configuration file" do
|
||||
setup do
|
||||
@env.ssh.stubs(:upload!)
|
||||
|
||||
@template = "template"
|
||||
@filename = "foo.rb"
|
||||
|
||||
Vagrant::Util::TemplateRenderer.stubs(:render).returns("foo")
|
||||
end
|
||||
|
||||
should "render and upload file" do
|
||||
template_data = mock("data")
|
||||
string_io = mock("string_io")
|
||||
Vagrant::Util::TemplateRenderer.expects(:render).with(@template, anything).returns(template_data)
|
||||
StringIO.expects(:new).with(template_data).returns(string_io)
|
||||
File.expects(:join).with(@env.config.chef.provisioning_path, @filename).once.returns("bar")
|
||||
@env.ssh.expects(:upload!).with(string_io, "bar")
|
||||
|
||||
@action.setup_config(@template, @filename, {})
|
||||
end
|
||||
|
||||
should "provide log level by default" do
|
||||
Vagrant::Util::TemplateRenderer.expects(:render).returns("foo").with() do |template, vars|
|
||||
assert vars.has_key?(:log_level)
|
||||
assert_equal @env.config.chef.log_level.to_sym, vars[:log_level]
|
||||
true
|
||||
end
|
||||
|
||||
@action.setup_config(@template, @filename, {})
|
||||
end
|
||||
|
||||
should "allow custom template variables" do
|
||||
custom = {
|
||||
:foo => "bar",
|
||||
:int => 7
|
||||
}
|
||||
|
||||
Vagrant::Util::TemplateRenderer.expects(:render).returns("foo").with() do |template, vars|
|
||||
custom.each do |key, value|
|
||||
assert vars.has_key?(key)
|
||||
assert_equal value, vars[key]
|
||||
end
|
||||
|
||||
true
|
||||
end
|
||||
|
||||
@action.setup_config(@template, @filename, custom)
|
||||
end
|
||||
end
|
||||
|
||||
context "generating and uploading json" do
|
||||
def assert_json
|
||||
@env.ssh.expects(:upload!).with do |json, path|
|
||||
|
|
Loading…
Reference in New Issue