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
|
# Shared config
|
||||||
attr_accessor :provisioning_path
|
attr_accessor :provisioning_path
|
||||||
|
attr_accessor :log_level
|
||||||
attr_accessor :json
|
attr_accessor :json
|
||||||
|
|
||||||
def initialize
|
def initialize
|
||||||
|
@ -27,6 +28,7 @@ module Vagrant
|
||||||
|
|
||||||
@cookbooks_path = "cookbooks"
|
@cookbooks_path = "cookbooks"
|
||||||
@provisioning_path = "/tmp/vagrant-chef"
|
@provisioning_path = "/tmp/vagrant-chef"
|
||||||
|
@log_level = :info
|
||||||
@json = {
|
@json = {
|
||||||
:instance_role => "vagrant",
|
:instance_role => "vagrant",
|
||||||
:run_list => ["recipe[vagrant_main]"]
|
:run_list => ["recipe[vagrant_main]"]
|
||||||
|
@ -79,6 +81,15 @@ module Vagrant
|
||||||
end
|
end
|
||||||
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
|
def setup_json
|
||||||
logger.info "Generating chef JSON and uploading..."
|
logger.info "Generating chef JSON and uploading..."
|
||||||
|
|
||||||
|
|
|
@ -20,7 +20,7 @@ module Vagrant
|
||||||
create_client_key_folder
|
create_client_key_folder
|
||||||
upload_validation_key
|
upload_validation_key
|
||||||
setup_json
|
setup_json
|
||||||
setup_config
|
setup_server_config
|
||||||
run_chef_client
|
run_chef_client
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -38,17 +38,14 @@ module Vagrant
|
||||||
env.ssh.upload!(validation_key_path, guest_validation_key_path)
|
env.ssh.upload!(validation_key_path, guest_validation_key_path)
|
||||||
end
|
end
|
||||||
|
|
||||||
def setup_config
|
def setup_server_config
|
||||||
solo_file = TemplateRenderer.render("chef_server_client", {
|
setup_config("chef_server_client", "client.rb", {
|
||||||
:node_name => env.config.chef.node_name,
|
:node_name => env.config.chef.node_name,
|
||||||
:chef_server_url => env.config.chef.chef_server_url,
|
:chef_server_url => env.config.chef.chef_server_url,
|
||||||
:validation_client_name => env.config.chef.validation_client_name,
|
:validation_client_name => env.config.chef.validation_client_name,
|
||||||
:validation_key => guest_validation_key_path,
|
:validation_key => guest_validation_key_path,
|
||||||
:client_key => env.config.chef.client_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
|
end
|
||||||
|
|
||||||
def run_chef_client
|
def run_chef_client
|
||||||
|
|
|
@ -20,13 +20,10 @@ module Vagrant
|
||||||
end
|
end
|
||||||
|
|
||||||
def setup_solo_config
|
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,
|
:provisioning_path => env.config.chef.provisioning_path,
|
||||||
:cookbooks_path => cookbooks_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
|
end
|
||||||
|
|
||||||
def run_chef_solo
|
def run_chef_solo
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
log_level :info
|
log_level <%= log_level.inspect %>
|
||||||
log_location STDOUT
|
log_location STDOUT
|
||||||
node_name "<%= node_name %>"
|
node_name "<%= node_name %>"
|
||||||
ssl_verify_mode :verify_none
|
ssl_verify_mode :verify_none
|
||||||
|
|
|
@ -1,2 +1,3 @@
|
||||||
file_cache_path "<%= provisioning_path %>"
|
file_cache_path "<%= provisioning_path %>"
|
||||||
cookbook_path <%= cookbooks_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.node_name = "baz"
|
||||||
config.chef.cookbooks_path = "cookbooks"
|
config.chef.cookbooks_path = "cookbooks"
|
||||||
config.chef.provisioning_path = "/tmp/vagrant-chef"
|
config.chef.provisioning_path = "/tmp/vagrant-chef"
|
||||||
|
config.chef.log_level = :info
|
||||||
config.chef.json = {
|
config.chef.json = {
|
||||||
:recipes => ["vagrant_main"]
|
: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(:create_client_key_folder).once.in_sequence(prov_seq)
|
||||||
@action.expects(:upload_validation_key).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_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.expects(:run_chef_client).once.in_sequence(prov_seq)
|
||||||
@action.provision!
|
@action.provision!
|
||||||
end
|
end
|
||||||
|
@ -141,40 +141,18 @@ class ChefServerProvisionerTest < Test::Unit::TestCase
|
||||||
context "generating and uploading chef client configuration file" do
|
context "generating and uploading chef client configuration file" do
|
||||||
setup do
|
setup do
|
||||||
@action.stubs(:guest_validation_key_path).returns("foo")
|
@action.stubs(:guest_validation_key_path).returns("foo")
|
||||||
|
|
||||||
@env.ssh.stubs(:upload!)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
should "upload properly generate the configuration file using configuration data" do
|
should "call setup_config with proper variables" do
|
||||||
expected_config = <<-config
|
@action.expects(:setup_config).with("chef_server_client", "client.rb", {
|
||||||
log_level :info
|
:node_name => @env.config.chef.node_name,
|
||||||
log_location STDOUT
|
:chef_server_url => @env.config.chef.chef_server_url,
|
||||||
node_name "#{@env.config.chef.node_name}"
|
:validation_client_name => @env.config.chef.validation_client_name,
|
||||||
ssl_verify_mode :verify_none
|
:validation_key => @action.guest_validation_key_path,
|
||||||
chef_server_url "#{@env.config.chef.chef_server_url}"
|
:client_key => @env.config.chef.client_key_path
|
||||||
|
})
|
||||||
|
|
||||||
validation_client_name "#{@env.config.chef.validation_client_name}"
|
@action.setup_server_config
|
||||||
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
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -92,22 +92,12 @@ class ChefSoloProvisionerTest < Test::Unit::TestCase
|
||||||
@env.ssh.stubs(:upload!)
|
@env.ssh.stubs(:upload!)
|
||||||
end
|
end
|
||||||
|
|
||||||
should "upload properly generate the configuration file using configuration data" do
|
should "call setup_config with proper variables" do
|
||||||
expected_config = <<-config
|
@action.expects(:setup_config).with("chef_solo_solo", "solo.rb", {
|
||||||
file_cache_path "#{@env.config.chef.provisioning_path}"
|
:provisioning_path => @env.config.chef.provisioning_path,
|
||||||
cookbook_path #{@action.cookbooks_path}
|
:cookbooks_path => @action.cookbooks_path
|
||||||
config
|
})
|
||||||
|
|
||||||
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
|
@action.setup_solo_config
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -77,6 +77,56 @@ class ChefProvisionerTest < Test::Unit::TestCase
|
||||||
end
|
end
|
||||||
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
|
context "generating and uploading json" do
|
||||||
def assert_json
|
def assert_json
|
||||||
@env.ssh.expects(:upload!).with do |json, path|
|
@env.ssh.expects(:upload!).with do |json, path|
|
||||||
|
|
Loading…
Reference in New Issue