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.
Files changed (271) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -1
  3. data/Rakefile +2 -2
  4. data/bin/knife +1 -1
  5. data/chef.gemspec +2 -1
  6. data/distro/templates/powershell/chef/chef.psm1.erb +18 -18
  7. data/ext/win32-eventlog/Rakefile +2 -2
  8. data/ext/win32-eventlog/chef-log.man.erb +4 -4
  9. data/lib/chef/application.rb +18 -16
  10. data/lib/chef/application/apply.rb +12 -7
  11. data/lib/chef/application/base.rb +26 -23
  12. data/lib/chef/application/client.rb +10 -4
  13. data/lib/chef/application/exit_code.rb +13 -4
  14. data/lib/chef/application/knife.rb +22 -11
  15. data/lib/chef/application/solo.rb +2 -1
  16. data/lib/chef/application/windows_service.rb +14 -14
  17. data/lib/chef/application/windows_service_manager.rb +6 -6
  18. data/lib/chef/chef_fs/knife.rb +2 -2
  19. data/lib/chef/chef_fs/parallelizer.rb +0 -1
  20. data/lib/chef/client.rb +10 -11
  21. data/lib/chef/cookbook/cookbook_version_loader.rb +1 -1
  22. data/lib/chef/cookbook/synchronizer.rb +2 -2
  23. data/lib/chef/cookbook_site_streaming_uploader.rb +13 -11
  24. data/lib/chef/cookbook_uploader.rb +1 -1
  25. data/lib/chef/data_collector.rb +6 -5
  26. data/lib/chef/data_collector/config_validation.rb +22 -13
  27. data/lib/chef/data_collector/run_end_message.rb +2 -2
  28. data/lib/chef/data_collector/run_start_message.rb +1 -1
  29. data/lib/chef/deprecated.rb +1 -1
  30. data/lib/chef/deprecation/warnings.rb +2 -2
  31. data/lib/chef/digester.rb +2 -2
  32. data/lib/chef/dsl/chef_vault.rb +1 -1
  33. data/lib/chef/dsl/data_query.rb +2 -2
  34. data/lib/chef/dsl/platform_introspection.rb +1 -1
  35. data/lib/chef/encrypted_data_bag_item.rb +3 -4
  36. data/lib/chef/encrypted_data_bag_item/decryptor.rb +3 -3
  37. data/lib/chef/encrypted_data_bag_item/encryptor.rb +3 -3
  38. data/lib/chef/environment.rb +2 -2
  39. data/lib/chef/event_loggers/windows_eventlog.rb +2 -2
  40. data/lib/chef/exceptions.rb +4 -4
  41. data/lib/chef/file_access_control/windows.rb +5 -1
  42. data/lib/chef/formatters/doc.rb +7 -6
  43. data/lib/chef/formatters/error_inspectors/api_error_formatting.rb +6 -5
  44. data/lib/chef/formatters/error_inspectors/node_load_error_inspector.rb +3 -3
  45. data/lib/chef/formatters/error_inspectors/registration_error_inspector.rb +9 -9
  46. data/lib/chef/formatters/error_inspectors/resource_failure_inspector.rb +2 -2
  47. data/lib/chef/formatters/error_inspectors/run_list_expansion_error_inspector.rb +3 -3
  48. data/lib/chef/formatters/minimal.rb +5 -4
  49. data/lib/chef/http.rb +6 -4
  50. data/lib/chef/http/auth_credentials.rb +5 -1
  51. data/lib/chef/http/authenticator.rb +1 -1
  52. data/lib/chef/http/basic_client.rb +4 -2
  53. data/lib/chef/http/decompressor.rb +1 -1
  54. data/lib/chef/http/http_request.rb +7 -5
  55. data/lib/chef/http/socketless_chef_zero_client.rb +5 -2
  56. data/lib/chef/http/ssl_policies.rb +1 -1
  57. data/lib/chef/json_compat.rb +1 -1
  58. data/lib/chef/knife.rb +4 -4
  59. data/lib/chef/knife/bootstrap.rb +16 -14
  60. data/lib/chef/knife/bootstrap/chef_vault_handler.rb +1 -1
  61. data/lib/chef/knife/bootstrap/templates/chef-full.erb +3 -3
  62. data/lib/chef/knife/bootstrap/templates/windows-chef-client-msi.erb +7 -7
  63. data/lib/chef/knife/client_create.rb +3 -3
  64. data/lib/chef/knife/config_get.rb +8 -97
  65. data/lib/chef/knife/config_get_profile.rb +9 -9
  66. data/lib/chef/knife/config_list.rb +139 -0
  67. data/lib/chef/knife/config_list_profiles.rb +8 -98
  68. data/lib/chef/knife/config_show.rb +127 -0
  69. data/lib/chef/knife/config_use.rb +61 -0
  70. data/lib/chef/knife/config_use_profile.rb +9 -24
  71. data/lib/chef/knife/configure.rb +2 -2
  72. data/lib/chef/knife/core/bootstrap_context.rb +2 -2
  73. data/lib/chef/knife/core/object_loader.rb +1 -1
  74. data/lib/chef/knife/core/windows_bootstrap_context.rb +11 -11
  75. data/lib/chef/knife/exec.rb +2 -2
  76. data/lib/chef/knife/node_show.rb +2 -2
  77. data/lib/chef/knife/serve.rb +3 -3
  78. data/lib/chef/knife/ssh.rb +16 -1
  79. data/lib/chef/knife/ssl_check.rb +3 -3
  80. data/lib/chef/knife/status.rb +2 -2
  81. data/lib/chef/knife/user_create.rb +2 -2
  82. data/lib/chef/knife/yaml_convert.rb +1 -1
  83. data/lib/chef/local_mode.rb +2 -2
  84. data/lib/chef/log/syslog.rb +2 -2
  85. data/lib/chef/log/winevt.rb +2 -2
  86. data/lib/chef/mixin/deep_merge.rb +0 -12
  87. data/lib/chef/mixin/openssl_helper.rb +1 -4
  88. data/lib/chef/mixin/template.rb +2 -2
  89. data/lib/chef/mixin/uris.rb +2 -2
  90. data/lib/chef/mixin/versioned_api.rb +1 -2
  91. data/lib/chef/monkey_patches/net_http.rb +4 -4
  92. data/lib/chef/node_map.rb +2 -2
  93. data/lib/chef/policy_builder/policyfile.rb +2 -2
  94. data/lib/chef/provider.rb +0 -4
  95. data/lib/chef/provider/file.rb +2 -2
  96. data/lib/chef/provider/ifconfig.rb +1 -1
  97. data/lib/chef/provider/launchd.rb +2 -2
  98. data/lib/chef/provider/mount/linux.rb +63 -0
  99. data/lib/chef/provider/package/rubygems.rb +21 -18
  100. data/lib/chef/provider/package/snap.rb +0 -1
  101. data/lib/chef/provider/package/windows.rb +2 -2
  102. data/lib/chef/provider/package/windows/registry_uninstall_entry.rb +3 -1
  103. data/lib/chef/provider/package/zypper.rb +1 -1
  104. data/lib/chef/provider/remote_file/content.rb +3 -0
  105. data/lib/chef/provider/remote_file/ftp.rb +6 -4
  106. data/lib/chef/provider/remote_file/sftp.rb +6 -4
  107. data/lib/chef/provider/route.rb +2 -6
  108. data/lib/chef/provider/service/macosx.rb +2 -2
  109. data/lib/chef/provider/template_finder.rb +2 -10
  110. data/lib/chef/provider/user/dscl.rb +3 -3
  111. data/lib/chef/provider/user/mac.rb +1 -1
  112. data/lib/chef/provider/windows_task.rb +1 -2
  113. data/lib/chef/provider/zypper_repository.rb +2 -2
  114. data/lib/chef/provider_resolver.rb +1 -1
  115. data/lib/chef/providers.rb +1 -0
  116. data/lib/chef/recipe.rb +2 -2
  117. data/lib/chef/resource.rb +1 -1
  118. data/lib/chef/resource/apt_repository.rb +1 -1
  119. data/lib/chef/resource/bff_package.rb +22 -0
  120. data/lib/chef/resource/breakpoint.rb +57 -2
  121. data/lib/chef/resource/build_essential.rb +1 -1
  122. data/lib/chef/resource/cab_package.rb +29 -0
  123. data/lib/chef/resource/chef_client_cron.rb +32 -25
  124. data/lib/chef/resource/chef_client_launchd.rb +194 -0
  125. data/lib/chef/resource/chef_client_scheduled_task.rb +21 -18
  126. data/lib/chef/resource/chef_client_systemd_timer.rb +24 -17
  127. data/lib/chef/resource/chef_client_trusted_certificate.rb +101 -0
  128. data/lib/chef/resource/chef_gem.rb +10 -10
  129. data/lib/chef/resource/chef_handler.rb +148 -4
  130. data/lib/chef/resource/chef_sleep.rb +2 -2
  131. data/lib/chef/resource/chef_vault_secret.rb +1 -1
  132. data/lib/chef/resource/cookbook_file.rb +2 -2
  133. data/lib/chef/resource/cron/cron_d.rb +0 -1
  134. data/lib/chef/resource/dnf_package.rb +2 -2
  135. data/lib/chef/resource/dsc_resource.rb +0 -1
  136. data/lib/chef/resource/dsc_script.rb +2 -2
  137. data/lib/chef/resource/execute.rb +6 -6
  138. data/lib/chef/resource/file.rb +4 -4
  139. data/lib/chef/resource/gem_package.rb +5 -5
  140. data/lib/chef/resource/homebrew_package.rb +3 -3
  141. data/lib/chef/resource/homebrew_update.rb +5 -5
  142. data/lib/chef/resource/hostname.rb +2 -2
  143. data/lib/chef/resource/launchd.rb +2 -1
  144. data/lib/chef/resource/locale.rb +2 -2
  145. data/lib/chef/resource/macos_userdefaults.rb +3 -3
  146. data/lib/chef/resource/notify_group.rb +0 -1
  147. data/lib/chef/resource/ohai.rb +46 -3
  148. data/lib/chef/resource/ohai_hint.rb +33 -0
  149. data/lib/chef/resource/openssl_dhparam.rb +27 -5
  150. data/lib/chef/resource/openssl_ec_private_key.rb +6 -3
  151. data/lib/chef/resource/openssl_ec_public_key.rb +2 -2
  152. data/lib/chef/resource/openssl_rsa_private_key.rb +6 -3
  153. data/lib/chef/resource/openssl_x509_certificate.rb +14 -14
  154. data/lib/chef/resource/openssl_x509_crl.rb +19 -10
  155. data/lib/chef/resource/openssl_x509_request.rb +14 -16
  156. data/lib/chef/resource/osx_profile.rb +77 -13
  157. data/lib/chef/resource/plist.rb +1 -1
  158. data/lib/chef/resource/powershell_package_source.rb +5 -5
  159. data/lib/chef/resource/reboot.rb +2 -2
  160. data/lib/chef/resource/remote_file.rb +3 -3
  161. data/lib/chef/resource/rhsm_register.rb +22 -10
  162. data/lib/chef/resource/ruby_block.rb +2 -2
  163. data/lib/chef/resource/scm/subversion.rb +2 -2
  164. data/lib/chef/resource/service.rb +3 -3
  165. data/lib/chef/resource/ssh_known_hosts_entry.rb +2 -2
  166. data/lib/chef/resource/support/cron.d.erb +1 -1
  167. data/lib/chef/resource/support/cron_access.erb +1 -1
  168. data/lib/chef/resource/support/sudoer.erb +1 -1
  169. data/lib/chef/resource/support/ulimit.erb +1 -1
  170. data/lib/chef/resource/sysctl.rb +1 -5
  171. data/lib/chef/resource/systemd_unit.rb +2 -2
  172. data/lib/chef/resource/template.rb +2 -2
  173. data/lib/chef/resource/windows_ad_join.rb +10 -3
  174. data/lib/chef/resource/windows_certificate.rb +6 -4
  175. data/lib/chef/resource/windows_firewall_profile.rb +22 -20
  176. data/lib/chef/resource/windows_package.rb +28 -5
  177. data/lib/chef/resource/windows_printer.rb +5 -3
  178. data/lib/chef/resource/windows_printer_port.rb +6 -4
  179. data/lib/chef/resource/windows_user_privilege.rb +53 -54
  180. data/lib/chef/resource/windows_workgroup.rb +3 -3
  181. data/lib/chef/resource/yum_package.rb +2 -2
  182. data/lib/chef/resources.rb +3 -1
  183. data/lib/chef/run_context.rb +2 -2
  184. data/lib/chef/run_context/cookbook_compiler.rb +1 -1
  185. data/lib/chef/run_lock.rb +2 -2
  186. data/lib/chef/search/query.rb +4 -5
  187. data/lib/chef/shell.rb +31 -26
  188. data/lib/chef/shell/ext.rb +11 -11
  189. data/lib/chef/shell/shell_session.rb +2 -2
  190. data/lib/chef/train_transport.rb +5 -104
  191. data/lib/chef/util/diff.rb +3 -3
  192. data/lib/chef/util/powershell/cmdlet.rb +3 -1
  193. data/lib/chef/util/powershell/ps_credential.rb +18 -14
  194. data/lib/chef/util/threaded_job_queue.rb +0 -2
  195. data/lib/chef/version.rb +1 -1
  196. data/lib/chef/win32/crypto.rb +1 -1
  197. data/lib/chef/win32/registry.rb +1 -2
  198. data/spec/data/shef-config.rb +1 -1
  199. data/spec/functional/event_loggers/windows_eventlog_spec.rb +6 -5
  200. data/spec/functional/resource/aix_service_spec.rb +2 -2
  201. data/spec/functional/resource/aixinit_service_spec.rb +1 -1
  202. data/spec/functional/resource/insserv_spec.rb +1 -1
  203. data/spec/functional/resource/user/dscl_spec.rb +1 -1
  204. data/spec/functional/resource/user/mac_user_spec.rb +1 -1
  205. data/spec/functional/resource/windows_task_spec.rb +13 -13
  206. data/spec/functional/version_spec.rb +3 -3
  207. data/spec/integration/client/client_spec.rb +4 -4
  208. data/spec/integration/client/exit_code_spec.rb +3 -2
  209. data/spec/integration/client/ipv6_spec.rb +1 -1
  210. data/spec/integration/knife/{config_list_profiles_spec.rb → config_list_spec.rb} +30 -29
  211. data/spec/integration/knife/{config_get_spec.rb → config_show_spec.rb} +3 -3
  212. data/spec/integration/knife/{config_use_profile_spec.rb → config_use_spec.rb} +53 -10
  213. data/spec/integration/knife/cookbook_api_ipv6_spec.rb +1 -1
  214. data/spec/integration/ohai/ohai_spec.rb +61 -0
  215. data/spec/integration/recipes/remote_directory.rb +1 -1
  216. data/spec/integration/solo/solo_spec.rb +5 -5
  217. data/spec/spec_helper.rb +6 -3
  218. data/spec/stress/win32/file_spec.rb +1 -1
  219. data/spec/support/chef_helpers.rb +2 -2
  220. data/spec/support/matchers/leak.rb +2 -2
  221. data/spec/support/platform_helpers.rb +16 -34
  222. data/spec/support/shared/functional/securable_resource.rb +108 -27
  223. data/spec/support/shared/functional/win32_service.rb +1 -1
  224. data/spec/support/shared/unit/application_dot_d.rb +5 -3
  225. data/spec/tiny_server.rb +0 -1
  226. data/spec/unit/application/client_spec.rb +2 -2
  227. data/spec/unit/application/exit_code_spec.rb +10 -0
  228. data/spec/unit/application_spec.rb +4 -6
  229. data/spec/unit/chef_fs/parallelizer_spec.rb +5 -1
  230. data/spec/unit/chef_fs/path_util_spec.rb +1 -1
  231. data/spec/unit/cookbook/synchronizer_spec.rb +2 -2
  232. data/spec/unit/cookbook_spec.rb +2 -2
  233. data/spec/unit/data_collector/config_validation_spec.rb +208 -0
  234. data/spec/unit/data_collector_spec.rb +0 -113
  235. data/spec/unit/dsl/declare_resource_spec.rb +1 -1
  236. data/spec/unit/file_access_control_spec.rb +1 -1
  237. data/spec/unit/knife/bootstrap_spec.rb +6 -6
  238. data/spec/unit/knife/core/ui_spec.rb +1 -0
  239. data/spec/unit/knife/ssh_spec.rb +2 -2
  240. data/spec/unit/lwrp_spec.rb +3 -3
  241. data/spec/unit/mixin/deep_merge_spec.rb +15 -0
  242. data/spec/unit/mixin/openssl_helper_spec.rb +1 -1
  243. data/spec/unit/mixin/powershell_exec_spec.rb +1 -1
  244. data/spec/unit/mixin/securable_spec.rb +2 -2
  245. data/spec/unit/node/immutable_collections_spec.rb +2 -2
  246. data/spec/unit/provider/mount/linux_spec.rb +97 -0
  247. data/spec/unit/provider/package/chocolatey_spec.rb +1 -1
  248. data/spec/unit/provider/package/powershell_spec.rb +1 -1
  249. data/spec/unit/provider/package/rubygems_spec.rb +4 -1
  250. data/spec/unit/provider/route_spec.rb +0 -2
  251. data/spec/unit/recipe_spec.rb +1 -1
  252. data/spec/unit/resource/chef_client_cron_spec.rb +35 -14
  253. data/spec/unit/resource/chef_client_launchd_spec.rb +127 -0
  254. data/spec/unit/resource/chef_client_systemd_timer_spec.rb +36 -1
  255. data/spec/unit/resource/chef_client_trusted_certificate_spec.rb +54 -0
  256. data/spec/unit/resource/launchd_spec.rb +8 -0
  257. data/spec/unit/resource/osx_profile_spec.rb +67 -1
  258. data/spec/unit/resource/rhsm_register_spec.rb +56 -18
  259. data/spec/unit/resource/windows_uac_spec.rb +1 -1
  260. data/spec/unit/resource/windows_user_privilege_spec.rb +55 -0
  261. data/spec/unit/run_lock_spec.rb +5 -1
  262. data/spec/unit/runner_spec.rb +1 -2
  263. data/spec/unit/shell/shell_ext_spec.rb +46 -3
  264. data/spec/unit/shell/shell_session_spec.rb +35 -64
  265. data/spec/unit/shell_spec.rb +16 -19
  266. data/spec/unit/train_transport_spec.rb +14 -13
  267. data/spec/unit/util/selinux_spec.rb +2 -0
  268. data/tasks/rspec.rb +0 -2
  269. metadata +41 -17
  270. data/lib/chef/dist.rb +0 -68
  271. data/spec/integration/knife/config_get_profile_spec.rb +0 -114
