chef 12.4.0-universal-mingw32 → 12.4.1-universal-mingw32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/chef/api_client.rb +31 -129
- data/lib/chef/api_client_v1.rb +325 -0
- data/lib/chef/chef_class.rb +15 -7
- data/lib/chef/chef_fs/file_system/chef_server_root_dir.rb +2 -2
- data/lib/chef/dsl/resources.rb +6 -4
- data/lib/chef/exceptions.rb +2 -2
- data/lib/chef/guard_interpreter/resource_guard_interpreter.rb +2 -1
- data/lib/chef/knife/bootstrap/templates/chef-full.erb +4 -4
- data/lib/chef/knife/client_bulk_delete.rb +2 -2
- data/lib/chef/knife/client_create.rb +4 -4
- data/lib/chef/knife/client_delete.rb +3 -3
- data/lib/chef/knife/client_edit.rb +10 -2
- data/lib/chef/knife/client_list.rb +2 -2
- data/lib/chef/knife/client_reregister.rb +2 -2
- data/lib/chef/knife/client_show.rb +2 -2
- data/lib/chef/knife/osc_user_create.rb +3 -3
- data/lib/chef/knife/osc_user_delete.rb +2 -2
- data/lib/chef/knife/osc_user_edit.rb +3 -3
- data/lib/chef/knife/osc_user_list.rb +2 -2
- data/lib/chef/knife/osc_user_reregister.rb +2 -2
- data/lib/chef/knife/osc_user_show.rb +2 -2
- data/lib/chef/knife/user_create.rb +3 -3
- data/lib/chef/knife/user_delete.rb +4 -4
- data/lib/chef/knife/user_edit.rb +3 -3
- data/lib/chef/knife/user_list.rb +2 -2
- data/lib/chef/knife/user_reregister.rb +2 -2
- data/lib/chef/knife/user_show.rb +2 -2
- data/lib/chef/node_map.rb +14 -18
- data/lib/chef/platform/handler_map.rb +45 -0
- data/lib/chef/platform/priority_map.rb +19 -32
- data/lib/chef/platform/provider_handler_map.rb +29 -0
- data/lib/chef/platform/provider_mapping.rb +3 -2
- data/lib/chef/platform/resource_handler_map.rb +29 -0
- data/lib/chef/platform/resource_priority_map.rb +0 -6
- data/lib/chef/provider.rb +1 -1
- data/lib/chef/provider/dsc_resource.rb +2 -2
- data/lib/chef/provider/dsc_script.rb +1 -1
- data/lib/chef/provider/mount/aix.rb +1 -1
- data/lib/chef/provider/package.rb +0 -31
- data/lib/chef/provider/package/aix.rb +1 -0
- data/lib/chef/provider/package/apt.rb +1 -0
- data/lib/chef/provider/package/homebrew.rb +1 -0
- data/lib/chef/provider/package/ips.rb +1 -0
- data/lib/chef/provider/package/macports.rb +1 -0
- data/lib/chef/provider/package/openbsd.rb +1 -0
- data/lib/chef/provider/package/pacman.rb +1 -0
- data/lib/chef/provider/package/paludis.rb +1 -0
- data/lib/chef/provider/package/portage.rb +2 -0
- data/lib/chef/provider/package/smartos.rb +1 -0
- data/lib/chef/provider/package/solaris.rb +2 -0
- data/lib/chef/provider/package/yum.rb +1 -0
- data/lib/chef/provider/package/zypper.rb +1 -0
- data/lib/chef/provider/service.rb +4 -22
- data/lib/chef/provider/service/debian.rb +2 -0
- data/lib/chef/provider/service/insserv.rb +2 -0
- data/lib/chef/provider/service/invokercd.rb +2 -0
- data/lib/chef/provider/service/openbsd.rb +1 -1
- data/lib/chef/provider/service/redhat.rb +2 -0
- data/lib/chef/provider/service/upstart.rb +3 -0
- data/lib/chef/provider_resolver.rb +59 -53
- data/lib/chef/resource.rb +22 -73
- data/lib/chef/resource/dsc_script.rb +1 -1
- data/lib/chef/resource/ips_package.rb +1 -0
- data/lib/chef/resource/mount.rb +8 -0
- data/lib/chef/resource/openbsd_package.rb +0 -11
- data/lib/chef/resource/solaris_package.rb +1 -4
- data/lib/chef/resource_resolver.rb +54 -26
- data/lib/chef/run_list/versioned_recipe_list.rb +6 -5
- data/lib/chef/user.rb +52 -188
- data/lib/chef/user_v1.rb +335 -0
- data/lib/chef/version.rb +1 -1
- data/spec/data/trusted_certs/opscode.pem +53 -56
- data/spec/functional/provider/whyrun_safe_ruby_block_spec.rb +1 -1
- data/spec/functional/resource/package_spec.rb +0 -2
- data/spec/integration/recipes/recipe_dsl_spec.rb +661 -126
- data/spec/spec_helper.rb +19 -13
- data/spec/support/shared/unit/api_versioning.rb +2 -2
- data/spec/unit/api_client_spec.rb +22 -201
- data/spec/unit/api_client_v1_spec.rb +457 -0
- data/spec/unit/knife/client_bulk_delete_spec.rb +4 -4
- data/spec/unit/knife/client_create_spec.rb +1 -1
- data/spec/unit/knife/client_delete_spec.rb +3 -3
- data/spec/unit/knife/client_edit_spec.rb +14 -1
- data/spec/unit/knife/client_list_spec.rb +1 -1
- data/spec/unit/knife/client_reregister_spec.rb +2 -2
- data/spec/unit/knife/client_show_spec.rb +2 -2
- data/spec/unit/knife/osc_user_create_spec.rb +5 -5
- data/spec/unit/knife/osc_user_delete_spec.rb +1 -1
- data/spec/unit/knife/osc_user_edit_spec.rb +1 -1
- data/spec/unit/knife/osc_user_list_spec.rb +1 -1
- data/spec/unit/knife/osc_user_reregister_spec.rb +1 -1
- data/spec/unit/knife/osc_user_show_spec.rb +1 -1
- data/spec/unit/knife/user_create_spec.rb +1 -1
- data/spec/unit/knife/user_delete_spec.rb +2 -2
- data/spec/unit/knife/user_edit_spec.rb +2 -2
- data/spec/unit/knife/user_list_spec.rb +1 -1
- data/spec/unit/knife/user_reregister_spec.rb +1 -1
- data/spec/unit/knife/user_show_spec.rb +2 -2
- data/spec/unit/lwrp_spec.rb +146 -134
- data/spec/unit/node_map_spec.rb +12 -0
- data/spec/unit/platform_spec.rb +1 -1
- data/spec/unit/provider/deploy_spec.rb +1 -1
- data/spec/unit/provider/dsc_resource_spec.rb +3 -3
- data/spec/unit/provider/dsc_script_spec.rb +2 -2
- data/spec/unit/provider_resolver_spec.rb +170 -135
- data/spec/unit/recipe_spec.rb +3 -3
- data/spec/unit/resource/breakpoint_spec.rb +1 -1
- data/spec/unit/resource/cron_spec.rb +1 -1
- data/spec/unit/resource/directory_spec.rb +1 -1
- data/spec/unit/resource/dsc_resource_spec.rb +1 -1
- data/spec/unit/resource/dsc_script_spec.rb +2 -2
- data/spec/unit/resource/env_spec.rb +1 -1
- data/spec/unit/resource/erl_call_spec.rb +1 -1
- data/spec/unit/resource/file_spec.rb +1 -1
- data/spec/unit/resource/group_spec.rb +1 -1
- data/spec/unit/resource/link_spec.rb +1 -1
- data/spec/unit/resource/mdadm_spec.rb +1 -1
- data/spec/unit/resource/mount_spec.rb +1 -1
- data/spec/unit/resource/ohai_spec.rb +1 -1
- data/spec/unit/resource/registry_key_spec.rb +1 -1
- data/spec/unit/resource/route_spec.rb +1 -1
- data/spec/unit/resource/ruby_block_spec.rb +3 -3
- data/spec/unit/resource/user_spec.rb +1 -1
- data/spec/unit/resource/windows_service_spec.rb +1 -1
- data/spec/unit/resource_resolver_spec.rb +8 -4
- data/spec/unit/resource_spec.rb +89 -3
- data/spec/unit/run_list/versioned_recipe_list_spec.rb +115 -48
- data/spec/unit/user_spec.rb +97 -405
- data/spec/unit/user_v1_spec.rb +584 -0
- metadata +11 -6
- data/lib/chef/osc_user.rb +0 -194
- data/spec/unit/osc_user_spec.rb +0 -276
data/spec/unit/recipe_spec.rb
CHANGED
@@ -409,8 +409,8 @@ describe Chef::Recipe do
|
|
409
409
|
end
|
410
410
|
|
411
411
|
it "does not copy the action from the first resource" do
|
412
|
-
expect(original_resource.action).to eq(:score)
|
413
|
-
expect(duplicated_resource.action).to eq(:nothing)
|
412
|
+
expect(original_resource.action).to eq([:score])
|
413
|
+
expect(duplicated_resource.action).to eq([:nothing])
|
414
414
|
end
|
415
415
|
|
416
416
|
it "does not copy the source location of the first resource" do
|
@@ -505,7 +505,7 @@ describe Chef::Recipe do
|
|
505
505
|
recipe.from_file(File.join(CHEF_SPEC_DATA, "recipes", "test.rb"))
|
506
506
|
res = recipe.resources(:file => "/etc/nsswitch.conf")
|
507
507
|
expect(res.name).to eql("/etc/nsswitch.conf")
|
508
|
-
expect(res.action).to eql(:create)
|
508
|
+
expect(res.action).to eql([:create])
|
509
509
|
expect(res.owner).to eql("root")
|
510
510
|
expect(res.group).to eql("root")
|
511
511
|
expect(res.mode).to eql(0644)
|
@@ -37,7 +37,7 @@ describe Chef::Resource::Breakpoint do
|
|
37
37
|
end
|
38
38
|
|
39
39
|
it "defaults to the break action" do
|
40
|
-
expect(@breakpoint.action).to eq(:break)
|
40
|
+
expect(@breakpoint.action).to eq([:break])
|
41
41
|
end
|
42
42
|
|
43
43
|
it "names itself after the line number of the file where it's created" do
|
@@ -35,7 +35,7 @@ describe Chef::Resource::DscResource do
|
|
35
35
|
}
|
36
36
|
|
37
37
|
it "has a default action of `:run`" do
|
38
|
-
expect(dsc_test_resource.action).to eq(:run)
|
38
|
+
expect(dsc_test_resource.action).to eq([:run])
|
39
39
|
end
|
40
40
|
|
41
41
|
it "has an allowed_actions attribute with only the `:run` and `:nothing` attributes" do
|
@@ -29,7 +29,7 @@ describe Chef::Resource::DscScript do
|
|
29
29
|
Chef::RunContext.new(node, {}, empty_events)
|
30
30
|
}
|
31
31
|
let(:dsc_test_resource) {
|
32
|
-
Chef::Resource::DscScript.new(dsc_test_resource_name, dsc_test_run_context)
|
32
|
+
Chef::Resource::DscScript.new(dsc_test_resource_name, dsc_test_run_context)
|
33
33
|
}
|
34
34
|
let(:configuration_code) {'echo "This is supposed to create a configuration document."'}
|
35
35
|
let(:configuration_path) {'c:/myconfigs/formatc.ps1'}
|
@@ -38,7 +38,7 @@ describe Chef::Resource::DscScript do
|
|
38
38
|
let(:configuration_data_script) { 'c:/myconfigs/data/safedata.psd1' }
|
39
39
|
|
40
40
|
it "has a default action of `:run`" do
|
41
|
-
expect(dsc_test_resource.action).to eq(:run)
|
41
|
+
expect(dsc_test_resource.action).to eq([:run])
|
42
42
|
end
|
43
43
|
|
44
44
|
it "has an allowed_actions attribute with only the `:run` and `:nothing` attributes" do
|
@@ -35,7 +35,7 @@ describe Chef::Resource::Env do
|
|
35
35
|
end
|
36
36
|
|
37
37
|
it "should have a default action of 'create'" do
|
38
|
-
expect(@resource.action).to eql(:create)
|
38
|
+
expect(@resource.action).to eql([:create])
|
39
39
|
end
|
40
40
|
|
41
41
|
{ :create => false, :delete => false, :modify => false, :flibber => true }.each do |action,bad_value|
|
@@ -36,7 +36,7 @@ describe Chef::Resource::Link do
|
|
36
36
|
end
|
37
37
|
|
38
38
|
it "should have a default action of 'create'" do
|
39
|
-
expect(@resource.action).to eql(:create)
|
39
|
+
expect(@resource.action).to eql([:create])
|
40
40
|
end
|
41
41
|
|
42
42
|
{ :create => false, :delete => false, :blues => true }.each do |action,bad_value|
|
@@ -45,7 +45,7 @@ describe Chef::Resource::RegistryKey, "initialize" do
|
|
45
45
|
end
|
46
46
|
|
47
47
|
it "should set action to :create" do
|
48
|
-
expect(@resource.action).to eql(:create)
|
48
|
+
expect(@resource.action).to eql([:create])
|
49
49
|
end
|
50
50
|
|
51
51
|
%w{create create_if_missing delete delete_key}.each do |action|
|
@@ -30,8 +30,8 @@ describe Chef::Resource::RubyBlock do
|
|
30
30
|
expect(@resource).to be_a_kind_of(Chef::Resource::RubyBlock)
|
31
31
|
end
|
32
32
|
|
33
|
-
it "should have a default action of '
|
34
|
-
expect(@resource.action).to eql(:run)
|
33
|
+
it "should have a default action of 'run'" do
|
34
|
+
expect(@resource.action).to eql([:run])
|
35
35
|
end
|
36
36
|
|
37
37
|
it "should have a resource name of :ruby_block" do
|
@@ -46,7 +46,7 @@ describe Chef::Resource::RubyBlock do
|
|
46
46
|
|
47
47
|
it "allows the action to be 'create'" do
|
48
48
|
@resource.action :create
|
49
|
-
expect(@resource.action).to eq(:create)
|
49
|
+
expect(@resource.action).to eq([:create])
|
50
50
|
end
|
51
51
|
|
52
52
|
describe "when it has been initialized with block code" do
|
@@ -44,6 +44,6 @@ describe Chef::Resource::WindowsService, "initialize" do
|
|
44
44
|
|
45
45
|
it "allows the action to be 'configure_startup'" do
|
46
46
|
resource.action :configure_startup
|
47
|
-
expect(resource.action).to eq(:configure_startup)
|
47
|
+
expect(resource.action).to eq([:configure_startup])
|
48
48
|
end
|
49
49
|
end
|
@@ -31,19 +31,23 @@ describe Chef::ResourceResolver do
|
|
31
31
|
|
32
32
|
context 'instance methods' do
|
33
33
|
let(:resolver) do
|
34
|
-
described_class.new(Chef::Node.new, 'execute
|
34
|
+
described_class.new(Chef::Node.new, 'execute')
|
35
35
|
end
|
36
36
|
|
37
37
|
it '#resolve' do
|
38
|
-
expect(resolver.resolve).to
|
38
|
+
expect(resolver.resolve).to eq Chef::Resource::Execute
|
39
39
|
end
|
40
40
|
|
41
41
|
it '#list' do
|
42
|
-
expect(resolver.list).to
|
42
|
+
expect(resolver.list).to eq [ Chef::Resource::Execute ]
|
43
43
|
end
|
44
44
|
|
45
|
-
it '#provided_by?' do
|
45
|
+
it '#provided_by? returns true when resource class is in the list' do
|
46
46
|
expect(resolver.provided_by?(Chef::Resource::Execute)).to be_truthy
|
47
47
|
end
|
48
|
+
|
49
|
+
it '#provided_by? returns false when resource class is not in the list' do
|
50
|
+
expect(resolver.provided_by?(Chef::Resource::File)).to be_falsey
|
51
|
+
end
|
48
52
|
end
|
49
53
|
end
|
data/spec/unit/resource_spec.rb
CHANGED
@@ -810,21 +810,21 @@ describe Chef::Resource do
|
|
810
810
|
end
|
811
811
|
|
812
812
|
it 'adds mappings for a single platform' do
|
813
|
-
expect(Chef.
|
813
|
+
expect(Chef.resource_handler_map).to receive(:set).with(
|
814
814
|
:dinobot, Chef::Resource::Klz, { platform: ['autobots'] }
|
815
815
|
)
|
816
816
|
klz.provides :dinobot, platform: ['autobots']
|
817
817
|
end
|
818
818
|
|
819
819
|
it 'adds mappings for multiple platforms' do
|
820
|
-
expect(Chef.
|
820
|
+
expect(Chef.resource_handler_map).to receive(:set).with(
|
821
821
|
:energy, Chef::Resource::Klz, { platform: ['autobots', 'decepticons']}
|
822
822
|
)
|
823
823
|
klz.provides :energy, platform: ['autobots', 'decepticons']
|
824
824
|
end
|
825
825
|
|
826
826
|
it 'adds mappings for all platforms' do
|
827
|
-
expect(Chef.
|
827
|
+
expect(Chef.resource_handler_map).to receive(:set).with(
|
828
828
|
:tape_deck, Chef::Resource::Klz, {}
|
829
829
|
)
|
830
830
|
klz.provides :tape_deck
|
@@ -977,4 +977,90 @@ describe Chef::Resource do
|
|
977
977
|
end
|
978
978
|
|
979
979
|
end
|
980
|
+
|
981
|
+
describe "#action" do
|
982
|
+
let(:resource_class) do
|
983
|
+
Class.new(described_class) do
|
984
|
+
allowed_actions(%i{one two})
|
985
|
+
end
|
986
|
+
end
|
987
|
+
let(:resource) { resource_class.new('test', nil) }
|
988
|
+
subject { resource.action }
|
989
|
+
|
990
|
+
context "with a no action" do
|
991
|
+
it { is_expected.to eq [:nothing] }
|
992
|
+
end
|
993
|
+
|
994
|
+
context "with a default action" do
|
995
|
+
let(:resource_class) do
|
996
|
+
Class.new(described_class) do
|
997
|
+
default_action(:one)
|
998
|
+
end
|
999
|
+
end
|
1000
|
+
it { is_expected.to eq [:one] }
|
1001
|
+
end
|
1002
|
+
|
1003
|
+
context "with a symbol action" do
|
1004
|
+
before { resource.action(:one) }
|
1005
|
+
it { is_expected.to eq [:one] }
|
1006
|
+
end
|
1007
|
+
|
1008
|
+
context "with a string action" do
|
1009
|
+
before { resource.action('two') }
|
1010
|
+
it { is_expected.to eq [:two] }
|
1011
|
+
end
|
1012
|
+
|
1013
|
+
context "with an array action" do
|
1014
|
+
before { resource.action([:two, :one]) }
|
1015
|
+
it { is_expected.to eq [:two, :one] }
|
1016
|
+
end
|
1017
|
+
|
1018
|
+
context "with an assignment" do
|
1019
|
+
before { resource.action = :one }
|
1020
|
+
it { is_expected.to eq [:one] }
|
1021
|
+
end
|
1022
|
+
|
1023
|
+
context "with an array assignment" do
|
1024
|
+
before { resource.action = [:two, :one] }
|
1025
|
+
it { is_expected.to eq [:two, :one] }
|
1026
|
+
end
|
1027
|
+
|
1028
|
+
context "with an invalid action" do
|
1029
|
+
it { expect { resource.action(:three) }.to raise_error Chef::Exceptions::ValidationFailed }
|
1030
|
+
end
|
1031
|
+
|
1032
|
+
context "with an invalid assignment action" do
|
1033
|
+
it { expect { resource.action = :three }.to raise_error Chef::Exceptions::ValidationFailed }
|
1034
|
+
end
|
1035
|
+
end
|
1036
|
+
|
1037
|
+
describe ".default_action" do
|
1038
|
+
let(:default_action) { }
|
1039
|
+
let(:resource_class) do
|
1040
|
+
actions = default_action
|
1041
|
+
Class.new(described_class) do
|
1042
|
+
default_action(actions) if actions
|
1043
|
+
end
|
1044
|
+
end
|
1045
|
+
subject { resource_class.default_action }
|
1046
|
+
|
1047
|
+
context "with no default actions" do
|
1048
|
+
it { is_expected.to eq [:nothing] }
|
1049
|
+
end
|
1050
|
+
|
1051
|
+
context "with a symbol default action" do
|
1052
|
+
let(:default_action) { :one }
|
1053
|
+
it { is_expected.to eq [:one] }
|
1054
|
+
end
|
1055
|
+
|
1056
|
+
context "with a string default action" do
|
1057
|
+
let(:default_action) { 'one' }
|
1058
|
+
it { is_expected.to eq [:one] }
|
1059
|
+
end
|
1060
|
+
|
1061
|
+
context "with an array default action" do
|
1062
|
+
let(:default_action) { [:two, :one] }
|
1063
|
+
it { is_expected.to eq [:two, :one] }
|
1064
|
+
end
|
1065
|
+
end
|
980
1066
|
end
|
@@ -26,98 +26,165 @@ describe Chef::RunList::VersionedRecipeList do
|
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
29
|
+
let(:list) { described_class.new }
|
30
|
+
|
31
|
+
let(:versioned_recipes) { [] }
|
32
|
+
|
33
|
+
let(:recipes) { [] }
|
34
|
+
|
35
|
+
before do
|
36
|
+
recipes.each { |r| list << r }
|
37
|
+
versioned_recipes.each {|r| list.add_recipe r[:name], r[:version]}
|
38
|
+
end
|
39
|
+
|
29
40
|
describe "add_recipe" do
|
30
|
-
|
31
|
-
|
32
|
-
@list << "apt"
|
33
|
-
@list << "god"
|
34
|
-
@list << "apache2"
|
35
|
-
end
|
41
|
+
|
42
|
+
let(:recipes) { %w[ apt god apache2 ] }
|
36
43
|
|
37
44
|
it "should append the recipe to the end of the list" do
|
38
|
-
|
39
|
-
expect(
|
45
|
+
list.add_recipe "rails"
|
46
|
+
expect(list).to eq(["apt", "god", "apache2", "rails"])
|
40
47
|
end
|
41
48
|
|
42
49
|
it "should not duplicate entries" do
|
43
|
-
|
44
|
-
expect(
|
50
|
+
list.add_recipe "apt"
|
51
|
+
expect(list).to eq(["apt", "god", "apache2"])
|
45
52
|
end
|
46
53
|
|
47
54
|
it "should allow you to specify a version" do
|
48
|
-
|
49
|
-
expect(
|
50
|
-
expect(
|
55
|
+
list.add_recipe "rails", "1.0.0"
|
56
|
+
expect(list).to eq(["apt", "god", "apache2", "rails"])
|
57
|
+
expect(list.with_versions).to include({:name => "rails", :version => "1.0.0"})
|
51
58
|
end
|
52
59
|
|
53
60
|
it "should allow you to specify a version for a recipe that already exists" do
|
54
|
-
|
55
|
-
expect(
|
56
|
-
expect(
|
61
|
+
list.add_recipe "apt", "1.2.3"
|
62
|
+
expect(list).to eq(["apt", "god", "apache2"])
|
63
|
+
expect(list.with_versions).to include({:name => "apt", :version => "1.2.3"})
|
57
64
|
end
|
58
65
|
|
59
66
|
it "should allow you to specify the same version of a recipe twice" do
|
60
|
-
|
61
|
-
|
62
|
-
expect(
|
67
|
+
list.add_recipe "rails", "1.0.0"
|
68
|
+
list.add_recipe "rails", "1.0.0"
|
69
|
+
expect(list.with_versions).to include({:name => "rails", :version => "1.0.0"})
|
63
70
|
end
|
64
71
|
|
65
72
|
it "should allow you to spcify no version, even when a version already exists" do
|
66
|
-
|
67
|
-
|
68
|
-
expect(
|
73
|
+
list.add_recipe "rails", "1.0.0"
|
74
|
+
list.add_recipe "rails"
|
75
|
+
expect(list.with_versions).to include({:name => "rails", :version => "1.0.0"})
|
69
76
|
end
|
70
77
|
|
71
78
|
it "should not allow multiple versions of the same recipe" do
|
72
|
-
|
73
|
-
expect {
|
79
|
+
list.add_recipe "rails", "1.0.0"
|
80
|
+
expect {list.add_recipe "rails", "0.1.0"}.to raise_error Chef::Exceptions::CookbookVersionConflict
|
74
81
|
end
|
75
82
|
end
|
76
83
|
|
77
84
|
describe "with_versions" do
|
78
|
-
|
79
|
-
|
85
|
+
|
86
|
+
let(:versioned_recipes) do
|
87
|
+
[
|
80
88
|
{:name => "apt", :version => "1.0.0"},
|
81
89
|
{:name => "god", :version => nil},
|
82
90
|
{:name => "apache2", :version => "0.0.1"}
|
83
91
|
]
|
84
|
-
@list = Chef::RunList::VersionedRecipeList.new
|
85
|
-
@recipes.each {|i| @list.add_recipe i[:name], i[:version]}
|
86
92
|
end
|
87
|
-
|
88
93
|
it "should return an array of hashes with :name and :version" do
|
89
|
-
expect(
|
94
|
+
expect(list.with_versions).to eq(versioned_recipes)
|
90
95
|
end
|
91
96
|
|
92
97
|
it "should retain the same order as the version-less list" do
|
93
|
-
with_versions =
|
94
|
-
|
98
|
+
with_versions = list.with_versions
|
99
|
+
list.each_with_index do |item, index|
|
95
100
|
expect(with_versions[index][:name]).to eq(item)
|
96
101
|
end
|
97
102
|
end
|
98
103
|
end
|
99
104
|
|
100
105
|
describe "with_version_constraints" do
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
@recipes.each {|i| @list.add_recipe i[:name], i[:version]}
|
109
|
-
@constraints = @recipes.map do |x|
|
110
|
-
{ :name => x[:name],
|
111
|
-
:version_constraint => Chef::VersionConstraint.new(x[:version])
|
112
|
-
}
|
113
|
-
end
|
106
|
+
|
107
|
+
let(:versioned_recipes) do
|
108
|
+
[
|
109
|
+
{:name => "apt", :version => "~> 1.2.0"},
|
110
|
+
{:name => "god", :version => nil},
|
111
|
+
{:name => "apache2", :version => "0.0.1"}
|
112
|
+
]
|
114
113
|
end
|
115
114
|
|
115
|
+
|
116
116
|
it "should return an array of hashes with :name and :version_constraint" do
|
117
|
-
|
118
|
-
|
119
|
-
|
117
|
+
list.with_version_constraints.each_with_index do |recipe_spec, i|
|
118
|
+
|
119
|
+
expected_recipe = versioned_recipes[i]
|
120
|
+
|
121
|
+
expect(recipe_spec[:name]).to eq(expected_recipe[:name])
|
122
|
+
expect(recipe_spec[:version_constraint]).to eq(Chef::VersionConstraint.new(expected_recipe[:version]))
|
120
123
|
end
|
121
124
|
end
|
122
125
|
end
|
126
|
+
|
127
|
+
describe "with_fully_qualified_names_and_version_constraints" do
|
128
|
+
|
129
|
+
let(:fq_names) { list.with_fully_qualified_names_and_version_constraints }
|
130
|
+
|
131
|
+
context "with bare cookbook names" do
|
132
|
+
|
133
|
+
let(:recipes) { %w[ apache2 ] }
|
134
|
+
|
135
|
+
it "gives $cookbook_name::default" do
|
136
|
+
expect(fq_names).to eq( %w[ apache2::default ] )
|
137
|
+
end
|
138
|
+
|
139
|
+
end
|
140
|
+
|
141
|
+
context "with qualified recipe names but no versions" do
|
142
|
+
|
143
|
+
let(:recipes) { %w[ mysql::server ] }
|
144
|
+
|
145
|
+
it "returns the qualified recipe names" do
|
146
|
+
expect(fq_names).to eq( %w[ mysql::server ] )
|
147
|
+
end
|
148
|
+
|
149
|
+
end
|
150
|
+
|
151
|
+
context "with unqualified names that have version constraints" do
|
152
|
+
|
153
|
+
let(:versioned_recipes) do
|
154
|
+
[
|
155
|
+
{:name => "apt", :version => "~> 1.2.0"},
|
156
|
+
]
|
157
|
+
end
|
158
|
+
|
159
|
+
it "gives qualified names with their versions" do
|
160
|
+
expect(fq_names).to eq([ "apt::default@~> 1.2.0" ])
|
161
|
+
end
|
162
|
+
|
163
|
+
it "does not mutate the recipe name" do
|
164
|
+
expect(fq_names).to eq([ "apt::default@~> 1.2.0" ])
|
165
|
+
expect(list).to eq( [ "apt" ] )
|
166
|
+
end
|
167
|
+
|
168
|
+
end
|
169
|
+
|
170
|
+
context "with fully qualified names that have version constraints" do
|
171
|
+
|
172
|
+
let(:versioned_recipes) do
|
173
|
+
[
|
174
|
+
{:name => "apt::cacher", :version => "~> 1.2.0"},
|
175
|
+
]
|
176
|
+
end
|
177
|
+
|
178
|
+
it "gives qualified names with their versions" do
|
179
|
+
expect(fq_names).to eq([ "apt::cacher@~> 1.2.0" ])
|
180
|
+
end
|
181
|
+
|
182
|
+
it "does not mutate the recipe name" do
|
183
|
+
expect(fq_names).to eq([ "apt::cacher@~> 1.2.0" ])
|
184
|
+
expect(list).to eq( [ "apt::cacher" ] )
|
185
|
+
end
|
186
|
+
|
187
|
+
end
|
188
|
+
end
|
189
|
+
|
123
190
|
end
|