chef 12.17.44-universal-mingw32 → 12.18.31-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/Gemfile +0 -1
- data/README.md +3 -2
- data/Rakefile +9 -0
- data/VERSION +1 -1
- data/acceptance/Gemfile.lock +17 -17
- data/distro/common/html/knife_environment.html +4 -8
- data/distro/common/man/man1/knife-environment.1 +4 -16
- data/distro/powershell/chef/chef.psm1 +139 -24
- data/lib/chef/application.rb +5 -4
- data/lib/chef/application/windows_service_manager.rb +6 -4
- data/lib/chef/chef_fs/chef_fs_data_store.rb +1 -1
- data/lib/chef/chef_fs/command_line.rb +1 -1
- data/lib/chef/chef_fs/file_system/chef_server/rest_list_entry.rb +8 -1
- data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_root_dir.rb +1 -1
- data/lib/chef/chef_fs/file_system/repository/nodes_dir.rb +1 -1
- data/lib/chef/cookbook/chefignore.rb +1 -1
- data/lib/chef/cookbook/cookbook_version_loader.rb +4 -4
- data/lib/chef/cookbook/metadata.rb +2 -2
- data/lib/chef/cookbook_loader.rb +1 -1
- data/lib/chef/data_collector.rb +24 -13
- data/lib/chef/data_collector/messages.rb +8 -6
- data/lib/chef/data_collector/messages/helpers.rb +1 -1
- data/lib/chef/deprecated.rb +30 -0
- data/lib/chef/dsl/platform_introspection.rb +2 -2
- data/lib/chef/encrypted_data_bag_item.rb +1 -1
- data/lib/chef/encrypted_data_bag_item/decryptor.rb +2 -2
- data/lib/chef/environment.rb +1 -1
- data/lib/chef/exceptions.rb +5 -5
- data/lib/chef/file_access_control/unix.rb +5 -5
- data/lib/chef/formatters/error_description.rb +1 -1
- data/lib/chef/http/basic_client.rb +1 -1
- data/lib/chef/http/json_input.rb +2 -2
- data/lib/chef/knife.rb +1 -1
- data/lib/chef/knife/cookbook_site_install.rb +1 -1
- data/lib/chef/knife/core/cookbook_scm_repo.rb +1 -1
- data/lib/chef/knife/core/ui.rb +1 -1
- data/lib/chef/mixin/command.rb +1 -0
- data/lib/chef/mixin/deep_merge.rb +1 -1
- data/lib/chef/mixin/shell_out.rb +58 -3
- data/lib/chef/mixin/which.rb +5 -9
- data/lib/chef/mixin/wide_string.rb +1 -1
- data/lib/chef/node.rb +1 -1
- data/lib/chef/node/attribute.rb +4 -5
- data/lib/chef/node_map.rb +18 -2
- data/lib/chef/platform/provider_handler_map.rb +2 -2
- data/lib/chef/platform/provider_mapping.rb +5 -0
- data/lib/chef/platform/resource_handler_map.rb +2 -2
- data/lib/chef/provider/env/windows.rb +1 -1
- data/lib/chef/provider/git.rb +1 -1
- data/lib/chef/provider/group.rb +41 -46
- data/lib/chef/provider/group/aix.rb +12 -19
- data/lib/chef/provider/group/dscl.rb +46 -43
- data/lib/chef/provider/group/gpasswd.rb +7 -7
- data/lib/chef/provider/group/groupadd.rb +29 -34
- data/lib/chef/provider/group/groupmod.rb +26 -31
- data/lib/chef/provider/group/pw.rb +28 -31
- data/lib/chef/provider/group/suse.rb +9 -9
- data/lib/chef/provider/group/usermod.rb +10 -11
- data/lib/chef/provider/group/windows.rb +18 -20
- data/lib/chef/provider/ifconfig.rb +52 -63
- data/lib/chef/provider/ifconfig/aix.rb +23 -28
- data/lib/chef/provider/ifconfig/debian.rb +23 -22
- data/lib/chef/provider/ifconfig/redhat.rb +12 -12
- data/lib/chef/provider/mount/mount.rb +1 -1
- data/lib/chef/provider/osx_profile.rb +4 -2
- data/lib/chef/provider/package.rb +16 -7
- data/lib/chef/provider/package/chocolatey.rb +3 -1
- data/lib/chef/provider/package/dnf.rb +183 -0
- data/lib/chef/provider/package/dnf/dnf_helper.py +91 -0
- data/lib/chef/provider/package/dnf/python_helper.rb +120 -0
- data/lib/chef/provider/package/dnf/version.rb +56 -0
- data/lib/chef/provider/package/easy_install.rb +1 -1
- data/lib/chef/provider/package/freebsd/base.rb +1 -1
- data/lib/chef/provider/package/freebsd/pkgng.rb +1 -1
- data/lib/chef/provider/package/powershell.rb +3 -3
- data/lib/chef/provider/package/windows.rb +1 -1
- data/lib/chef/provider/package/zypper.rb +1 -1
- data/lib/chef/provider/route.rb +186 -184
- data/lib/chef/provider/service/arch.rb +2 -2
- data/lib/chef/provider/service/freebsd.rb +1 -1
- data/lib/chef/provider/service/gentoo.rb +2 -2
- data/lib/chef/provider/service/insserv.rb +2 -2
- data/lib/chef/provider/service/macosx.rb +2 -2
- data/lib/chef/provider/service/openbsd.rb +1 -1
- data/lib/chef/provider/service/redhat.rb +2 -2
- data/lib/chef/provider/support/yum_repo.erb +10 -3
- data/lib/chef/provider/user.rb +17 -20
- data/lib/chef/provider/user/aix.rb +23 -24
- data/lib/chef/provider/user/dscl.rb +56 -53
- data/lib/chef/provider/user/linux.rb +13 -16
- data/lib/chef/provider/user/pw.rb +26 -30
- data/lib/chef/provider/user/solaris.rb +11 -12
- data/lib/chef/provider/user/useradd.rb +20 -22
- data/lib/chef/provider/user/windows.rb +19 -22
- data/lib/chef/provider_resolver.rb +4 -2
- data/lib/chef/providers.rb +1 -0
- data/lib/chef/resource.rb +7 -0
- data/lib/chef/resource/chocolatey_package.rb +1 -0
- data/lib/chef/resource/dnf_package.rb +64 -0
- data/lib/chef/resource/file/verification.rb +6 -4
- data/lib/chef/resource/yum_package.rb +18 -14
- data/lib/chef/resource/yum_repository.rb +1 -1
- data/lib/chef/resource_reporter.rb +11 -0
- data/lib/chef/resources.rb +1 -0
- data/lib/chef/scan_access_control.rb +4 -4
- data/lib/chef/util/dsc/resource_store.rb +1 -1
- data/lib/chef/version.rb +1 -1
- data/lib/chef/win32/memory.rb +1 -1
- data/lib/chef/win32/security.rb +2 -2
- data/lib/chef/win32/security/sid.rb +2 -2
- data/spec/functional/assets/yumrepo/chef_rpm-1.10-1.fc24.i686.rpm +0 -0
- data/spec/functional/assets/yumrepo/chef_rpm-1.10-1.fc24.src.rpm +0 -0
- data/spec/functional/assets/yumrepo/chef_rpm-1.10-1.fc24.x86_64.rpm +0 -0
- data/spec/functional/assets/yumrepo/chef_rpm-1.2-1.fc24.i686.rpm +0 -0
- data/spec/functional/assets/yumrepo/chef_rpm-1.2-1.fc24.src.rpm +0 -0
- data/spec/functional/assets/yumrepo/chef_rpm-1.2-1.fc24.x86_64.rpm +0 -0
- data/spec/functional/assets/yumrepo/repodata/313329137b55fd333b2dc66394a6661a2befa6cc535d8460d92a4a78a9c581f0-primary.sqlite.bz2 +0 -0
- data/spec/functional/assets/yumrepo/repodata/31ac4db5d5ac593728fcc26aef82b7b93c4cc4dbec843786b1845b939b658553-other.xml.gz +0 -0
- data/spec/functional/assets/yumrepo/repodata/4ac40fa3c6728c1401318e2e20a997436624e83dcf7a5f952b851ef422637773-filelists.sqlite.bz2 +0 -0
- data/spec/functional/assets/yumrepo/repodata/66391e53f0510b98b3f0b79f40ba1048026d9a1ef20905d9c40ba6f5411f3243-primary.xml.gz +0 -0
- data/spec/functional/assets/yumrepo/repodata/8b34697595fcc87928e12d24644dda9462c3857bd932861e28bc77ae1f31be16-filelists.xml.gz +0 -0
- data/spec/functional/assets/yumrepo/repodata/b97cca3fe14bcf06c52be4449b6108f7731239ff221111dcce8aada5467f60dc-other.sqlite.bz2 +0 -0
- data/spec/functional/assets/yumrepo/repodata/repomd.xml +55 -0
- data/spec/functional/resource/dnf_package_spec.rb +686 -0
- data/spec/functional/resource/dsc_script_spec.rb +1 -0
- data/spec/functional/resource/user/useradd_spec.rb +10 -1
- data/spec/integration/knife/chef_repo_path_spec.rb +2 -2
- data/spec/integration/recipes/recipe_dsl_spec.rb +3 -0
- data/spec/integration/recipes/resource_load_spec.rb +3 -3
- data/spec/spec_helper.rb +5 -3
- data/spec/support/lib/chef/provider/snakeoil.rb +1 -0
- data/spec/support/lib/chef/resource/cat.rb +1 -0
- data/spec/support/lib/chef/resource/one_two_three_four.rb +1 -0
- data/spec/support/lib/chef/resource/openldap_includer.rb +2 -0
- data/spec/support/lib/chef/resource/with_state.rb +2 -0
- data/spec/support/lib/chef/resource/zen_master.rb +1 -0
- data/spec/unit/cookbook/metadata_spec.rb +3 -3
- data/spec/unit/data_collector/messages/helpers_spec.rb +7 -0
- data/spec/unit/data_collector_spec.rb +56 -0
- data/spec/unit/decorator/lazy_spec.rb +1 -1
- data/spec/unit/environment_spec.rb +1 -1
- data/spec/unit/lwrp_spec.rb +3 -4
- data/spec/unit/node_spec.rb +23 -2
- data/spec/unit/platform_spec.rb +1 -0
- data/spec/unit/provider/group/dscl_spec.rb +29 -29
- data/spec/unit/provider/group/gpasswd_spec.rb +10 -10
- data/spec/unit/provider/group/groupadd_spec.rb +31 -30
- data/spec/unit/provider/group/groupmod_spec.rb +16 -16
- data/spec/unit/provider/group/pw_spec.rb +11 -11
- data/spec/unit/provider/group/suse_spec.rb +5 -5
- data/spec/unit/provider/group/usermod_spec.rb +15 -15
- data/spec/unit/provider/ifconfig/aix_spec.rb +14 -14
- data/spec/unit/provider/ifconfig/debian_spec.rb +10 -22
- data/spec/unit/provider/ifconfig/redhat_spec.rb +4 -4
- data/spec/unit/provider/ifconfig_spec.rb +18 -19
- data/spec/unit/provider/package/chocolatey_spec.rb +21 -21
- data/spec/unit/provider/package/msu_spec.rb +1 -1
- data/spec/unit/provider/route_spec.rb +21 -21
- data/spec/unit/provider/user/dscl_spec.rb +54 -57
- data/spec/unit/provider/user/linux_spec.rb +5 -5
- data/spec/unit/provider/user/pw_spec.rb +26 -22
- data/spec/unit/provider/user/windows_spec.rb +4 -4
- data/spec/unit/provider/user_spec.rb +19 -21
- data/spec/unit/provider_resolver_spec.rb +1 -0
- data/spec/unit/resource/chocolatey_package_spec.rb +12 -0
- data/spec/unit/resource/dnf_package_spec.rb +99 -0
- data/spec/unit/resource/remote_file_spec.rb +2 -2
- data/spec/unit/resource/yum_package_spec.rb +20 -0
- data/spec/unit/resource_reporter_spec.rb +24 -0
- data/spec/unit/resource_spec.rb +2 -0
- data/spec/unit/runner_spec.rb +1 -0
- data/tasks/bin/bundle-platform +1 -1
- data/tasks/gemfile_util.rb +2 -2
- data/tasks/templates/prerelease.md.erb +1 -10
- data/tasks/templates/release.md.erb +1 -9
- metadata +24 -5
- data/lib/chef/platform/handler_map.rb +0 -40
@@ -76,6 +76,7 @@ describe Chef::Resource::DscScript, :windows_powershell_dsc_only do
|
|
76
76
|
let(:env_value2) { "value2" }
|
77
77
|
let(:dsc_test_run_context) do
|
78
78
|
node = Chef::Node.new
|
79
|
+
node.automatic["os"] = "windows"
|
79
80
|
node.automatic["platform"] = "windows"
|
80
81
|
node.automatic["platform_version"] = "6.1"
|
81
82
|
node.automatic["kernel"][:machine] = :x86_64 # Only 64-bit architecture is supported
|
@@ -119,7 +119,7 @@ describe Chef::Provider::User::Useradd, metadata do
|
|
119
119
|
break if status.exitstatus != 8
|
120
120
|
|
121
121
|
sleep 1
|
122
|
-
max_retries
|
122
|
+
max_retries -= 1
|
123
123
|
rescue UserNotFound
|
124
124
|
break
|
125
125
|
end
|
@@ -645,6 +645,15 @@ describe Chef::Provider::User::Useradd, metadata do
|
|
645
645
|
expect(@error).to be_a(Mixlib::ShellOut::ShellCommandFailed)
|
646
646
|
expect(@error.message).to include("Cannot unlock the password")
|
647
647
|
end
|
648
|
+
elsif %w{rhel}.include?(OHAI_SYSTEM["platform_family"]) &&
|
649
|
+
OHAI_SYSTEM["platform_version"].to_f == 6.8
|
650
|
+
# usermod -U returns following message for rhel68 on s390x platforms
|
651
|
+
# usermod: unlocking the user's password would result in a passwordless account.
|
652
|
+
#You should set a password with usermod -p to unlock this user's password.
|
653
|
+
it "errors out trying to unlock the user" do
|
654
|
+
expect(@error).to be_a(Mixlib::ShellOut::ShellCommandFailed)
|
655
|
+
expect(@error.message).to include("You should set a password")
|
656
|
+
end
|
648
657
|
else
|
649
658
|
|
650
659
|
# borked on all other platforms:
|
@@ -843,7 +843,7 @@ EOM
|
|
843
843
|
|
844
844
|
context "when data_bag_path and chef_repo_path are set, and nothing else" do
|
845
845
|
before :each do
|
846
|
-
%w{client cookbook
|
846
|
+
%w{client cookbook environment node role user}.each do |object_name|
|
847
847
|
Chef::Config.delete("#{object_name}_path".to_sym)
|
848
848
|
end
|
849
849
|
Chef::Config.data_bag_path = File.join(Chef::Config.chef_repo_path, "data_bags")
|
@@ -903,7 +903,7 @@ EOM
|
|
903
903
|
include_context "default config options"
|
904
904
|
|
905
905
|
before :each do
|
906
|
-
%w{client cookbook
|
906
|
+
%w{client cookbook environment node role user}.each do |object_name|
|
907
907
|
Chef::Config.delete("#{object_name}_path".to_sym)
|
908
908
|
end
|
909
909
|
Chef::Config.delete(:chef_repo_path)
|
@@ -1425,6 +1425,7 @@ describe "Recipe DSL methods" do
|
|
1425
1425
|
end
|
1426
1426
|
|
1427
1427
|
it "my_resource fails to find a provider (and calls provides)" do
|
1428
|
+
Chef::Config[:treat_deprecation_warnings_as_errors] = false
|
1428
1429
|
my_resource = self.my_resource
|
1429
1430
|
expect_converge do
|
1430
1431
|
instance_eval("#{my_resource} 'foo'")
|
@@ -1435,6 +1436,7 @@ describe "Recipe DSL methods" do
|
|
1435
1436
|
|
1436
1437
|
context "that does not provide :my_resource" do
|
1437
1438
|
it "my_resource fails to find a provider (and calls provides)" do
|
1439
|
+
Chef::Config[:treat_deprecation_warnings_as_errors] = false
|
1438
1440
|
my_resource = self.my_resource
|
1439
1441
|
expect_converge do
|
1440
1442
|
instance_eval("#{my_resource} 'foo'")
|
@@ -1510,6 +1512,7 @@ describe "Recipe DSL methods" do
|
|
1510
1512
|
end
|
1511
1513
|
|
1512
1514
|
it "looks up the provider in Chef::Provider converting the resource name from snake case to camel case" do
|
1515
|
+
Chef::Config[:treat_deprecation_warnings_as_errors] = false
|
1513
1516
|
resource = nil
|
1514
1517
|
recipe = converge do
|
1515
1518
|
resource = lw_resource_with_hw_provider_test_case("blah") {}
|
@@ -48,7 +48,7 @@ describe "Resource.load_current_value" do
|
|
48
48
|
x "loaded #{Namer.incrementing_value} (#{self.class.properties.sort_by { |name, p| name }.
|
49
49
|
select { |name, p| p.is_set?(self) }.
|
50
50
|
map { |name, p| "#{name}=#{p.get(self)}" }.
|
51
|
-
join(", ")
|
51
|
+
join(", ")})"
|
52
52
|
end
|
53
53
|
end
|
54
54
|
|
@@ -175,7 +175,7 @@ describe "Resource.load_current_value" do
|
|
175
175
|
y "loaded_y #{Namer.incrementing_value} (#{self.class.properties.sort_by { |name, p| name }.
|
176
176
|
select { |name, p| p.is_set?(self) }.
|
177
177
|
map { |name, p| "#{name}=#{p.get(self)}" }.
|
178
|
-
join(", ")
|
178
|
+
join(", ")})"
|
179
179
|
end
|
180
180
|
end
|
181
181
|
|
@@ -193,7 +193,7 @@ describe "Resource.load_current_value" do
|
|
193
193
|
y "loaded_y #{Namer.incrementing_value} (#{self.class.properties.sort_by { |name, p| name }.
|
194
194
|
select { |name, p| p.is_set?(self) }.
|
195
195
|
map { |name, p| "#{name}=#{p.get(self)}" }.
|
196
|
-
join(", ")
|
196
|
+
join(", ")})"
|
197
197
|
end
|
198
198
|
end
|
199
199
|
|
data/spec/spec_helper.rb
CHANGED
@@ -218,9 +218,11 @@ RSpec.configure do |config|
|
|
218
218
|
end
|
219
219
|
|
220
220
|
# raise if anyone commits any test to CI with :focus set on it
|
221
|
-
|
222
|
-
|
223
|
-
|
221
|
+
if ENV["CI"]
|
222
|
+
config.before(:example, :focus) do
|
223
|
+
raise "This example was committed with `:focus` and should not have been"
|
224
|
+
end
|
225
|
+
end
|
224
226
|
|
225
227
|
config.before(:suite) do
|
226
228
|
ARGV.clear
|
@@ -206,7 +206,7 @@ describe Chef::Cookbook::Metadata do
|
|
206
206
|
:issues_url => "http://example.com/issues",
|
207
207
|
:privacy => true,
|
208
208
|
}
|
209
|
-
params.
|
209
|
+
params.sort_by(&:to_s).each do |field, field_value|
|
210
210
|
describe field do
|
211
211
|
it "should be set-able via #{field}" do
|
212
212
|
expect(metadata.send(field, field_value)).to eql(field_value)
|
@@ -240,7 +240,7 @@ describe Chef::Cookbook::Metadata do
|
|
240
240
|
:provides => [ :providing, "foo::bar", "<= 0.2" ],
|
241
241
|
:replaces => [ :replacing, "foo::bar", "= 0.2.1" ],
|
242
242
|
}
|
243
|
-
dep_types.
|
243
|
+
dep_types.sort_by(&:to_s).each do |dep, dep_args|
|
244
244
|
check_with = dep_args.shift
|
245
245
|
describe dep do
|
246
246
|
it "should be set-able via #{dep}" do
|
@@ -261,7 +261,7 @@ describe Chef::Cookbook::Metadata do
|
|
261
261
|
:provides => [ :providing, "foo::bar", "<=0.2", "<= 0.2" ],
|
262
262
|
:replaces => [ :replacing, "foo::bar", "=0.2.1", "= 0.2.1" ],
|
263
263
|
}
|
264
|
-
dep_types.
|
264
|
+
dep_types.sort_by(&:to_s).each do |dep, dep_args|
|
265
265
|
check_with = dep_args.shift
|
266
266
|
normalized_version = dep_args.pop
|
267
267
|
describe dep do
|
@@ -72,6 +72,13 @@ describe Chef::DataCollector::Messages::Helpers do
|
|
72
72
|
expect(TestMessage.chef_server_organization).to eq("unknown_organization")
|
73
73
|
end
|
74
74
|
end
|
75
|
+
|
76
|
+
context "when the organization in the URL contains hyphens" do
|
77
|
+
it "returns the full org name" do
|
78
|
+
Chef::Config[:chef_server_url] = "http://mycompany.com/organizations/myorg-test"
|
79
|
+
expect(TestMessage.chef_server_organization).to eq("myorg-test")
|
80
|
+
end
|
81
|
+
end
|
75
82
|
end
|
76
83
|
|
77
84
|
describe "#collector_source" do
|
@@ -682,4 +682,60 @@ describe Chef::DataCollector::Reporter do
|
|
682
682
|
end
|
683
683
|
end
|
684
684
|
end
|
685
|
+
|
686
|
+
describe "#detect_unprocessed_resources" do
|
687
|
+
context "when resources do not override core methods" do
|
688
|
+
it "adds resource reports for any resources that have not yet been processed" do
|
689
|
+
resource_a = Chef::Resource::Service.new("processed service")
|
690
|
+
resource_b = Chef::Resource::Service.new("unprocessed service")
|
691
|
+
|
692
|
+
resource_a.action = [ :enable, :start ]
|
693
|
+
resource_b.action = :start
|
694
|
+
|
695
|
+
run_context = Chef::RunContext.new(Chef::Node.new, Chef::CookbookCollection.new, nil)
|
696
|
+
run_context.resource_collection.insert(resource_a)
|
697
|
+
run_context.resource_collection.insert(resource_b)
|
698
|
+
|
699
|
+
allow(reporter).to receive(:run_context).and_return(run_context)
|
700
|
+
|
701
|
+
# process the actions for resource_a, but not resource_b
|
702
|
+
reporter.resource_up_to_date(resource_a, :enable)
|
703
|
+
reporter.resource_completed(resource_a)
|
704
|
+
reporter.resource_up_to_date(resource_a, :start)
|
705
|
+
reporter.resource_completed(resource_a)
|
706
|
+
expect(reporter.all_resource_reports.size).to eq(2)
|
707
|
+
|
708
|
+
# detect unprocessed resources, which should find that resource_b has not yet been processed
|
709
|
+
reporter.send(:detect_unprocessed_resources)
|
710
|
+
expect(reporter.all_resource_reports.size).to eq(3)
|
711
|
+
end
|
712
|
+
end
|
713
|
+
|
714
|
+
context "when a resource overrides a core method, such as #hash" do
|
715
|
+
it "does not raise an exception" do
|
716
|
+
resource_a = Chef::Resource::Service.new("processed service")
|
717
|
+
resource_b = Chef::Resource::Service.new("unprocessed service")
|
718
|
+
|
719
|
+
resource_a.action = :start
|
720
|
+
resource_b.action = :start
|
721
|
+
|
722
|
+
run_context = Chef::RunContext.new(Chef::Node.new, Chef::CookbookCollection.new, nil)
|
723
|
+
run_context.resource_collection.insert(resource_a)
|
724
|
+
run_context.resource_collection.insert(resource_b)
|
725
|
+
|
726
|
+
allow(reporter).to receive(:run_context).and_return(run_context)
|
727
|
+
|
728
|
+
# override the #hash method on resource_a to return a String instead of
|
729
|
+
# a Fixnum. Without the fix in chef/chef#5604, this would raise an
|
730
|
+
# exception when getting added to the Set/Hash.
|
731
|
+
resource_a.define_singleton_method(:hash) { "a string" }
|
732
|
+
|
733
|
+
# process the actions for resource_a, but not resource_b
|
734
|
+
reporter.resource_up_to_date(resource_a, :start)
|
735
|
+
reporter.resource_completed(resource_a)
|
736
|
+
|
737
|
+
expect { reporter.send(:detect_unprocessed_resources) }.not_to raise_error
|
738
|
+
end
|
739
|
+
end
|
740
|
+
end
|
685
741
|
end
|
@@ -295,7 +295,7 @@ describe Chef::Environment do
|
|
295
295
|
Chef::Config[:solo_legacy_mode] = false
|
296
296
|
end
|
297
297
|
|
298
|
-
it "should raise
|
298
|
+
it "should raise an exception" do
|
299
299
|
expect do
|
300
300
|
Chef::Environment.validate_cookbook_version("= 1.2.3.4")
|
301
301
|
end.to raise_error Chef::Exceptions::IllegalVersionConstraint,
|
data/spec/unit/lwrp_spec.rb
CHANGED
@@ -413,8 +413,7 @@ describe "LWRP" do
|
|
413
413
|
resource = get_lwrp(:lwrp_foo).new("morpheus", run_context)
|
414
414
|
resource.monkey("bob")
|
415
415
|
resource.provider(get_lwrp_provider(:lwrp_monkey_name_printer))
|
416
|
-
|
417
|
-
provider = Chef::Platform.provider_for_resource(resource, :twiddle_thumbs)
|
416
|
+
provider = resource.provider_for_action(:twiddle_thumbs)
|
418
417
|
provider.action_twiddle_thumbs
|
419
418
|
end
|
420
419
|
|
@@ -520,7 +519,7 @@ describe "LWRP" do
|
|
520
519
|
resource.monkey("bob")
|
521
520
|
resource.provider(get_lwrp_provider(:lwrp_monkey_name_printer))
|
522
521
|
|
523
|
-
provider =
|
522
|
+
provider = resource.provider_for_action(:twiddle_thumbs)
|
524
523
|
provider.action_twiddle_thumbs
|
525
524
|
|
526
525
|
expect(provider.monkey_name).to eq("my monkey's name is 'bob'")
|
@@ -531,7 +530,7 @@ describe "LWRP" do
|
|
531
530
|
resource.monkey("bob")
|
532
531
|
resource.provider(get_lwrp_provider(:lwrp_embedded_resource_accesses_providers_scope))
|
533
532
|
|
534
|
-
provider =
|
533
|
+
provider = resource.provider_for_action(:twiddle_thumbs)
|
535
534
|
#provider = @runner.build_provider(resource)
|
536
535
|
provider.action_twiddle_thumbs
|
537
536
|
|
data/spec/unit/node_spec.rb
CHANGED
@@ -337,14 +337,35 @@ describe Chef::Node do
|
|
337
337
|
Chef::Config[:treat_deprecation_warnings_as_errors] = false
|
338
338
|
expect(Chef).to receive(:deprecated).with(:attributes, /set is deprecated/)
|
339
339
|
node.set[:snoopy][:is_a_puppy] = true
|
340
|
-
expect(node[:snoopy][:is_a_puppy]).to eq(true)
|
340
|
+
expect(node.normal[:snoopy][:is_a_puppy]).to eq(true)
|
341
341
|
end
|
342
342
|
|
343
343
|
it "set_unless is a deprecated alias for normal_unless" do
|
344
344
|
Chef::Config[:treat_deprecation_warnings_as_errors] = false
|
345
345
|
expect(Chef).to receive(:deprecated).with(:attributes, /set_unless is deprecated/)
|
346
346
|
node.set_unless[:snoopy][:is_a_puppy] = false
|
347
|
-
expect(node[:snoopy][:is_a_puppy]).to eq(false)
|
347
|
+
expect(node.normal[:snoopy][:is_a_puppy]).to eq(false)
|
348
|
+
end
|
349
|
+
|
350
|
+
it "normal_unless sets a value even if default or override attrs are set" do
|
351
|
+
node.default[:decontamination] = true
|
352
|
+
node.override[:decontamination] = false
|
353
|
+
node.normal_unless[:decontamination] = "foo"
|
354
|
+
expect(node.normal[:decontamination]).to eql("foo")
|
355
|
+
end
|
356
|
+
|
357
|
+
it "default_unless sets a value even if normal or override attrs are set" do
|
358
|
+
node.normal[:decontamination] = true
|
359
|
+
node.override[:decontamination] = false
|
360
|
+
node.default_unless[:decontamination] = "foo"
|
361
|
+
expect(node.default[:decontamination]).to eql("foo")
|
362
|
+
end
|
363
|
+
|
364
|
+
it "override_unless sets a value even if default or normal attrs are set" do
|
365
|
+
node.default[:decontamination] = true
|
366
|
+
node.normal[:decontamination] = false
|
367
|
+
node.override_unless[:decontamination] = "foo"
|
368
|
+
expect(node.override[:decontamination]).to eql("foo")
|
348
369
|
end
|
349
370
|
end
|
350
371
|
|
data/spec/unit/platform_spec.rb
CHANGED
@@ -28,12 +28,12 @@ describe Chef::Provider::Group::Dscl do
|
|
28
28
|
@provider = Chef::Provider::Group::Dscl.new(@new_resource, @run_context)
|
29
29
|
@provider.current_resource = @current_resource
|
30
30
|
|
31
|
-
@status = double(:
|
31
|
+
@status = double(stdout: "\n", stderr: "", exitstatus: 0)
|
32
32
|
allow(@provider).to receive(:shell_out).and_return(@status)
|
33
33
|
end
|
34
34
|
|
35
35
|
it "should run shell_out with the supplied array of arguments appended to the dscl command" do
|
36
|
-
expect(@provider).to receive(:shell_out).with("dscl . -cmd /Path arg1 arg2")
|
36
|
+
expect(@provider).to receive(:shell_out).with("dscl", ".", "-cmd", "/Path", "arg1", "arg2")
|
37
37
|
@provider.dscl("cmd", "/Path", "arg1", "arg2")
|
38
38
|
end
|
39
39
|
|
@@ -51,24 +51,24 @@ describe Chef::Provider::Group::Dscl do
|
|
51
51
|
end
|
52
52
|
|
53
53
|
it "should run dscl with the supplied cmd /Path args" do
|
54
|
-
expect(@provider).to receive(:dscl).with("cmd /Path args")
|
55
|
-
@provider.safe_dscl("cmd /Path args")
|
54
|
+
expect(@provider).to receive(:dscl).with(*"cmd /Path args".split(" "))
|
55
|
+
@provider.safe_dscl(*"cmd /Path args".split(" "))
|
56
56
|
end
|
57
57
|
|
58
58
|
describe "with the dscl command returning a non zero exit status for a delete" do
|
59
59
|
before do
|
60
|
-
@status = double("Process::Status", :
|
60
|
+
@status = double("Process::Status", exitstatus: 1)
|
61
61
|
allow(@provider).to receive(:dscl).and_return(["cmd", @status, "stdout", "stderr"])
|
62
62
|
end
|
63
63
|
|
64
64
|
it "should return an empty string of standard output for a delete" do
|
65
|
-
safe_dscl_retval = @provider.safe_dscl("delete /Path args")
|
65
|
+
safe_dscl_retval = @provider.safe_dscl(*"delete /Path args".split(" "))
|
66
66
|
expect(safe_dscl_retval).to be_a_kind_of(String)
|
67
67
|
expect(safe_dscl_retval).to eq("")
|
68
68
|
end
|
69
69
|
|
70
70
|
it "should raise an exception for any other command" do
|
71
|
-
expect { @provider.safe_dscl("cmd /Path arguments") }.to raise_error(Chef::Exceptions::Group)
|
71
|
+
expect { @provider.safe_dscl(*"cmd /Path arguments".split(" ")) }.to raise_error(Chef::Exceptions::Group)
|
72
72
|
end
|
73
73
|
end
|
74
74
|
|
@@ -78,13 +78,13 @@ describe Chef::Provider::Group::Dscl do
|
|
78
78
|
end
|
79
79
|
|
80
80
|
it "should raise an exception" do
|
81
|
-
expect { @provider.safe_dscl("cmd /Path arguments") }.to raise_error(Chef::Exceptions::Group)
|
81
|
+
expect { @provider.safe_dscl(*"cmd /Path arguments".split(" ")) }.to raise_error(Chef::Exceptions::Group)
|
82
82
|
end
|
83
83
|
end
|
84
84
|
|
85
85
|
describe "with the dscl command returning a zero exit status" do
|
86
86
|
it "should return the third array element, the string of standard output" do
|
87
|
-
safe_dscl_retval = @provider.safe_dscl("cmd /Path args")
|
87
|
+
safe_dscl_retval = @provider.safe_dscl(*"cmd /Path args".split(" "))
|
88
88
|
expect(safe_dscl_retval).to be_a_kind_of(String)
|
89
89
|
expect(safe_dscl_retval).to eq("stdout")
|
90
90
|
end
|
@@ -99,7 +99,7 @@ describe Chef::Provider::Group::Dscl do
|
|
99
99
|
end
|
100
100
|
|
101
101
|
it "should run safe_dscl with list /Groups gid" do
|
102
|
-
expect(@provider).to receive(:safe_dscl).with("list /Groups gid")
|
102
|
+
expect(@provider).to receive(:safe_dscl).with(*"list /Groups gid".split(" "))
|
103
103
|
@provider.get_free_gid
|
104
104
|
end
|
105
105
|
|
@@ -121,7 +121,7 @@ describe Chef::Provider::Group::Dscl do
|
|
121
121
|
end
|
122
122
|
|
123
123
|
it "should run safe_dscl with list /Groups gid" do
|
124
|
-
expect(@provider).to receive(:safe_dscl).with("list /Groups gid")
|
124
|
+
expect(@provider).to receive(:safe_dscl).with(*"list /Groups gid".split(" "))
|
125
125
|
@provider.gid_used?(500)
|
126
126
|
end
|
127
127
|
|
@@ -171,8 +171,8 @@ describe Chef::Provider::Group::Dscl do
|
|
171
171
|
describe "with a valid gid number which is not already in use" do
|
172
172
|
it "should run safe_dscl with create /Groups/group PrimaryGroupID gid" do
|
173
173
|
allow(@provider).to receive(:get_free_gid).and_return(50)
|
174
|
-
expect(@provider).to receive(:safe_dscl).with("list /Groups gid")
|
175
|
-
expect(@provider).to receive(:safe_dscl).with("create /Groups/aj PrimaryGroupID 50
|
174
|
+
expect(@provider).to receive(:safe_dscl).with(*"list /Groups gid".split(" "))
|
175
|
+
expect(@provider).to receive(:safe_dscl).with("create", "/Groups/aj", "PrimaryGroupID", 50).and_return(true)
|
176
176
|
@provider.set_gid
|
177
177
|
end
|
178
178
|
end
|
@@ -193,8 +193,8 @@ describe Chef::Provider::Group::Dscl do
|
|
193
193
|
end
|
194
194
|
|
195
195
|
it "should run safe_dscl with create /Groups/group GroupMembership to clear the Group's UID list" do
|
196
|
-
expect(@provider).to receive(:safe_dscl).with("create /Groups/aj GroupMembers
|
197
|
-
expect(@provider).to receive(:safe_dscl).with("create /Groups/aj GroupMembership
|
196
|
+
expect(@provider).to receive(:safe_dscl).with("create", "/Groups/aj", "GroupMembers", "").and_return(true)
|
197
|
+
expect(@provider).to receive(:safe_dscl).with("create", "/Groups/aj", "GroupMembership", "").and_return(true)
|
198
198
|
@provider.set_members
|
199
199
|
end
|
200
200
|
end
|
@@ -211,9 +211,9 @@ describe Chef::Provider::Group::Dscl do
|
|
211
211
|
end
|
212
212
|
|
213
213
|
it "should run safe_dscl with append /Groups/group GroupMembership and group members all, your, base" do
|
214
|
-
expect(@provider).to receive(:safe_dscl).with("create /Groups/aj GroupMembers
|
215
|
-
expect(@provider).to receive(:safe_dscl).with("append /Groups/aj GroupMembership all your base").and_return(true)
|
216
|
-
expect(@provider).to receive(:safe_dscl).with("create /Groups/aj GroupMembership
|
214
|
+
expect(@provider).to receive(:safe_dscl).with("create", "/Groups/aj", "GroupMembers", "").and_return(true)
|
215
|
+
expect(@provider).to receive(:safe_dscl).with(*"append /Groups/aj GroupMembership all your base".split(" ")).and_return(true)
|
216
|
+
expect(@provider).to receive(:safe_dscl).with("create", "/Groups/aj", "GroupMembership", "").and_return(true)
|
217
217
|
@provider.set_members
|
218
218
|
end
|
219
219
|
end
|
@@ -232,20 +232,20 @@ describe Chef::Provider::Group::Dscl do
|
|
232
232
|
end
|
233
233
|
|
234
234
|
describe "when loading the current system state" do
|
235
|
-
before
|
235
|
+
before(:each) do
|
236
236
|
@provider.action = :create
|
237
237
|
@provider.load_current_resource
|
238
238
|
@provider.define_resource_requirements
|
239
239
|
end
|
240
240
|
|
241
241
|
it "raises an error if the required binary /usr/bin/dscl doesn't exist" do
|
242
|
-
expect(File).to receive(:
|
242
|
+
expect(File).to receive(:exist?).with("/usr/bin/dscl").and_return(false)
|
243
243
|
|
244
244
|
expect { @provider.process_resource_requirements }.to raise_error(Chef::Exceptions::Group)
|
245
245
|
end
|
246
246
|
|
247
247
|
it "doesn't raise an error if /usr/bin/dscl exists" do
|
248
|
-
allow(File).to receive(:
|
248
|
+
allow(File).to receive(:exist?).and_return(true)
|
249
249
|
expect { @provider.process_resource_requirements }.not_to raise_error
|
250
250
|
end
|
251
251
|
end
|
@@ -254,8 +254,8 @@ describe Chef::Provider::Group::Dscl do
|
|
254
254
|
it "creates the group, password field, gid, and sets group membership" do
|
255
255
|
expect(@provider).to receive(:set_gid).and_return(true)
|
256
256
|
expect(@provider).to receive(:set_members).and_return(true)
|
257
|
-
expect(@provider).to receive(:safe_dscl).with("create /Groups/aj Password
|
258
|
-
expect(@provider).to receive(:safe_dscl).with("create /Groups/aj")
|
257
|
+
expect(@provider).to receive(:safe_dscl).with(*"create /Groups/aj Password *".split(" "))
|
258
|
+
expect(@provider).to receive(:safe_dscl).with(*"create /Groups/aj".split(" "))
|
259
259
|
@provider.create_group
|
260
260
|
end
|
261
261
|
end
|
@@ -265,8 +265,8 @@ describe Chef::Provider::Group::Dscl do
|
|
265
265
|
@current_resource.group_name("oldval")
|
266
266
|
@new_resource.group_name("newname")
|
267
267
|
expect(@provider).to receive(:set_members).and_return(true)
|
268
|
-
expect(@provider).to receive(:safe_dscl).with("create /Groups/newname")
|
269
|
-
expect(@provider).to receive(:safe_dscl).with("create /Groups/newname Password
|
268
|
+
expect(@provider).to receive(:safe_dscl).with(*"create /Groups/newname".split(" "))
|
269
|
+
expect(@provider).to receive(:safe_dscl).with(*"create /Groups/newname Password *".split(" "))
|
270
270
|
@provider.manage_group
|
271
271
|
end
|
272
272
|
|
@@ -287,7 +287,7 @@ describe Chef::Provider::Group::Dscl do
|
|
287
287
|
|
288
288
|
describe "remove_group" do
|
289
289
|
it "should run safe_dscl with delete /Groups/group and with the new resources group name" do
|
290
|
-
expect(@provider).to receive(:safe_dscl).with("delete /Groups/aj").and_return(true)
|
290
|
+
expect(@provider).to receive(:safe_dscl).with(*"delete /Groups/aj".split(" ")).and_return(true)
|
291
291
|
@provider.remove_group
|
292
292
|
end
|
293
293
|
end
|
@@ -315,17 +315,17 @@ RecordName: com.apple.aj
|
|
315
315
|
RecordType: dsRecTypeStandard:Groups
|
316
316
|
GroupMembership: waka bar
|
317
317
|
EOF
|
318
|
-
allow(@provider).to receive(:safe_dscl).with("read /Groups/aj").and_return(@output)
|
318
|
+
allow(@provider).to receive(:safe_dscl).with(*"read /Groups/aj".split(" ")).and_return(@output)
|
319
319
|
@current_resource = @provider.load_current_resource
|
320
320
|
|
321
321
|
end
|
322
322
|
|
323
323
|
it "should parse gid properly" do
|
324
|
-
allow(File).to receive(:
|
324
|
+
allow(File).to receive(:exist?).and_return(true)
|
325
325
|
expect(@current_resource.gid).to eq("999")
|
326
326
|
end
|
327
327
|
it "should parse members properly" do
|
328
|
-
allow(File).to receive(:
|
328
|
+
allow(File).to receive(:exist?).and_return(true)
|
329
329
|
expect(@current_resource.members).to eq(%w{waka bar})
|
330
330
|
end
|
331
331
|
end
|