@@ -42,7 +42,7 @@ shared_context "using Win32::Service" do
42
42
  service_name: "spec-service",
43
43
  service_display_name: "Spec Test Service",
44
44
  service_description: "Service for testing Chef::Application::WindowsServiceManager.",
45
- service_file_path: File.expand_path(File.join(File.dirname(__FILE__), "../../platforms/win32/spec_service.rb")),
45
+ service_file_path: File.expand_path(File.join(__dir__, "../../platforms/win32/spec_service.rb")),
46
46
  delayed_start: true,
47
47
  }
48
48
  end
@@ -33,14 +33,16 @@ shared_examples_for "an application that loads a dot d" do
33
33
  # make sure that we are correctly globbing.
34
34
  let(:client_d_dir) do
35
35
  Chef::Util::PathHelper.cleanpath(
36
- File.join(File.dirname(__FILE__), "../../../data/client.d_00")
36
+ File.join(__dir__, "../../../data/client.d_00")
37
37
  )
38
38
  end
39
39
 
40
40
  it "loads the configuration in order" do
41
+ etc_chef_client_rb = Chef::Config.platform_specific_path("#{ChefConfig::Config.etc_chef_dir}/client.rb")
41
42
  expect(IO).to receive(:read).with(Pathname.new("#{client_d_dir}/00-foo.rb").cleanpath.to_s).and_return("foo 0")
