chef 16.4.41-universal-mingw32 → 16.5.64-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 +1 -1
- data/Rakefile +2 -2
- data/bin/knife +1 -1
- data/chef.gemspec +2 -1
- data/distro/templates/powershell/chef/chef.psm1.erb +18 -18
- data/ext/win32-eventlog/Rakefile +2 -2
- data/ext/win32-eventlog/chef-log.man.erb +4 -4
- data/lib/chef/application.rb +18 -16
- data/lib/chef/application/apply.rb +12 -7
- data/lib/chef/application/base.rb +26 -23
- data/lib/chef/application/client.rb +10 -4
- data/lib/chef/application/exit_code.rb +13 -4
- data/lib/chef/application/knife.rb +22 -11
- data/lib/chef/application/solo.rb +2 -1
- data/lib/chef/application/windows_service.rb +14 -14
- data/lib/chef/application/windows_service_manager.rb +6 -6
- data/lib/chef/chef_fs/knife.rb +2 -2
- data/lib/chef/chef_fs/parallelizer.rb +0 -1
- data/lib/chef/client.rb +10 -11
- data/lib/chef/cookbook/cookbook_version_loader.rb +1 -1
- data/lib/chef/cookbook/synchronizer.rb +2 -2
- data/lib/chef/cookbook_site_streaming_uploader.rb +13 -11
- data/lib/chef/cookbook_uploader.rb +1 -1
- data/lib/chef/data_collector.rb +6 -5
- data/lib/chef/data_collector/config_validation.rb +22 -13
- data/lib/chef/data_collector/run_end_message.rb +2 -2
- data/lib/chef/data_collector/run_start_message.rb +1 -1
- data/lib/chef/deprecated.rb +1 -1
- data/lib/chef/deprecation/warnings.rb +2 -2
- data/lib/chef/digester.rb +2 -2
- data/lib/chef/dsl/chef_vault.rb +1 -1
- data/lib/chef/dsl/data_query.rb +2 -2
- data/lib/chef/dsl/platform_introspection.rb +1 -1
- data/lib/chef/encrypted_data_bag_item.rb +3 -4
- data/lib/chef/encrypted_data_bag_item/decryptor.rb +3 -3
- data/lib/chef/encrypted_data_bag_item/encryptor.rb +3 -3
- data/lib/chef/environment.rb +2 -2
- data/lib/chef/event_loggers/windows_eventlog.rb +2 -2
- data/lib/chef/exceptions.rb +4 -4
- data/lib/chef/file_access_control/windows.rb +5 -1
- data/lib/chef/formatters/doc.rb +7 -6
- data/lib/chef/formatters/error_inspectors/api_error_formatting.rb +6 -5
- data/lib/chef/formatters/error_inspectors/node_load_error_inspector.rb +3 -3
- data/lib/chef/formatters/error_inspectors/registration_error_inspector.rb +9 -9
- data/lib/chef/formatters/error_inspectors/resource_failure_inspector.rb +2 -2
- data/lib/chef/formatters/error_inspectors/run_list_expansion_error_inspector.rb +3 -3
- data/lib/chef/formatters/minimal.rb +5 -4
- data/lib/chef/http.rb +6 -4
- data/lib/chef/http/auth_credentials.rb +5 -1
- data/lib/chef/http/authenticator.rb +1 -1
- data/lib/chef/http/basic_client.rb +4 -2
- data/lib/chef/http/decompressor.rb +1 -1
- data/lib/chef/http/http_request.rb +7 -5
- data/lib/chef/http/socketless_chef_zero_client.rb +5 -2
- data/lib/chef/http/ssl_policies.rb +1 -1
- data/lib/chef/json_compat.rb +1 -1
- data/lib/chef/knife.rb +4 -4
- data/lib/chef/knife/bootstrap.rb +16 -14
- data/lib/chef/knife/bootstrap/chef_vault_handler.rb +1 -1
- data/lib/chef/knife/bootstrap/templates/chef-full.erb +3 -3
- data/lib/chef/knife/bootstrap/templates/windows-chef-client-msi.erb +7 -7
- data/lib/chef/knife/client_create.rb +3 -3
- data/lib/chef/knife/config_get.rb +8 -97
- data/lib/chef/knife/config_get_profile.rb +9 -9
- data/lib/chef/knife/config_list.rb +139 -0
- data/lib/chef/knife/config_list_profiles.rb +8 -98
- data/lib/chef/knife/config_show.rb +127 -0
- data/lib/chef/knife/config_use.rb +61 -0
- data/lib/chef/knife/config_use_profile.rb +9 -24
- data/lib/chef/knife/configure.rb +2 -2
- data/lib/chef/knife/core/bootstrap_context.rb +2 -2
- data/lib/chef/knife/core/object_loader.rb +1 -1
- data/lib/chef/knife/core/windows_bootstrap_context.rb +11 -11
- data/lib/chef/knife/exec.rb +2 -2
- data/lib/chef/knife/node_show.rb +2 -2
- data/lib/chef/knife/serve.rb +3 -3
- data/lib/chef/knife/ssh.rb +16 -1
- data/lib/chef/knife/ssl_check.rb +3 -3
- data/lib/chef/knife/status.rb +2 -2
- data/lib/chef/knife/user_create.rb +2 -2
- data/lib/chef/knife/yaml_convert.rb +1 -1
- data/lib/chef/local_mode.rb +2 -2
- data/lib/chef/log/syslog.rb +2 -2
- data/lib/chef/log/winevt.rb +2 -2
- data/lib/chef/mixin/deep_merge.rb +0 -12
- data/lib/chef/mixin/openssl_helper.rb +1 -4
- data/lib/chef/mixin/template.rb +2 -2
- data/lib/chef/mixin/uris.rb +2 -2
- data/lib/chef/mixin/versioned_api.rb +1 -2
- data/lib/chef/monkey_patches/net_http.rb +4 -4
- data/lib/chef/node_map.rb +2 -2
- data/lib/chef/policy_builder/policyfile.rb +2 -2
- data/lib/chef/provider.rb +0 -4
- data/lib/chef/provider/file.rb +2 -2
- data/lib/chef/provider/ifconfig.rb +1 -1
- data/lib/chef/provider/launchd.rb +2 -2
- data/lib/chef/provider/mount/linux.rb +63 -0
- data/lib/chef/provider/package/rubygems.rb +21 -18
- data/lib/chef/provider/package/snap.rb +0 -1
- data/lib/chef/provider/package/windows.rb +2 -2
- data/lib/chef/provider/package/windows/registry_uninstall_entry.rb +3 -1
- data/lib/chef/provider/package/zypper.rb +1 -1
- data/lib/chef/provider/remote_file/content.rb +3 -0
- data/lib/chef/provider/remote_file/ftp.rb +6 -4
- data/lib/chef/provider/remote_file/sftp.rb +6 -4
- data/lib/chef/provider/route.rb +2 -6
- data/lib/chef/provider/service/macosx.rb +2 -2
- data/lib/chef/provider/template_finder.rb +2 -10
- data/lib/chef/provider/user/dscl.rb +3 -3
- data/lib/chef/provider/user/mac.rb +1 -1
- data/lib/chef/provider/windows_task.rb +1 -2
- data/lib/chef/provider/zypper_repository.rb +2 -2
- data/lib/chef/provider_resolver.rb +1 -1
- data/lib/chef/providers.rb +1 -0
- data/lib/chef/recipe.rb +2 -2
- data/lib/chef/resource.rb +1 -1
- data/lib/chef/resource/apt_repository.rb +1 -1
- data/lib/chef/resource/bff_package.rb +22 -0
- data/lib/chef/resource/breakpoint.rb +57 -2
- data/lib/chef/resource/build_essential.rb +1 -1
- data/lib/chef/resource/cab_package.rb +29 -0
- data/lib/chef/resource/chef_client_cron.rb +32 -25
- data/lib/chef/resource/chef_client_launchd.rb +194 -0
- data/lib/chef/resource/chef_client_scheduled_task.rb +21 -18
- data/lib/chef/resource/chef_client_systemd_timer.rb +24 -17
- data/lib/chef/resource/chef_client_trusted_certificate.rb +101 -0
- data/lib/chef/resource/chef_gem.rb +10 -10
- data/lib/chef/resource/chef_handler.rb +148 -4
- data/lib/chef/resource/chef_sleep.rb +2 -2
- data/lib/chef/resource/chef_vault_secret.rb +1 -1
- data/lib/chef/resource/cookbook_file.rb +2 -2
- data/lib/chef/resource/cron/cron_d.rb +0 -1
- data/lib/chef/resource/dnf_package.rb +2 -2
- data/lib/chef/resource/dsc_resource.rb +0 -1
- data/lib/chef/resource/dsc_script.rb +2 -2
- data/lib/chef/resource/execute.rb +6 -6
- data/lib/chef/resource/file.rb +4 -4
- data/lib/chef/resource/gem_package.rb +5 -5
- data/lib/chef/resource/homebrew_package.rb +3 -3
- data/lib/chef/resource/homebrew_update.rb +5 -5
- data/lib/chef/resource/hostname.rb +2 -2
- data/lib/chef/resource/launchd.rb +2 -1
- data/lib/chef/resource/locale.rb +2 -2
- data/lib/chef/resource/macos_userdefaults.rb +3 -3
- data/lib/chef/resource/notify_group.rb +0 -1
- data/lib/chef/resource/ohai.rb +46 -3
- data/lib/chef/resource/ohai_hint.rb +33 -0
- data/lib/chef/resource/openssl_dhparam.rb +27 -5
- data/lib/chef/resource/openssl_ec_private_key.rb +6 -3
- data/lib/chef/resource/openssl_ec_public_key.rb +2 -2
- data/lib/chef/resource/openssl_rsa_private_key.rb +6 -3
- data/lib/chef/resource/openssl_x509_certificate.rb +14 -14
- data/lib/chef/resource/openssl_x509_crl.rb +19 -10
- data/lib/chef/resource/openssl_x509_request.rb +14 -16
- data/lib/chef/resource/osx_profile.rb +77 -13
- data/lib/chef/resource/plist.rb +1 -1
- data/lib/chef/resource/powershell_package_source.rb +5 -5
- data/lib/chef/resource/reboot.rb +2 -2
- data/lib/chef/resource/remote_file.rb +3 -3
- data/lib/chef/resource/rhsm_register.rb +22 -10
- data/lib/chef/resource/ruby_block.rb +2 -2
- data/lib/chef/resource/scm/subversion.rb +2 -2
- data/lib/chef/resource/service.rb +3 -3
- data/lib/chef/resource/ssh_known_hosts_entry.rb +2 -2
- data/lib/chef/resource/support/cron.d.erb +1 -1
- data/lib/chef/resource/support/cron_access.erb +1 -1
- data/lib/chef/resource/support/sudoer.erb +1 -1
- data/lib/chef/resource/support/ulimit.erb +1 -1
- data/lib/chef/resource/sysctl.rb +1 -5
- data/lib/chef/resource/systemd_unit.rb +2 -2
- data/lib/chef/resource/template.rb +2 -2
- data/lib/chef/resource/windows_ad_join.rb +10 -3
- data/lib/chef/resource/windows_certificate.rb +6 -4
- data/lib/chef/resource/windows_firewall_profile.rb +22 -20
- data/lib/chef/resource/windows_package.rb +28 -5
- data/lib/chef/resource/windows_printer.rb +5 -3
- data/lib/chef/resource/windows_printer_port.rb +6 -4
- data/lib/chef/resource/windows_user_privilege.rb +53 -54
- data/lib/chef/resource/windows_workgroup.rb +3 -3
- data/lib/chef/resource/yum_package.rb +2 -2
- data/lib/chef/resources.rb +3 -1
- data/lib/chef/run_context.rb +2 -2
- data/lib/chef/run_context/cookbook_compiler.rb +1 -1
- data/lib/chef/run_lock.rb +2 -2
- data/lib/chef/search/query.rb +4 -5
- data/lib/chef/shell.rb +31 -26
- data/lib/chef/shell/ext.rb +11 -11
- data/lib/chef/shell/shell_session.rb +2 -2
- data/lib/chef/train_transport.rb +5 -104
- data/lib/chef/util/diff.rb +3 -3
- data/lib/chef/util/powershell/cmdlet.rb +3 -1
- data/lib/chef/util/powershell/ps_credential.rb +18 -14
- data/lib/chef/util/threaded_job_queue.rb +0 -2
- data/lib/chef/version.rb +1 -1
- data/lib/chef/win32/crypto.rb +1 -1
- data/lib/chef/win32/registry.rb +1 -2
- data/spec/data/shef-config.rb +1 -1
- data/spec/functional/event_loggers/windows_eventlog_spec.rb +6 -5
- data/spec/functional/resource/aix_service_spec.rb +2 -2
- data/spec/functional/resource/aixinit_service_spec.rb +1 -1
- data/spec/functional/resource/insserv_spec.rb +1 -1
- data/spec/functional/resource/user/dscl_spec.rb +1 -1
- data/spec/functional/resource/user/mac_user_spec.rb +1 -1
- data/spec/functional/resource/windows_task_spec.rb +13 -13
- data/spec/functional/version_spec.rb +3 -3
- data/spec/integration/client/client_spec.rb +4 -4
- data/spec/integration/client/exit_code_spec.rb +3 -2
- data/spec/integration/client/ipv6_spec.rb +1 -1
- data/spec/integration/knife/{config_list_profiles_spec.rb → config_list_spec.rb} +30 -29
- data/spec/integration/knife/{config_get_spec.rb → config_show_spec.rb} +3 -3
- data/spec/integration/knife/{config_use_profile_spec.rb → config_use_spec.rb} +53 -10
- data/spec/integration/knife/cookbook_api_ipv6_spec.rb +1 -1
- data/spec/integration/ohai/ohai_spec.rb +61 -0
- data/spec/integration/recipes/remote_directory.rb +1 -1
- data/spec/integration/solo/solo_spec.rb +5 -5
- data/spec/spec_helper.rb +6 -3
- data/spec/stress/win32/file_spec.rb +1 -1
- data/spec/support/chef_helpers.rb +2 -2
- data/spec/support/matchers/leak.rb +2 -2
- data/spec/support/platform_helpers.rb +16 -34
- data/spec/support/shared/functional/securable_resource.rb +108 -27
- data/spec/support/shared/functional/win32_service.rb +1 -1
- data/spec/support/shared/unit/application_dot_d.rb +5 -3
- data/spec/tiny_server.rb +0 -1
- data/spec/unit/application/client_spec.rb +2 -2
- data/spec/unit/application/exit_code_spec.rb +10 -0
- data/spec/unit/application_spec.rb +4 -6
- data/spec/unit/chef_fs/parallelizer_spec.rb +5 -1
- data/spec/unit/chef_fs/path_util_spec.rb +1 -1
- data/spec/unit/cookbook/synchronizer_spec.rb +2 -2
- data/spec/unit/cookbook_spec.rb +2 -2
- data/spec/unit/data_collector/config_validation_spec.rb +208 -0
- data/spec/unit/data_collector_spec.rb +0 -113
- data/spec/unit/dsl/declare_resource_spec.rb +1 -1
- data/spec/unit/file_access_control_spec.rb +1 -1
- data/spec/unit/knife/bootstrap_spec.rb +6 -6
- data/spec/unit/knife/core/ui_spec.rb +1 -0
- data/spec/unit/knife/ssh_spec.rb +2 -2
- data/spec/unit/lwrp_spec.rb +3 -3
- data/spec/unit/mixin/deep_merge_spec.rb +15 -0
- data/spec/unit/mixin/openssl_helper_spec.rb +1 -1
- data/spec/unit/mixin/powershell_exec_spec.rb +1 -1
- data/spec/unit/mixin/securable_spec.rb +2 -2
- data/spec/unit/node/immutable_collections_spec.rb +2 -2
- data/spec/unit/provider/mount/linux_spec.rb +97 -0
- data/spec/unit/provider/package/chocolatey_spec.rb +1 -1
- data/spec/unit/provider/package/powershell_spec.rb +1 -1
- data/spec/unit/provider/package/rubygems_spec.rb +4 -1
- data/spec/unit/provider/route_spec.rb +0 -2
- data/spec/unit/recipe_spec.rb +1 -1
- data/spec/unit/resource/chef_client_cron_spec.rb +35 -14
- data/spec/unit/resource/chef_client_launchd_spec.rb +127 -0
- data/spec/unit/resource/chef_client_systemd_timer_spec.rb +36 -1
- data/spec/unit/resource/chef_client_trusted_certificate_spec.rb +54 -0
- data/spec/unit/resource/launchd_spec.rb +8 -0
- data/spec/unit/resource/osx_profile_spec.rb +67 -1
- data/spec/unit/resource/rhsm_register_spec.rb +56 -18
- data/spec/unit/resource/windows_uac_spec.rb +1 -1
- data/spec/unit/resource/windows_user_privilege_spec.rb +55 -0
- data/spec/unit/run_lock_spec.rb +5 -1
- data/spec/unit/runner_spec.rb +1 -2
- data/spec/unit/shell/shell_ext_spec.rb +46 -3
- data/spec/unit/shell/shell_session_spec.rb +35 -64
- data/spec/unit/shell_spec.rb +16 -19
- data/spec/unit/train_transport_spec.rb +14 -13
- data/spec/unit/util/selinux_spec.rb +2 -0
- data/tasks/rspec.rb +0 -2
- metadata +41 -17
- data/lib/chef/dist.rb +0 -68
- data/spec/integration/knife/config_get_profile_spec.rb +0 -114
@@ -17,7 +17,7 @@ require "spec_helper"
|
|
17
17
|
require "support/shared/integration/integration_helper"
|
18
18
|
require "support/shared/context/config"
|
19
19
|
|
20
|
-
describe "knife config
|
20
|
+
describe "knife config show", :workstation do
|
21
21
|
include IntegrationSupport
|
22
22
|
include KnifeSupport
|
23
23
|
|
@@ -27,7 +27,7 @@ describe "knife config get", :workstation do
|
|
27
27
|
|
28
28
|
when_the_repository("has a custom env") do
|
29
29
|
subject do
|
30
|
-
cmd = knife("config", "
|
30
|
+
cmd = knife("config", "show", *cmd_args, instance_filter: lambda { |instance|
|
31
31
|
# Clear the stub set up in KnifeSupport.
|
32
32
|
allow(File).to receive(:file?).and_call_original
|
33
33
|
# Lies, damn lies, and config files. We need to allow normal config loading
|
@@ -47,7 +47,7 @@ describe "knife config get", :workstation do
|
|
47
47
|
ChefConfig::PathHelper.per_tool_home_environment = "KNIFE_HOME"
|
48
48
|
# Clear these out because they are cached permanently.
|
49
49
|
ChefConfig::PathHelper.class_exec { remove_class_variable(:@@home_dir) }
|
50
|
-
Chef::Knife::
|
50
|
+
Chef::Knife::ConfigShow.reset_config_loader!
|
51
51
|
begin
|
52
52
|
ex.run
|
53
53
|
ensure
|
@@ -17,7 +17,7 @@ require "spec_helper"
|
|
17
17
|
require "support/shared/integration/integration_helper"
|
18
18
|
require "support/shared/context/config"
|
19
19
|
|
20
|
-
describe "knife config use
|
20
|
+
describe "knife config use", :workstation do
|
21
21
|
include IntegrationSupport
|
22
22
|
include KnifeSupport
|
23
23
|
|
@@ -26,15 +26,15 @@ describe "knife config use-profile", :workstation do
|
|
26
26
|
let(:cmd_args) { [] }
|
27
27
|
|
28
28
|
when_the_repository("has a custom env") do
|
29
|
-
let(:
|
30
|
-
knife("config", "use
|
29
|
+
let(:knife_use) do
|
30
|
+
knife("config", "use", *cmd_args, instance_filter: lambda { |instance|
|
31
31
|
# Fake the failsafe check because this command doesn't actually process knife.rb.
|
32
32
|
$__KNIFE_INTEGRATION_FAILSAFE_CHECK << " ole"
|
33
33
|
allow(File).to receive(:file?).and_call_original
|
34
34
|
})
|
35
35
|
end
|
36
36
|
|
37
|
-
subject {
|
37
|
+
subject { knife_use.stdout }
|
38
38
|
|
39
39
|
around do |ex|
|
40
40
|
# Store and reset the value of some env vars.
|
@@ -45,7 +45,7 @@ describe "knife config use-profile", :workstation do
|
|
45
45
|
ChefConfig::PathHelper.per_tool_home_environment = "KNIFE_HOME"
|
46
46
|
# Clear these out because they are cached permanently.
|
47
47
|
ChefConfig::PathHelper.class_exec { remove_class_variable(:@@home_dir) }
|
48
|
-
Chef::Knife::
|
48
|
+
Chef::Knife::ConfigUse.reset_config_loader!
|
49
49
|
begin
|
50
50
|
ex.run
|
51
51
|
ensure
|
@@ -68,8 +68,51 @@ describe "knife config use-profile", :workstation do
|
|
68
68
|
end
|
69
69
|
|
70
70
|
context "with no argument" do
|
71
|
-
|
72
|
-
|
71
|
+
context "with no configuration" do
|
72
|
+
it { is_expected.to eq "default\n" }
|
73
|
+
end
|
74
|
+
|
75
|
+
context "with --profile" do
|
76
|
+
let(:cmd_args) { %w{--profile production} }
|
77
|
+
it { is_expected.to eq "production\n" }
|
78
|
+
end
|
79
|
+
|
80
|
+
context "with an environment variable" do
|
81
|
+
around do |ex|
|
82
|
+
old_chef_profile = ENV["CHEF_PROFILE"]
|
83
|
+
begin
|
84
|
+
ENV["CHEF_PROFILE"] = "staging"
|
85
|
+
ex.run
|
86
|
+
ensure
|
87
|
+
ENV["CHEF_PROFILE"] = old_chef_profile
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
it { is_expected.to eq "staging\n" }
|
92
|
+
end
|
93
|
+
|
94
|
+
context "with a context file" do
|
95
|
+
before { file(".chef/context", "development\n") }
|
96
|
+
it { is_expected.to eq "development\n" }
|
97
|
+
end
|
98
|
+
|
99
|
+
context "with a context file under $CHEF_HOME" do
|
100
|
+
before do
|
101
|
+
file("chefhome/.chef/context", "other\n")
|
102
|
+
ENV["CHEF_HOME"] = path_to("chefhome")
|
103
|
+
end
|
104
|
+
|
105
|
+
it { is_expected.to eq "other\n" }
|
106
|
+
end
|
107
|
+
|
108
|
+
context "with a context file under $KNIFE_HOME" do
|
109
|
+
before do
|
110
|
+
file("knifehome/.chef/context", "other\n")
|
111
|
+
ENV["KNIFE_HOME"] = path_to("knifehome")
|
112
|
+
end
|
113
|
+
|
114
|
+
it { is_expected.to eq "other\n" }
|
115
|
+
end
|
73
116
|
end
|
74
117
|
|
75
118
|
context "with an argument" do
|
@@ -88,14 +131,14 @@ describe "knife config use-profile", :workstation do
|
|
88
131
|
|
89
132
|
context "with no credentials file" do
|
90
133
|
let(:cmd_args) { %w{production} }
|
91
|
-
subject {
|
134
|
+
subject { knife_use.stderr }
|
92
135
|
it { is_expected.to eq "FATAL: No profiles found, #{path_to(".chef/credentials")} does not exist or is empty\n" }
|
93
136
|
end
|
94
137
|
|
95
138
|
context "with an empty credentials file" do
|
96
139
|
let(:cmd_args) { %w{production} }
|
97
140
|
before { file(".chef/credentials", "") }
|
98
|
-
subject {
|
141
|
+
subject { knife_use.stderr }
|
99
142
|
it { is_expected.to eq "FATAL: No profiles found, #{path_to(".chef/credentials")} does not exist or is empty\n" }
|
100
143
|
end
|
101
144
|
|
@@ -107,7 +150,7 @@ describe "knife config use-profile", :workstation do
|
|
107
150
|
client_key = "testkey.pem"
|
108
151
|
chef_server_url = "https://example.com/organizations/testorg"
|
109
152
|
EOH
|
110
|
-
subject {
|
153
|
+
subject { knife_use }
|
111
154
|
it { expect { subject }.to raise_error ChefConfig::ConfigurationError, "Profile staging doesn't exist. Please add it to #{path_to(".chef/credentials")} and if it is profile with DNS name check that you are not missing single quotes around it as per docs https://docs.chef.io/workstation/knife_setup/#knife-profiles." }
|
112
155
|
end
|
113
156
|
|
@@ -62,7 +62,7 @@ describe "Knife cookbook API integration with IPv6", :workstation, :not_supporte
|
|
62
62
|
Dir.mktmpdir
|
63
63
|
end
|
64
64
|
|
65
|
-
let(:chef_dir) { File.join(
|
65
|
+
let(:chef_dir) { File.join(__dir__, "..", "..", "..", "bin") }
|
66
66
|
let(:knife) { "ruby '#{chef_dir}/knife'" }
|
67
67
|
|
68
68
|
let(:knife_config_flag) { "-c '#{path_to("config/knife.rb")}'" }
|
@@ -0,0 +1,61 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require "chef/mixin/shell_out"
|
3
|
+
require "benchmark" unless defined?(Benchmark)
|
4
|
+
|
5
|
+
describe "ohai" do
|
6
|
+
include Chef::Mixin::ShellOut
|
7
|
+
|
8
|
+
let(:ohai) { "bundle exec ohai" }
|
9
|
+
|
10
|
+
describe "testing ohai performance" do
|
11
|
+
# The purpose of this test is to generally find misconfigured DNS on
|
12
|
+
# CI testers. If this fails, it is probably because the forward+reverse
|
13
|
+
# DNS lookup that node[:hostname] needs is timing out and failing.
|
14
|
+
#
|
15
|
+
# If it is failing spuriously, it may mean DNS is failing spuriously, the
|
16
|
+
# best solution will be to make sure that `hostname -f`-like behavior hits
|
17
|
+
# /etc/hosts and not DNS.
|
18
|
+
#
|
19
|
+
# If it still fails supriously, it is possible that the server has high
|
20
|
+
# CPU load (e.g. due to background processes) which are contending with the
|
21
|
+
# running tests (disable the screensaver on servers, stop playing Fortnite
|
22
|
+
# while you're running tests, etc).
|
23
|
+
#
|
24
|
+
# If this just fails due to I/O being very slow and ruby being very slow to
|
25
|
+
# startup then that still indicates that the tester configuration needs
|
26
|
+
# fixing. The fact that this will fail on a windows box on a virt that doesn't
|
27
|
+
# use an SSD is because we have a higher bar for the tests to run successfully
|
28
|
+
# and that configuration is broken, so this test is red for a reason.
|
29
|
+
#
|
30
|
+
# This will probably fail on raspberry pi's or something like that as well. That
|
31
|
+
# is not a bug. We will never accept a raspberry pi as a CI tester for our
|
32
|
+
# software. Feel free to manually delete and thereby skip this file in your
|
33
|
+
# own testing harness, but that is not our concern, we are testing behavior
|
34
|
+
# that is critical to our infrastructure and must run in our tests.
|
35
|
+
#
|
36
|
+
# XXX: unfortunately this is so slow on our windows testers (~9 seconds on one
|
37
|
+
# tester) that we can't enable it for windows unless we get some better perf there.
|
38
|
+
#
|
39
|
+
it "the hostname plugin must return in under 4 seconds (see comments in code)" do
|
40
|
+
# unfortunately this doesn't look stable enough to enable
|
41
|
+
skip "we need to do more performance work on windows and s390x testers before this can be enabled"
|
42
|
+
delta = Benchmark.realtime do
|
43
|
+
shell_out!("#{ohai} hostname")
|
44
|
+
end
|
45
|
+
expect(delta).to be < 4
|
46
|
+
end
|
47
|
+
|
48
|
+
# The purpose of this is to give some indication of if shell_out is slow or
|
49
|
+
# if the hostname plugin itself is slow. If this test is also failing that we
|
50
|
+
# almost certainly have some kind of issue with DNS timeouts, etc. If this
|
51
|
+
# test succeeds and the other one fails, then it can be some kind of shelling-out
|
52
|
+
# issue or poor performance due to I/O on starting up ruby to run ohai, etc.
|
53
|
+
#
|
54
|
+
it "the hostname plugin must return in under 2 seconds when called from pure ruby" do
|
55
|
+
delta = Benchmark.realtime do
|
56
|
+
Ohai::System.new.all_plugins(["hostname"])
|
57
|
+
end
|
58
|
+
expect(delta).to be < 2
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -5,7 +5,7 @@ describe Chef::Resource::RemoteDirectory do
|
|
5
5
|
include Chef::Mixin::ShellOut
|
6
6
|
|
7
7
|
# Until Cheffish::RSpec has cookbook support, we have to run the whole client
|
8
|
-
let(:chef_dir) { File.join(
|
8
|
+
let(:chef_dir) { File.join(__dir__, "..", "..", "..", "bin") }
|
9
9
|
|
10
10
|
# Invoke `chef-client` as `ruby PATH/TO/chef-client`. This ensures the
|
11
11
|
# following constraints are satisfied:
|
@@ -5,20 +5,20 @@ require "chef/run_lock"
|
|
5
5
|
require "chef/config"
|
6
6
|
require "timeout"
|
7
7
|
require "fileutils"
|
8
|
+
require "chef-utils"
|
8
9
|
require "chef/win32/security" if ChefUtils.windows?
|
9
|
-
require "chef/dist"
|
10
10
|
|
11
|
-
describe
|
11
|
+
describe ChefUtils::Dist::Solo::EXEC do
|
12
12
|
include IntegrationSupport
|
13
13
|
include Chef::Mixin::ShellOut
|
14
14
|
|
15
|
-
let(:chef_dir) { File.join(
|
15
|
+
let(:chef_dir) { File.join(__dir__, "..", "..", "..") }
|
16
16
|
|
17
17
|
let(:cookbook_x_100_metadata_rb) { cb_metadata("x", "1.0.0") }
|
18
18
|
|
19
19
|
let(:cookbook_ancient_100_metadata_rb) { cb_metadata("ancient", "1.0.0") }
|
20
20
|
|
21
|
-
let(:chef_solo) { "bundle exec #{
|
21
|
+
let(:chef_solo) { "bundle exec #{ChefUtils::Dist::Solo::EXEC} --legacy-mode --minimal-ohai" }
|
22
22
|
|
23
23
|
when_the_repository "creates nodes" do
|
24
24
|
let(:nodes_dir) { File.join(@repository_dir, "nodes") }
|
@@ -183,7 +183,7 @@ describe Chef::Dist::SOLOEXEC do
|
|
183
183
|
# run_lock gets stuck we can discover it.
|
184
184
|
expect do
|
185
185
|
Timeout.timeout(120) do
|
186
|
-
chef_dir = File.join(
|
186
|
+
chef_dir = File.join(__dir__, "..", "..", "..")
|
187
187
|
|
188
188
|
threads = []
|
189
189
|
|
data/spec/spec_helper.rb
CHANGED
@@ -141,9 +141,10 @@ RSpec.configure do |config|
|
|
141
141
|
|
142
142
|
config.filter_run_excluding windows_only: true unless windows?
|
143
143
|
config.filter_run_excluding not_supported_on_windows: true if windows?
|
144
|
-
config.filter_run_excluding not_supported_on_macos: true if
|
145
|
-
config.filter_run_excluding macos_only: true unless
|
146
|
-
config.filter_run_excluding
|
144
|
+
config.filter_run_excluding not_supported_on_macos: true if macos?
|
145
|
+
config.filter_run_excluding macos_only: true unless macos?
|
146
|
+
config.filter_run_excluding macos_1013: true unless macos_1013?
|
147
|
+
config.filter_run_excluding macos_gte_1014: true unless macos_gte_1014?
|
147
148
|
config.filter_run_excluding not_supported_on_aix: true if aix?
|
148
149
|
config.filter_run_excluding not_supported_on_solaris: true if solaris?
|
149
150
|
config.filter_run_excluding not_supported_on_gce: true if gce?
|
@@ -242,6 +243,8 @@ RSpec.configure do |config|
|
|
242
243
|
|
243
244
|
Chef::Log.setup!
|
244
245
|
|
246
|
+
Chef::ServerAPIVersions.instance.reset!
|
247
|
+
|
245
248
|
Chef::Config[:log_level] = :fatal
|
246
249
|
Chef::Log.level(Chef::Config[:log_level])
|
247
250
|
|
@@ -21,7 +21,7 @@ require "chef/win32/file" if windows?
|
|
21
21
|
|
22
22
|
describe "Chef::ReservedNames::Win32::File", :windows_only do
|
23
23
|
before(:each) do
|
24
|
-
@path = File.expand_path(File.join(
|
24
|
+
@path = File.expand_path(File.join(__dir__, "..", "..", "data", "old_home_dir", "my-dot-emacs"))
|
25
25
|
end
|
26
26
|
|
27
27
|
it "should not leak significant memory", :volatile do
|
@@ -14,8 +14,8 @@
|
|
14
14
|
# limitations under the License.
|
15
15
|
#
|
16
16
|
|
17
|
-
CHEF_SPEC_DATA = File.expand_path(
|
18
|
-
CHEF_SPEC_ASSETS = File.expand_path(
|
17
|
+
CHEF_SPEC_DATA = File.expand_path(__dir__ + "/../data/")
|
18
|
+
CHEF_SPEC_ASSETS = File.expand_path(__dir__ + "/../functional/assets/")
|
19
19
|
CHEF_SPEC_BACKUP_PATH = File.join(Dir.tmpdir, "test-backup-path")
|
20
20
|
|
21
21
|
def sha256_checksum(path)
|
@@ -61,10 +61,10 @@ module Matchers
|
|
61
61
|
def profiler
|
62
62
|
@profiler ||= begin
|
63
63
|
if ChefUtils.windows?
|
64
|
-
require File.join(
|
64
|
+
require File.join(__dir__, "..", "platforms", "prof", "win32")
|
65
65
|
RSpec::Prof::Win32::Profiler.new
|
66
66
|
else
|
67
|
-
require File.join(
|
67
|
+
require File.join(__dir__, "..", "prof", "gc")
|
68
68
|
RSpec::Prof::GC::Profiler.new
|
69
69
|
end
|
70
70
|
end
|
@@ -3,7 +3,6 @@ require "chef/mixin/shell_out"
|
|
3
3
|
require "ohai/mixin/http_helper"
|
4
4
|
require "ohai/mixin/gce_metadata"
|
5
5
|
require "chef/mixin/powershell_out"
|
6
|
-
require "chef/version_class"
|
7
6
|
|
8
7
|
class ShellHelpers
|
9
8
|
extend Chef::Mixin::ShellOut
|
@@ -27,11 +26,11 @@ class DependencyProc < Proc
|
|
27
26
|
end
|
28
27
|
|
29
28
|
def ruby_64bit?
|
30
|
-
|
29
|
+
RbConfig::CONFIG["host_cpu"].include?("x86_64")
|
31
30
|
end
|
32
31
|
|
33
32
|
def ruby_32bit?
|
34
|
-
|
33
|
+
RbConfig::CONFIG["host_cpu"].include?("i686")
|
35
34
|
end
|
36
35
|
|
37
36
|
def windows?
|
@@ -58,17 +57,17 @@ end
|
|
58
57
|
def windows_2012r2?
|
59
58
|
return false unless windows?
|
60
59
|
|
61
|
-
(
|
60
|
+
(win32_os_version && win32_os_version.start_with?("6.3"))
|
62
61
|
end
|
63
62
|
|
64
63
|
def windows_gte_10?
|
65
64
|
return false unless windows?
|
66
65
|
|
67
|
-
Gem::Requirement.new(">= 10").satisfied_by?(Gem::Version.new(
|
66
|
+
Gem::Requirement.new(">= 10").satisfied_by?(Gem::Version.new(win32_os_version))
|
68
67
|
end
|
69
68
|
|
70
|
-
def
|
71
|
-
@
|
69
|
+
def win32_os_version
|
70
|
+
@win32_os_version ||= begin
|
72
71
|
wmi = WmiLite::Wmi.new
|
73
72
|
host = wmi.first_of("Win32_OperatingSystem")
|
74
73
|
host["version"]
|
@@ -95,26 +94,12 @@ def windows_user_right?(right)
|
|
95
94
|
Chef::ReservedNames::Win32::Security.get_account_right(ENV["USERNAME"]).include?(right)
|
96
95
|
end
|
97
96
|
|
98
|
-
def
|
99
|
-
|
100
|
-
ver = Chef::Version.new(ohai[:platform_version])
|
101
|
-
return ver.major == 10 && ver.minor == 14
|
102
|
-
end
|
103
|
-
|
104
|
-
false
|
97
|
+
def macos_1013?
|
98
|
+
macos? && Gem::Requirement.new("~> 10.13.0").satisfied_by?(Gem::Version.new(ohai[:platform_version]))
|
105
99
|
end
|
106
100
|
|
107
|
-
def
|
108
|
-
|
109
|
-
result = ShellHelpers.shell_out("/usr/bin/sw_vers")
|
110
|
-
result.stdout.each_line do |line|
|
111
|
-
if /^ProductName:\sMac OS X.*$/.match?(line)
|
112
|
-
return true
|
113
|
-
end
|
114
|
-
end
|
115
|
-
end
|
116
|
-
|
117
|
-
false
|
101
|
+
def macos_gte_1014?
|
102
|
+
macos? && Gem::Requirement.new(">= 10.14").satisfied_by?(Gem::Version.new(ohai[:platform_version]))
|
118
103
|
end
|
119
104
|
|
120
105
|
# detects if the hardware is 64-bit (evaluates to true in "WOW64" mode in a 32-bit app on a 64-bit system)
|
@@ -127,26 +112,24 @@ def windows32?
|
|
127
112
|
windows? && !windows64?
|
128
113
|
end
|
129
114
|
|
130
|
-
# def jruby?
|
131
|
-
|
132
115
|
def unix?
|
133
116
|
!windows?
|
134
117
|
end
|
135
118
|
|
136
119
|
def linux?
|
137
|
-
RUBY_PLATFORM.
|
120
|
+
RUBY_PLATFORM.include?("linux")
|
138
121
|
end
|
139
122
|
|
140
123
|
def macos?
|
141
|
-
RUBY_PLATFORM.
|
124
|
+
RUBY_PLATFORM.include?("darwin")
|
142
125
|
end
|
143
126
|
|
144
127
|
def solaris?
|
145
|
-
RUBY_PLATFORM.
|
128
|
+
RUBY_PLATFORM.include?("solaris")
|
146
129
|
end
|
147
130
|
|
148
131
|
def freebsd?
|
149
|
-
RUBY_PLATFORM.
|
132
|
+
RUBY_PLATFORM.include?("freebsd")
|
150
133
|
end
|
151
134
|
|
152
135
|
def intel_64bit?
|
@@ -182,7 +165,7 @@ def debian_family?
|
|
182
165
|
end
|
183
166
|
|
184
167
|
def aix?
|
185
|
-
RUBY_PLATFORM.
|
168
|
+
RUBY_PLATFORM.include?("aix")
|
186
169
|
end
|
187
170
|
|
188
171
|
def wpar?
|
@@ -216,8 +199,7 @@ def selinux_enabled?
|
|
216
199
|
end
|
217
200
|
|
218
201
|
def suse?
|
219
|
-
|
220
|
-
( ::File.exist?("/etc/os-release") && /sles|suse/.match?(File.read("/etc/os-release")) )
|
202
|
+
!!(ohai[:platform_family] == "suse")
|
221
203
|
end
|
222
204
|
|
223
205
|
def root?
|
@@ -242,48 +242,100 @@ shared_examples_for "a securable resource with existing target" do
|
|
242
242
|
include_context "use Windows permissions"
|
243
243
|
|
244
244
|
describe "when setting owner" do
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
245
|
+
context "with user name" do
|
246
|
+
before do
|
247
|
+
resource.owner(SID.admin_account_name)
|
248
|
+
resource.run_action(:create)
|
249
|
+
end
|
249
250
|
|
250
|
-
|
251
|
-
|
251
|
+
it "should set the owner" do
|
252
|
+
expect(descriptor.owner).to eq(SID.Administrator)
|
253
|
+
end
|
254
|
+
|
255
|
+
it "is marked as updated only if changes are made" do
|
256
|
+
expect(resource.updated_by_last_action?).to eq(expect_updated?)
|
257
|
+
end
|
252
258
|
end
|
253
259
|
|
254
|
-
|
255
|
-
|
260
|
+
context "with SID" do
|
261
|
+
before do
|
262
|
+
resource.owner(SID.Administrator.to_s)
|
263
|
+
resource.run_action(:create)
|
264
|
+
end
|
265
|
+
|
266
|
+
it "should set the owner" do
|
267
|
+
expect(descriptor.owner).to eq(SID.Administrator)
|
268
|
+
end
|
269
|
+
|
270
|
+
it "is marked as updated only if changes are made" do
|
271
|
+
expect(resource.updated_by_last_action?).to eq(expect_updated?)
|
272
|
+
end
|
256
273
|
end
|
257
274
|
end
|
258
275
|
|
259
276
|
describe "when setting group" do
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
277
|
+
context "with group name" do
|
278
|
+
before do
|
279
|
+
resource.group("Administrators")
|
280
|
+
resource.run_action(:create)
|
281
|
+
end
|
282
|
+
|
283
|
+
it "should set the group" do
|
284
|
+
expect(descriptor.group).to eq(SID.Administrators)
|
285
|
+
end
|
264
286
|
|
265
|
-
|
266
|
-
|
287
|
+
it "is marked as updated only if changes are made" do
|
288
|
+
expect(resource.updated_by_last_action?).to eq(expect_updated?)
|
289
|
+
end
|
267
290
|
end
|
268
291
|
|
269
|
-
|
270
|
-
|
292
|
+
context "with group SID" do
|
293
|
+
before do
|
294
|
+
resource.group(SID.Administrators.to_s)
|
295
|
+
resource.run_action(:create)
|
296
|
+
end
|
297
|
+
|
298
|
+
it "should set the group" do
|
299
|
+
expect(descriptor.group).to eq(SID.Administrators)
|
300
|
+
end
|
301
|
+
|
302
|
+
it "is marked as updated only if changes are made" do
|
303
|
+
expect(resource.updated_by_last_action?).to eq(expect_updated?)
|
304
|
+
end
|
271
305
|
end
|
272
306
|
end
|
273
307
|
|
274
308
|
describe "when setting rights and deny_rights" do
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
309
|
+
context "with user name" do
|
310
|
+
before do
|
311
|
+
resource.deny_rights(:modify, "Guest")
|
312
|
+
resource.rights(:read, "Guest")
|
313
|
+
resource.run_action(:create)
|
314
|
+
end
|
280
315
|
|
281
|
-
|
282
|
-
|
316
|
+
it "should set the rights and deny_rights" do
|
317
|
+
expect(explicit_aces).to eq(denied_acl(SID.Guest, expected_modify_perms) + allowed_acl(SID.Guest, expected_read_perms))
|
318
|
+
end
|
319
|
+
|
320
|
+
it "is marked as updated only if changes are made" do
|
321
|
+
expect(resource.updated_by_last_action?).to eq(expect_updated?)
|
322
|
+
end
|
283
323
|
end
|
284
324
|
|
285
|
-
|
286
|
-
|
325
|
+
context "with SID" do
|
326
|
+
before do
|
327
|
+
resource.deny_rights(:modify, SID.Guest.to_s)
|
328
|
+
resource.rights(:read, SID.Guest.to_s)
|
329
|
+
resource.run_action(:create)
|
330
|
+
end
|
331
|
+
|
332
|
+
it "should set the rights and deny_rights" do
|
333
|
+
expect(explicit_aces).to eq(denied_acl(SID.Guest, expected_modify_perms) + allowed_acl(SID.Guest, expected_read_perms))
|
334
|
+
end
|
335
|
+
|
336
|
+
it "is marked as updated only if changes are made" do
|
337
|
+
expect(resource.updated_by_last_action?).to eq(expect_updated?)
|
338
|
+
end
|
287
339
|
end
|
288
340
|
end
|
289
341
|
end
|
@@ -302,12 +354,18 @@ shared_examples_for "a securable resource without existing target" do
|
|
302
354
|
expect(descriptor.owner).to eq(SID.default_security_object_owner)
|
303
355
|
end
|
304
356
|
|
305
|
-
it "sets owner when owner is specified" do
|
357
|
+
it "sets owner when owner is specified by name" do
|
306
358
|
resource.owner "Guest"
|
307
359
|
resource.run_action(:create)
|
308
360
|
expect(descriptor.owner).to eq(SID.Guest)
|
309
361
|
end
|
310
362
|
|
363
|
+
it "sets owner when owner is specified by SID" do
|
364
|
+
resource.owner SID.Guest.to_s
|
365
|
+
resource.run_action(:create)
|
366
|
+
expect(descriptor.owner).to eq(SID.Guest)
|
367
|
+
end
|
368
|
+
|
311
369
|
it "fails to set owner when owner has invalid characters" do
|
312
370
|
expect { resource.owner 'Lance "The Nose" Glindenberry III' }.to raise_error(Chef::Exceptions::ValidationFailed)
|
313
371
|
end
|
@@ -339,12 +397,18 @@ shared_examples_for "a securable resource without existing target" do
|
|
339
397
|
expect(descriptor.group).to eq(SID.default_security_object_group)
|
340
398
|
end
|
341
399
|
|
342
|
-
it "sets group when group is specified" do
|
400
|
+
it "sets group when group is specified by name" do
|
343
401
|
resource.group "Everyone"
|
344
402
|
resource.run_action(:create)
|
345
403
|
expect(descriptor.group).to eq(SID.Everyone)
|
346
404
|
end
|
347
405
|
|
406
|
+
it "sets group when group is specified by SID" do
|
407
|
+
resource.group SID.Everyone.to_s
|
408
|
+
resource.run_action(:create)
|
409
|
+
expect(descriptor.group).to eq(SID.Everyone)
|
410
|
+
end
|
411
|
+
|
348
412
|
it "fails to set group when group has invalid characters" do
|
349
413
|
expect { resource.group 'Lance "The Nose" Glindenberry III' }.to raise_error(Chef::Exceptions::ValidationFailed)
|
350
414
|
end
|
@@ -406,6 +470,17 @@ shared_examples_for "a securable resource without existing target" do
|
|
406
470
|
allowed_acl(SID.Guest, expected_modify_perms)
|
407
471
|
)
|
408
472
|
end
|
473
|
+
|
474
|
+
it "multiple rights with SID" do
|
475
|
+
resource.rights(:read, SID.Everyone.to_s)
|
476
|
+
resource.rights(:modify, SID.Guest.to_s)
|
477
|
+
resource.run_action(:create)
|
478
|
+
|
479
|
+
expect(explicit_aces).to eq(
|
480
|
+
allowed_acl(SID.Everyone, expected_read_perms) +
|
481
|
+
allowed_acl(SID.Guest, expected_modify_perms)
|
482
|
+
)
|
483
|
+
end
|
409
484
|
end
|
410
485
|
end
|
411
486
|
|
@@ -443,6 +518,12 @@ shared_examples_for "a securable resource without existing target" do
|
|
443
518
|
expect(explicit_aces).to eq(denied_acl(SID.Guest, expected_full_control_perms))
|
444
519
|
end
|
445
520
|
|
521
|
+
it "using SID" do
|
522
|
+
resource.deny_rights(:full_control, SID.Guest.to_s)
|
523
|
+
resource.run_action(:create)
|
524
|
+
expect(explicit_aces).to eq(denied_acl(SID.Guest, expected_full_control_perms))
|
525
|
+
end
|
526
|
+
|
446
527
|
it "deny_rights ahead of rights" do
|
447
528
|
resource.rights(:read, "Everyone")
|
448
529
|
resource.deny_rights(:modify, "Guest")
|