Basic validation added for Chef configuration (both solo and server).
This commit is contained in:
parent
465392f99c
commit
ed645417c7
|
@ -1,5 +1,6 @@
|
||||||
## 0.6.4 (unreleased)
|
## 0.6.4 (unreleased)
|
||||||
|
|
||||||
|
- Basic validation added for Chef configuration (both solo and server).
|
||||||
- Top config class is now available in all `Vagrant::Config::Base`
|
- Top config class is now available in all `Vagrant::Config::Base`
|
||||||
subclasses, which is useful for config validation.
|
subclasses, which is useful for config validation.
|
||||||
- Subcommand help shows proper full command in task listing. [GH-168]
|
- Subcommand help shows proper full command in task listing. [GH-168]
|
||||||
|
|
|
@ -125,6 +125,24 @@ module Vagrant
|
||||||
result.delete("json")
|
result.delete("json")
|
||||||
result
|
result
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def validate(errors)
|
||||||
|
if top.vm.provisioner == :chef_solo
|
||||||
|
# Validate chef solo settings
|
||||||
|
errors.add(I18n.t("vagrant.config.chef.cookbooks_path_empty")) if !cookbooks_path || [cookbooks_path].flatten.empty?
|
||||||
|
end
|
||||||
|
|
||||||
|
if top.vm.provisioner == :chef_server
|
||||||
|
# Validate chef server settings
|
||||||
|
errors.add(I18n.t("vagrant.config.chef.server_url_empty")) if !chef_server_url || chef_server_url.strip == ""
|
||||||
|
errors.add(I18n.t("vagrant.config.chef.validation_key_path")) if !validation_key_path
|
||||||
|
end
|
||||||
|
|
||||||
|
if [:chef_solo, :chef_server].include?(top.vm.provisioner)
|
||||||
|
# Validations shared by both chef solo and server
|
||||||
|
errors.add(I18n.t("vagrant.config.chef.run_list_empty")) if !run_list || run_list.empty?
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -99,6 +99,11 @@ en:
|
||||||
config:
|
config:
|
||||||
common:
|
common:
|
||||||
error_empty: `%{field}` must be filled in.
|
error_empty: `%{field}` must be filled in.
|
||||||
|
chef:
|
||||||
|
run_list_empty: "Run list must not be empty."
|
||||||
|
cookbooks_path_empty: "Must specify a cookbooks path for chef solo."
|
||||||
|
server_url_empty: "Chef server URL must be populated."
|
||||||
|
validation_key_path: "Validation key path must be valid path to your chef server validation key."
|
||||||
ssh:
|
ssh:
|
||||||
private_key_missing: "`private_key_path` file must exist: %{path}"
|
private_key_missing: "`private_key_path` file must exist: %{path}"
|
||||||
vm:
|
vm:
|
||||||
|
|
|
@ -21,7 +21,6 @@ class ChefProvisionerTest < Test::Unit::TestCase
|
||||||
context "config" do
|
context "config" do
|
||||||
setup do
|
setup do
|
||||||
@config = Vagrant::Provisioners::Chef::ChefConfig.new
|
@config = Vagrant::Provisioners::Chef::ChefConfig.new
|
||||||
@config.run_list.clear
|
|
||||||
end
|
end
|
||||||
|
|
||||||
should "not include the 'json' key in the config dump" do
|
should "not include the 'json' key in the config dump" do
|
||||||
|
@ -44,6 +43,10 @@ class ChefProvisionerTest < Test::Unit::TestCase
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
should "have an empty run list to begin with" do
|
||||||
|
assert @config.run_list.empty?
|
||||||
|
end
|
||||||
|
|
||||||
should "add a recipe to the run list" do
|
should "add a recipe to the run list" do
|
||||||
@config.add_recipe("foo")
|
@config.add_recipe("foo")
|
||||||
assert_equal "recipe[foo]", @config.run_list[0]
|
assert_equal "recipe[foo]", @config.run_list[0]
|
||||||
|
@ -63,6 +66,74 @@ class ChefProvisionerTest < Test::Unit::TestCase
|
||||||
@config.add_role("role[user]")
|
@config.add_role("role[user]")
|
||||||
assert_equal "role[user]", @config.run_list[0]
|
assert_equal "role[user]", @config.run_list[0]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context "validation" do
|
||||||
|
setup do
|
||||||
|
@errors = Vagrant::Config::ErrorRecorder.new
|
||||||
|
@top = @config.top = Vagrant::Config::Top.new(@env)
|
||||||
|
end
|
||||||
|
|
||||||
|
context "chef solo" do
|
||||||
|
setup do
|
||||||
|
@top.vm.provisioner = :chef_solo
|
||||||
|
|
||||||
|
@config.run_list = ["foo"]
|
||||||
|
@config.cookbooks_path = "cookbooks"
|
||||||
|
end
|
||||||
|
|
||||||
|
should "be valid if provisioner is not chef solo" do
|
||||||
|
@top.vm.provisioner = nil
|
||||||
|
@config.validate(@errors)
|
||||||
|
assert @errors.errors.empty?
|
||||||
|
end
|
||||||
|
|
||||||
|
should "be invalid if run list is empty" do
|
||||||
|
@config.run_list = []
|
||||||
|
@config.validate(@errors)
|
||||||
|
assert !@errors.errors.empty?
|
||||||
|
end
|
||||||
|
|
||||||
|
should "be invalid if cookbooks path is empty" do
|
||||||
|
@config.cookbooks_path = nil
|
||||||
|
@config.validate(@errors)
|
||||||
|
assert !@errors.errors.empty?
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context "chef server" do
|
||||||
|
setup do
|
||||||
|
@top.vm.provisioner = :chef_server
|
||||||
|
|
||||||
|
@config.run_list = ["foo"]
|
||||||
|
@config.chef_server_url = "foo"
|
||||||
|
@config.validation_key_path = "foo"
|
||||||
|
end
|
||||||
|
|
||||||
|
should "be valid if provisioner is not chef solo" do
|
||||||
|
@top.vm.provisioner = nil
|
||||||
|
@config.validate(@errors)
|
||||||
|
assert @errors.errors.empty?
|
||||||
|
end
|
||||||
|
|
||||||
|
should "be invalid if run list is empty" do
|
||||||
|
@config.run_list = []
|
||||||
|
@config.validate(@errors)
|
||||||
|
assert !@errors.errors.empty?
|
||||||
|
end
|
||||||
|
|
||||||
|
should "be invalid if run list is empty" do
|
||||||
|
@config.chef_server_url = nil
|
||||||
|
@config.validate(@errors)
|
||||||
|
assert !@errors.errors.empty?
|
||||||
|
end
|
||||||
|
|
||||||
|
should "be invalid if run list is empty" do
|
||||||
|
@config.validation_key_path = nil
|
||||||
|
@config.validate(@errors)
|
||||||
|
assert !@errors.errors.empty?
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context "verifying binary" do
|
context "verifying binary" do
|
||||||
|
@ -77,6 +148,7 @@ class ChefProvisionerTest < Test::Unit::TestCase
|
||||||
@action.verify_binary(binary)
|
@action.verify_binary(binary)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context "permissions on provisioning folder" do
|
context "permissions on provisioning folder" do
|
||||||
should "create and chown the folder to the ssh user" do
|
should "create and chown the folder to the ssh user" do
|
||||||
ssh_seq = sequence("ssh_seq")
|
ssh_seq = sequence("ssh_seq")
|
||||||
|
|
Loading…
Reference in New Issue