42
43
  expect(IO).to receive(:read).with(Pathname.new("#{client_d_dir}/01-bar.rb").cleanpath.to_s).and_return("bar 0")
43
44
  expect(IO).to receive(:read).with(Pathname.new("#{client_d_dir}/02-strings.rb").cleanpath.to_s).and_return("strings 0")
45
+ allow(app).to receive(:apply_config).with("", etc_chef_client_rb) # for chef-client managed nodes running this spec
44
46
  expect(app).to receive(:apply_config).with("foo 0", Pathname.new("#{client_d_dir}/00-foo.rb").cleanpath.to_s).and_call_original.ordered
45
47
  expect(app).to receive(:apply_config).with("bar 0", Pathname.new("#{client_d_dir}/01-bar.rb").cleanpath.to_s).and_call_original.ordered
46
48
  expect(app).to receive(:apply_config).with("strings 0", Pathname.new("#{client_d_dir}/02-strings.rb").cleanpath.to_s).and_call_original.ordered
@@ -51,7 +53,7 @@ shared_examples_for "an application that loads a dot d" do
51
53
  context "when client_d_dir is set to a directory without configuration" do
52
54
  let(:client_d_dir) do
53
55
  Chef::Util::PathHelper.cleanpath(
54
- File.join(File.dirname(__FILE__), "../../data/client.d_01")
56
+ File.join(__dir__, "../../data/client.d_01")
55
57
  )
56
58
  end
57
59
 
@@ -69,7 +71,7 @@ shared_examples_for "an application that loads a dot d" do
69
71
  # foo.rb as a directory should be ignored
70
72
  let(:client_d_dir) do
71
73
  Chef::Util::PathHelper.cleanpath(
72
- File.join(File.dirname(__FILE__), "../../data/client.d_02")
74
+ File.join(__dir__, "../../data/client.d_02")
73
75
  )
74
76
  end
75
77
 
@@ -19,7 +19,6 @@
19
19
  require "webrick"
20
20
  require "webrick/https"
21
21
  require "rack"
22
- require "thread"
23
22
  require "singleton"
24
23
  require "open-uri"
25
24
  require "chef/config"
@@ -192,7 +192,7 @@ describe Chef::Application::Client, "reconfigure" do
192
192
 
193
193
  context "with an empty value" do
194
194
  it "should terminate with message" do
195
- expect(Chef::Application).to receive(:fatal!).with('Unparsable config option ""').and_raise("so ded")
195
+ expect(Chef::Application).to receive(:fatal!).with('Unparsable config option ""', ChefConfig::ConfigurationError.new).and_raise("so ded")
196
196
  ARGV.replace(["--config-option", ""])
197
197
  expect { app.reconfigure }.to raise_error "so ded"
198
198
  end
@@ -200,7 +200,7 @@ describe Chef::Application::Client, "reconfigure" do
200
200
 
201
201
  context "with an invalid value" do
202
202
  it "should terminate with message" do
203
- expect(Chef::Application).to receive(:fatal!).with('Unparsable config option "asdf"').and_raise("so ded")
203
+ expect(Chef::Application).to receive(:fatal!).with('Unparsable config option "asdf"', ChefConfig::ConfigurationError.new).and_raise("so ded")
204
204
  ARGV.replace(["--config-option", "asdf"])
205
205
  expect { app.reconfigure }.to raise_error "so ded"
206
206
  end
@@ -61,6 +61,10 @@ describe Chef::Application::ExitCode do
61
61
  expect(valid_rfc_exit_codes.include?(41)).to eq(true)
62
62
  end
63
63
 
64
+ it "validates a CONFIG_FAILURE return code of 43" do
65
+ expect(valid_rfc_exit_codes.include?(43)).to eq(true)
66
+ end
67
+
64
68
  it "validates a CLIENT_UPGRADED return code of 213" do
65
69
  expect(valid_rfc_exit_codes.include?(213)).to eq(true)
66
70
  end
@@ -113,6 +117,12 @@ describe Chef::Application::ExitCode do
113
117
  expect(exit_codes.normalize_exit_code(runtime_error)).to eq(37)
114
118
  end
115
119
 
120
+ it "returns CONFIG_FAILURE when a configuration exception is specified" do
121
+ config_error = Chef::Exceptions::ConfigurationError.new("BOOM")
122
+ runtime_error = Chef::Exceptions::RunFailedWrappingError.new(config_error)
123
+ expect(exit_codes.normalize_exit_code(runtime_error)).to eq(43)
124
+ end
125
+
116
126
  it "returns CLIENT_UPGRADED when the client was upgraded during converge" do
117
127
  client_upgraded_error = Chef::Exceptions::ClientUpgraded.new("BOOM")
118
128
  runtime_error = Chef::Exceptions::RunFailedWrappingError.new(client_upgraded_error)
@@ -491,16 +491,14 @@ describe Chef::Application do
491
491
 
492
492
  describe "configuration errors" do
493
493
  before do
494
- expect(Process).to receive(:exit)
494
+ allow(Process).to receive(:exit).and_return(true)
495
495
  end
496
496
 
497
497
  def raises_informative_fatals_on_configure_chef
498
498
  config_file_regexp = Regexp.new @app.config[:config_file]
499
- expect(Chef::Log).to receive(:fatal)
500
- .with(/Configuration error/)
501
- expect(Chef::Log).to receive(:fatal)
502
- .with(config_file_regexp)
503
- .at_least(1).times
499
+ expect(Chef::Log).to receive(:fatal).with(/Configuration error/)
500
+ expect(Chef::Log).to receive(:fatal).with(config_file_regexp)
501
+ expect(Process).to receive(:exit).with(43).and_return(true)
504
502
  @app.configure_chef
505
503
  end
506
504
 
@@ -1,7 +1,11 @@
1
1
  require "spec_helper"
2
2
  require "chef/chef_fs/parallelizer"
3
3
 
4
- describe Chef::ChefFS::Parallelizer do
4
+ # FIXME: these are disabled on MacOS due to timing issues in our anka build cluster
5
+ # these issues should be fixed and the tests should be re-eenabled. If we are getting
6
+ # omnibus test phases on mac tests which are reasonable and not ~3 hours long, then the
7
+ # condition to avoid this testing on macs can be deleted
8
+ describe Chef::ChefFS::Parallelizer, :not_supported_on_macos do
5
9
  before :each do
6
10
  @start_time = Time.now
7
11
  end
@@ -61,7 +61,7 @@ describe Chef::ChefFS::PathUtils do
61
61
  end
62
62
 
63
63
  context "invoking realest_path" do
64
- let(:good_path) { File.dirname(__FILE__) }
64
+ let(:good_path) { __dir__ }
65
65
  let(:parent_path) { File.dirname(good_path) }
66
66
 
67
67
  it "handles paths with no wildcards or globs" do
@@ -1,7 +1,7 @@
1
1
  require "spec_helper"
2
2
  require "chef/cookbook/synchronizer"
3
3
  require "chef/cookbook_version"
4
- require "chef/dist"
4
+ require "chef-utils/dist"
5
5
 
6
6
  describe Chef::CookbookCacheCleaner do
7
7
  describe "when cleaning up unused cookbook components" do
@@ -50,7 +50,7 @@ describe Chef::CookbookCacheCleaner do
50
50
  cleaner.cleanup_file_cache
51
51
  end
52
52
 
53
- it "does not remove anything on #{Chef::Dist::SOLOEXEC}" do
53
+ it "does not remove anything on #{ChefUtils::Dist::Solo::EXEC}" do
54
54
  Chef::Config[:solo_legacy_mode] = true
55
55
  allow(cleaner.cache).to receive(:find).and_return(%w{cookbooks/valid1/recipes/default.rb cookbooks/valid2/recipes/default.rb})
56
56
  expect(cleaner.cache).not_to receive(:delete)
@@ -19,10 +19,10 @@
19
19
  require "spec_helper"
20
20
 
21
21
  describe Chef::CookbookVersion do
22
- COOKBOOK_PATH = File.expand_path(File.join(File.dirname(__FILE__), "..", "data", "cookbooks", "openldap"))
22
+ COOKBOOK_PATH = File.expand_path(File.join(__dir__, "..", "data", "cookbooks", "openldap"))
23
23
 
24
24
  before(:each) do
25
- @cookbook_repo = File.expand_path(File.join(File.dirname(__FILE__), "..", "data", "cookbooks"))
25
+ @cookbook_repo = File.expand_path(File.join(__dir__, "..", "data", "cookbooks"))
26
26
  cl = Chef::CookbookLoader.new(@cookbook_repo)
27
27
  cl.load_cookbooks
28
28
  @cookbook_collection = Chef::CookbookCollection.new(cl)
@@ -0,0 +1,208 @@
1
+ #
2
+ # Copyright:: Copyright (c) Chef Software Inc.
3
+ # License:: Apache License, Version 2.0
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+ #
17
+
18
+ require "spec_helper"
19
+ require "chef/data_collector/config_validation"
20
+
21
+ describe Chef::DataCollector::ConfigValidation do
22
+ describe "#should_be_enabled?" do
23
+ shared_examples_for "a solo-like run" do
24
+ it "is disabled in solo-legacy without a data_collector url and token" do
25
+ expect(Chef::DataCollector::ConfigValidation.should_be_enabled?).to be false
26
+ end
27
+
28
+ it "is disabled in solo-legacy with only a url" do
29
+ Chef::Config[:data_collector][:server_url] = "https://www.esa.local/ariane5"
30
+ expect(Chef::DataCollector::ConfigValidation.should_be_enabled?).to be false
31
+ end
32
+
33
+ it "is disabled in solo-legacy with only a token" do
34
+ Chef::Config[:data_collector][:token] = "admit_one"
35
+ expect(Chef::DataCollector::ConfigValidation.should_be_enabled?).to be false
36
+ end
37
+
38
+ it "is enabled in solo-legacy with both a token and url" do
39
+ Chef::Config[:data_collector][:server_url] = "https://www.esa.local/ariane5"
40
+ Chef::Config[:data_collector][:token] = "no_cash_value"
41
+ expect(Chef::DataCollector::ConfigValidation.should_be_enabled?).to be true
42
+ end
43
+
44
+ it "is enabled in solo-legacy with only an output location to a file" do
45
+ Chef::Config[:data_collector][:output_locations] = { files: [ "/always/be/counting/down" ] }
46
+ expect(Chef::DataCollector::ConfigValidation.should_be_enabled?).to be true
47
+ end
48
+
49
+ it "is disabled in solo-legacy with only an output location to a uri" do
50
+ Chef::Config[:data_collector][:output_locations] = { urls: [ "https://esa.local/ariane5" ] }
51
+ expect(Chef::DataCollector::ConfigValidation.should_be_enabled?).to be false
52
+ end
53
+
54
+ it "is enabled in solo-legacy with only an output location to a uri with a token" do
55
+ Chef::Config[:data_collector][:output_locations] = { urls: [ "https://esa.local/ariane5" ] }
56
+ Chef::Config[:data_collector][:token] = "good_for_one_fare"
57
+ expect(Chef::DataCollector::ConfigValidation.should_be_enabled?).to be true
58
+ end
59
+
60
+ it "is enabled in solo-legacy when the mode is :solo" do
61
+ Chef::Config[:data_collector][:server_url] = "https://www.esa.local/ariane5"
62
+ Chef::Config[:data_collector][:token] = "non_redeemable"
63
+ Chef::Config[:data_collector][:mode] = :solo
64
+ expect(Chef::DataCollector::ConfigValidation.should_be_enabled?).to be true
65
+ end
66
+
67
+ it "is enabled in solo-legacy when the mode is :both" do
68
+ Chef::Config[:data_collector][:server_url] = "https://www.esa.local/ariane5"
69
+ Chef::Config[:data_collector][:token] = "non_negotiable"
70
+ Chef::Config[:data_collector][:mode] = :both
71
+ expect(Chef::DataCollector::ConfigValidation.should_be_enabled?).to be true
72
+ end
73
+
74
+ it "is disabled in solo-legacy when the mode is :client" do
75
+ Chef::Config[:data_collector][:server_url] = "https://www.esa.local/ariane5"
76
+ Chef::Config[:data_collector][:token] = "NYCTA"
77
+ Chef::Config[:data_collector][:mode] = :client
78
+ expect(Chef::DataCollector::ConfigValidation.should_be_enabled?).to be false
79
+ end
80
+
81
+ it "is disabled in solo-legacy mode when the mode is :nonsense" do
82
+ Chef::Config[:data_collector][:server_url] = "https://www.esa.local/ariane5"
83
+ Chef::Config[:data_collector][:token] = "MTA"
84
+ Chef::Config[:data_collector][:mode] = :nonsense
85
+ expect(Chef::DataCollector::ConfigValidation.should_be_enabled?).to be false
86
+ end
87
+ end
88
+
89
+ it "by default it is enabled" do
90
+ expect(Chef::DataCollector::ConfigValidation.should_be_enabled?).to be true
91
+ end
92
+
93
+ it "is disabled in why-run" do
94
+ Chef::Config[:why_run] = true
95
+ expect(Chef::DataCollector::ConfigValidation.should_be_enabled?).to be false
96
+ end
97
+
98
+ describe "a solo legacy run" do
99
+ before(:each) do
100
+ Chef::Config[:solo_legacy_mode] = true
101
+ end
102
+
103
+ it_behaves_like "a solo-like run"
104
+ end
105
+
106
+ describe "a local mode run" do
107
+ before(:each) do
108
+ Chef::Config[:local_mode] = true
109
+ end
110
+
111
+ it_behaves_like "a solo-like run"
112
+ end
113
+
114
+ it "is enabled in client mode when the mode is :both" do
115
+ Chef::Config[:data_collector][:mode] = :both
116
+ expect(Chef::DataCollector::ConfigValidation.should_be_enabled?).to be true
117
+ end
118
+
119
+ it "is disabled in client mode when the mode is :solo" do
120
+ Chef::Config[:data_collector][:mode] = :solo
121
+ expect(Chef::DataCollector::ConfigValidation.should_be_enabled?).to be false
122
+ end
123
+
124
+ it "is disabled in client mode when the mode is :nonsense" do
125
+ Chef::Config[:data_collector][:mode] = :nonsense
126
+ expect(Chef::DataCollector::ConfigValidation.should_be_enabled?).to be false
127
+ end
128
+
129
+ it "is still enabled if you set a token in client mode" do
130
+ Chef::Config[:data_collector][:token] = "good_for_one_ride"
131
+ expect(Chef::DataCollector::ConfigValidation.should_be_enabled?).to be true
132
+ end
133
+ end
134
+
135
+ describe "validate_server_url!" do
136
+ it "with valid server url" do
137
+ Chef::Config[:data_collector][:server_url] = "https://www.esa.local/ariane5"
138
+ expect(Chef::DataCollector::ConfigValidation.validate_server_url!).to be_nil
139
+ end
140
+
141
+ it "with invalid server URL" do
142
+ Chef::Config[:data_collector][:server_url] = "not valid URL"
143
+ expect { Chef::DataCollector::ConfigValidation.validate_server_url! }.to raise_error(Chef::Exceptions::ConfigurationError,
144
+ "Chef::Config[:data_collector][:server_url] (not valid URL) is not a valid URI.")
145
+ end
146
+
147
+ it "with invalid server URL without host" do
148
+ Chef::Config[:data_collector][:server_url] = "no-host"
149
+ expect { Chef::DataCollector::ConfigValidation.validate_server_url! }.to raise_error(Chef::Exceptions::ConfigurationError,
150
+ "Chef::Config[:data_collector][:server_url] (no-host) is a URI with no host. Please supply a valid URL.")
151
+ end
152
+
153
+ it "skip validation if output_locations is set" do
154
+ Chef::Config[:data_collector][:output_locations] = { files: ["https://www.esa.local/ariane5"] }
155
+ expect(Chef::DataCollector::ConfigValidation.validate_server_url!).to be_nil
156
+ end
157
+
158
+ it "skip validation if output_locations & server_url both are set" do
159
+ Chef::Config[:data_collector][:server_url] = "https://www.esa.local/ariane5"
160
+ Chef::Config[:data_collector][:output_locations] = { files: ["https://www.esa.local/ariane5"] }
161
+ expect(Chef::DataCollector::ConfigValidation.validate_server_url!).to be_nil
162
+ end
163
+ end
164
+
165
+ describe "validate_output_locations!" do
166
+ it "with nil or not set skip validation" do
167
+ Chef::Config[:data_collector][:output_locations] = nil
168
+ expect(Chef::DataCollector::ConfigValidation.validate_output_locations!).to be_nil
169
+ end
170
+
171
+ it "with empty value raise validation error" do
172
+ Chef::Config[:data_collector][:output_locations] = {}
173
+ expect { Chef::DataCollector::ConfigValidation.validate_output_locations! }.to raise_error(Chef::Exceptions::ConfigurationError,
174
+ "Chef::Config[:data_collector][:output_locations] is empty. Please supply an hash of valid URLs and / or local file paths.")
175
+ end
176
+
177
+ it "with valid URLs options" do
178
+ Chef::Config[:data_collector][:output_locations] = { urls: ["https://www.esa.local/ariane5/data-collector"] }
179
+ expect { Chef::DataCollector::ConfigValidation.validate_output_locations! }.not_to raise_error
180
+ end
181
+
182
+ context "output_locations contains files" do
183
+ let(:file_path) { "/tmp/client-runs.txt" }
184
+
185
+ before(:each) do
186
+ allow(File).to receive(:exist?).with(file_path).and_return(true)
187
+ allow(File).to receive(:readable?).with(file_path).and_return(true)
188
+ allow(File).to receive(:writable?).with(file_path).and_return(true)
189
+ allow(File).to receive(:expand_path).with(file_path).and_return(file_path)
190
+ end
191
+
192
+ it "with valid files options" do
193
+ Chef::Config[:data_collector][:output_locations] = { files: [file_path] }
194
+ expect { Chef::DataCollector::ConfigValidation.validate_output_locations! }.not_to raise_error
195
+ end
196
+
197
+ it "with valid files & URLs options" do
198
+ Chef::Config[:data_collector][:output_locations] = { urls: ["https://www.esa.local/ariane5/data-collector"], files: [file_path] }
199
+ expect { Chef::DataCollector::ConfigValidation.validate_output_locations! }.not_to raise_error
200
+ end
201
+
202
+ it "with valid files options & String location value" do
203
+ Chef::Config[:data_collector][:output_locations] = { files: file_path }
204
+ expect { Chef::DataCollector::ConfigValidation.validate_output_locations! }.not_to raise_error
205
+ end
206
+ end
207
+ end
208
+ end
@@ -296,119 +296,6 @@ describe Chef::DataCollector do
296
296
  end
297
297
  end
298
298
 
299
- describe "#should_be_enabled?" do
300
- shared_examples_for "a solo-like run" do
301
- it "is disabled in solo-legacy without a data_collector url and token" do
302
- expect(Chef::DataCollector::ConfigValidation.should_be_enabled?).to be false
303
- end
304
-
305
- it "is disabled in solo-legacy with only a url" do
306
- Chef::Config[:data_collector][:server_url] = "https://www.esa.local/ariane5"
307
- expect(Chef::DataCollector::ConfigValidation.should_be_enabled?).to be false
308
- end
309
-
310
- it "is disabled in solo-legacy with only a token" do
311
- Chef::Config[:data_collector][:token] = "admit_one"
312
- expect(Chef::DataCollector::ConfigValidation.should_be_enabled?).to be false
313
- end
314
-
315
- it "is enabled in solo-legacy with both a token and url" do
316
- Chef::Config[:data_collector][:server_url] = "https://www.esa.local/ariane5"
317
- Chef::Config[:data_collector][:token] = "no_cash_value"
318
- expect(Chef::DataCollector::ConfigValidation.should_be_enabled?).to be true
319
- end
320
-
321
- it "is enabled in solo-legacy with only an output location to a file" do
322
- Chef::Config[:data_collector][:output_locations] = { files: [ "/always/be/counting/down" ] }
323
- expect(Chef::DataCollector::ConfigValidation.should_be_enabled?).to be true
324
- end
325
-
326
- it "is disabled in solo-legacy with only an output location to a uri" do
327
- Chef::Config[:data_collector][:output_locations] = { urls: [ "https://esa.local/ariane5" ] }
328
- expect(Chef::DataCollector::ConfigValidation.should_be_enabled?).to be false
329
- end
330
-
331
- it "is enabled in solo-legacy with only an output location to a uri with a token" do
332
- Chef::Config[:data_collector][:output_locations] = { urls: [ "https://esa.local/ariane5" ] }
333
- Chef::Config[:data_collector][:token] = "good_for_one_fare"
334
- expect(Chef::DataCollector::ConfigValidation.should_be_enabled?).to be true
335
- end
336
-
337
- it "is enabled in solo-legacy when the mode is :solo" do
338
- Chef::Config[:data_collector][:server_url] = "https://www.esa.local/ariane5"
339
- Chef::Config[:data_collector][:token] = "non_redeemable"
340
- Chef::Config[:data_collector][:mode] = :solo
341
- expect(Chef::DataCollector::ConfigValidation.should_be_enabled?).to be true
342
- end
343
-
344
- it "is enabled in solo-legacy when the mode is :both" do
345
- Chef::Config[:data_collector][:server_url] = "https://www.esa.local/ariane5"
346
- Chef::Config[:data_collector][:token] = "non_negotiable"
347
- Chef::Config[:data_collector][:mode] = :both
348
- expect(Chef::DataCollector::ConfigValidation.should_be_enabled?).to be true
349
- end
350
-
351
- it "is disabled in solo-legacy when the mode is :client" do
352
- Chef::Config[:data_collector][:server_url] = "https://www.esa.local/ariane5"
353
- Chef::Config[:data_collector][:token] = "NYCTA"
354
- Chef::Config[:data_collector][:mode] = :client
355
- expect(Chef::DataCollector::ConfigValidation.should_be_enabled?).to be false
356
- end
357
-
358
- it "is disabled in solo-legacy mode when the mode is :nonsense" do
359
- Chef::Config[:data_collector][:server_url] = "https://www.esa.local/ariane5"
360
- Chef::Config[:data_collector][:token] = "MTA"
361
- Chef::Config[:data_collector][:mode] = :nonsense
362
- expect(Chef::DataCollector::ConfigValidation.should_be_enabled?).to be false
363
- end
364
- end
365
-
366
- it "by default it is enabled" do
367
- expect(Chef::DataCollector::ConfigValidation.should_be_enabled?).to be true
368
- end
369
-
370
- it "is disabled in why-run" do
371
- Chef::Config[:why_run] = true
372
- expect(Chef::DataCollector::ConfigValidation.should_be_enabled?).to be false
373
- end
374
-
375
- describe "a solo legacy run" do
376
- before(:each) do
377
- Chef::Config[:solo_legacy_mode] = true
378
- end
379
-
380
- it_behaves_like "a solo-like run"
381
- end
382
-
383
- describe "a local mode run" do
384
- before(:each) do
385
- Chef::Config[:local_mode] = true
386
- end
387
-
388
- it_behaves_like "a solo-like run"
389
- end
390
-
391
- it "is enabled in client mode when the mode is :both" do
392
- Chef::Config[:data_collector][:mode] = :both
393
- expect(Chef::DataCollector::ConfigValidation.should_be_enabled?).to be true
394
- end
395
-
396
- it "is disabled in client mode when the mode is :solo" do
397
- Chef::Config[:data_collector][:mode] = :solo
398
- expect(Chef::DataCollector::ConfigValidation.should_be_enabled?).to be false
399
- end
400
-
401
- it "is disabled in client mode when the mode is :nonsense" do
402
- Chef::Config[:data_collector][:mode] = :nonsense
403
- expect(Chef::DataCollector::ConfigValidation.should_be_enabled?).to be false
404
- end
405
-
406
- it "is still enabled if you set a token in client mode" do
407
- Chef::Config[:data_collector][:token] = "good_for_one_ride"
408
- expect(Chef::DataCollector::ConfigValidation.should_be_enabled?).to be true
409
- end
410
- end
411
-
412
299
  describe "when the run fails during node load" do
413
300
  let(:exception) { Exception.new("imperial to metric conversion error") }
414
301
  let(:error_description) { Chef::Formatters::ErrorMapper.registration_failed(node_name, exception, Chef::Config).for_json }