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
@@ -17,7 +17,7 @@ require_relative "../cookbook_version"
17
17
  require_relative "chefignore"
18
18
  require_relative "metadata"
19
19
  require_relative "../util/path_helper"
20
- require "find"
20
+ require "find" unless defined?(Find.find)
21
21
 
22
22
  class Chef
23
23
  class Cookbook
@@ -17,7 +17,7 @@ require_relative "../client"
17
17
  require_relative "../util/threaded_job_queue"
18
18
  require_relative "../server_api"
19
19
  require "singleton" unless defined?(Singleton)
20
- require_relative "../dist"
20
+ require "chef-utils/dist" unless defined?(ChefUtils::Dist)
21
21
 
22
22
  class Chef
23
23
 
@@ -65,7 +65,7 @@ class Chef
65
65
  # manifest.
66
66
  cache.find(File.join(%w{cookbooks ** {*,.*}})).each do |cache_filename|
67
67
  unless @valid_cache_entries[cache_filename]
68
- Chef::Log.info("Removing #{cache_filename} from the cache; it is no longer needed by #{Chef::Dist::CLIENT}.")
68
+ Chef::Log.info("Removing #{cache_filename} from the cache; it is no longer needed by #{ChefUtils::Dist::Infra::CLIENT}.")
69
69
  cache.delete(cache_filename)
70
70
  end
71
71
  end
@@ -18,11 +18,17 @@
18
18
  # limitations under the License.
19
19
  #
20
20
 
21
- require "uri" unless defined?(URI)
22
- require "net/http" unless defined?(Net::HTTP)
23
- require "mixlib/authentication/signedheaderauth"
24
- require "openssl" unless defined?(OpenSSL)
25
- require_relative "dist"
21
+ autoload :URI, "uri"
22
+ module Net
23
+ autoload :HTTP, File.expand_path("monkey_patches/net_http", __dir__)
24
+ end
25
+ autoload :OpenSSL, "openssl"
26
+ module Mixlib
27
+ module Authentication
28
+ autoload :SignedHeaderAuth, "mixlib/authentication/signedheaderauth"
29
+ end
30
+ end
31
+ require "chef-utils/dist" unless defined?(ChefUtils::Dist)
26
32
 
27
33
  class Chef
28
34
  # == Chef::CookbookSiteStreamingUploader
@@ -37,7 +43,7 @@ class Chef
37
43
  class << self
38
44
 
39
45
  def create_build_dir(cookbook)
40
- tmp_cookbook_path = Tempfile.new("#{Chef::Dist::SHORT}-#{cookbook.name}-build")
46
+ tmp_cookbook_path = Tempfile.new("#{ChefUtils::Dist::Infra::SHORT}-#{cookbook.name}-build")
41
47
  tmp_cookbook_path.close
42
48
  tmp_cookbook_dir = tmp_cookbook_path.path
43
49
  File.unlink(tmp_cookbook_dir)
@@ -225,11 +231,7 @@ class Chef
225
231
  @part_no += 1
226
232
  @part_offset = 0
227
233
  next_part = read(how_much_next_part)
228
- result = current_part + if next_part
229
- next_part
230
- else
231
- ""
232
- end
234
+ result = current_part + (next_part || "")
233
235
  else
234
236
  @part_offset += how_much_current_part
235
237
  result = current_part
@@ -1,5 +1,5 @@
1
1
 
2
- require "set" unless defined?(Set)
2
+ autoload :Set, "set"
3
3
  require_relative "exceptions"
4
4
  require_relative "knife/cookbook_metadata"
5
5
  require_relative "digester"
@@ -21,12 +21,12 @@
21
21
  require_relative "server_api"
22
22
  require_relative "http/simple_json"
23
23
  require_relative "event_dispatch/base"
24
- require "set" unless defined?(Set)
24
+ autoload :Set, "set"
25
25
  require_relative "data_collector/run_end_message"
26
26
  require_relative "data_collector/run_start_message"
27
27
  require_relative "data_collector/config_validation"
28
28
  require_relative "data_collector/error_handlers"
29
- require_relative "dist"
29
+ require "chef-utils/dist" unless defined?(ChefUtils::Dist)
30
30
 
31
31
  class Chef
32
32
  class DataCollector
@@ -197,7 +197,7 @@ class Chef
197
197
  else
198
198
  if code == "404"
199
199
  # Make the message non-scary for folks who don't have automate:
200
- msg << " (This is normal if you do not have #{Chef::Dist::AUTOMATE})"
200
+ msg << " (This is normal if you do not have #{ChefUtils::Dist::Automate::PRODUCT})"
201
201
  Chef::Log.debug(msg)
202
202
  else
203
203
  Chef::Log.warn(msg)
@@ -212,8 +212,9 @@ class Chef
212
212
  def send_to_output_locations(message)
213
213
  return unless Chef::Config[:data_collector][:output_locations]
214
214
 
215
+ Chef::DataCollector::ConfigValidation.validate_output_locations!
215
216
  Chef::Config[:data_collector][:output_locations].each do |type, locations|
216
- locations.each do |location|
217
+ Array(locations).each do |location|
217
218
  send_to_file_location(location, message) if type == :files
218
219
  send_to_http_location(location, message) if type == :urls
219
220
  end
@@ -226,7 +227,7 @@ class Chef
226
227
  # @param message [Hash] the message to render as JSON
227
228
  #
228
229
  def send_to_file_location(file_name, message)
229
- File.open(file_name, "a") do |fh|
230
+ File.open(File.expand_path(file_name), "a") do |fh|
230
231
  fh.puts Chef::JSONCompat.to_json(message, validate_utf8: false)
231
232
  end
232
233
  end
@@ -16,6 +16,7 @@
16
16
  #
17
17
 
18
18
  require "uri" unless defined?(URI)
19
+ require "chef-utils/dist" unless defined?(ChefUtils::Dist)
19
20
 
20
21
  class Chef
21
22
  class DataCollector
@@ -46,14 +47,14 @@ class Chef
46
47
  return unless output_locations
47
48
 
48
49
  # but deliberately setting an empty output_location we consider to be an error (XXX: but should we?)
49
- if output_locations.empty?
50
+ unless valid_hash_with_keys?(output_locations, :urls, :files)
50
51
  raise Chef::Exceptions::ConfigurationError,
51
52
  "Chef::Config[:data_collector][:output_locations] is empty. Please supply an hash of valid URLs and / or local file paths."
52
53
  end
53
54
 
54
55
  # loop through all the types and locations and validate each one-by-one
55
56
  output_locations.each do |type, locations|
56
- locations.each do |location|
57
+ Array(locations).each do |location|
57
58
  validate_url!(location) if type == :urls
58
59
  validate_file!(location) if type == :files
59
60
  end
@@ -86,15 +87,20 @@ class Chef
86
87
  false
87
88
  when running_mode == :client && Chef::Config[:data_collector][:token]
88
89
  Chef::Log.warn("Data collector token authentication is not recommended for client-server mode. " \
89
- "Please upgrade #{Chef::Dist::SERVER_PRODUCT} to 12.11 or later and remove the token from your config file " \
90
+ "Please upgrade #{ChefUtils::Dist::Server::PRODUCT} to 12.11 or later and remove the token from your config file " \
90
91
  "to use key based authentication instead")
91
92
  true
92
- when Chef::Config[:data_collector][:output_locations] && Chef::Config[:data_collector][:output_locations][:files] && !Chef::Config[:data_collector][:output_locations][:files].empty?
93
+ when Chef::Config[:data_collector][:output_locations] && !valid_hash_with_keys?(Chef::Config[:data_collector][:output_locations], :urls)
93
94
  # we can run fine to a file without a token, even in solo mode.
95
+ unless valid_hash_with_keys?(Chef::Config[:data_collector][:output_locations], :files)
96
+ raise Chef::Exceptions::ConfigurationError,
97
+ "Chef::Config[:data_collector][:output_locations] is empty. Please supply an hash of valid URLs and / or local file paths."
98
+ end
99
+
94
100
  true
95
101
  when running_mode == :solo && !Chef::Config[:data_collector][:token]
96
102
  # we are in solo mode and are not logging to a file, so must have a token
97
- Chef::Log.trace("Data collector token must be configured to use #{Chef::Dist::AUTOMATE} data collector with #{Chef::Dist::SOLO}")
103
+ Chef::Log.trace("Data collector token must be configured to use #{ChefUtils::Dist::Automate::PRODUCT} data collector with #{ChefUtils::Dist::Solo::PRODUCT}")
98
104
  false
99
105
  else
100
106
  true
@@ -105,16 +111,10 @@ class Chef
105
111
 
106
112
  # validate an output_location file
107
113
  def validate_file!(file)
108
- open(file, "a") {}
109
- rescue Errno::ENOENT
114
+ return true if Chef::Config.path_accessible?(File.expand_path(file))
115
+
110
116
  raise Chef::Exceptions::ConfigurationError,
111
117
  "Chef::Config[:data_collector][:output_locations][:files] contains the location #{file}, which is a non existent file path."
112
- rescue Errno::EACCES
113
- raise Chef::Exceptions::ConfigurationError,
114
- "Chef::Config[:data_collector][:output_locations][:files] contains the location #{file}, which cannot be written to by Chef."
115
- rescue Exception => e
116
- raise Chef::Exceptions::ConfigurationError,
117
- "Chef::Config[:data_collector][:output_locations][:files] contains the location #{file}, which is invalid: #{e.message}."
118
118
  end
119
119
 
120
120
  # validate an output_location url
@@ -125,6 +125,15 @@ class Chef
125
125
  "Chef::Config[:data_collector][:output_locations][:urls] contains the url #{url} which is not valid."
126
126
  end
127
127
 
128
+ # Validate the hash contains at least one of the given keys.
129
+ #
130
+ # @param hash [Hash] the hash to be validated.
131
+ # @param keys [Array] an array of keys to check existence of in the hash.
132
+ # @return [Boolean] true if the hash contains any of the given keys.
133
+ #
134
+ def valid_hash_with_keys?(hash, *keys)
135
+ hash.is_a?(Hash) && keys.any? { |k| hash.key?(k) }
136
+ end
128
137
  end
129
138
  end
130
139
  end
@@ -60,8 +60,8 @@ class Chef
60
60
  "cookbooks" => ( node && node["cookbooks"] ) || {},
61
61
  "policy_name" => node&.policy_name,
62
62
  "policy_group" => node&.policy_group,
63
- "start_time" => run_status.start_time.utc.iso8601,
64
- "end_time" => run_status.end_time.utc.iso8601,
63
+ "start_time" => run_status&.start_time&.utc&.iso8601,
64
+ "end_time" => run_status&.end_time&.utc&.iso8601,
65
65
  "source" => solo_run? ? "chef_solo" : "chef_client",
66
66
  "status" => status,
67
67
  "total_resource_count" => all_action_records(action_collection).count,
@@ -51,7 +51,7 @@ class Chef
51
51
  "organization_name" => organization,
52
52
  "run_id" => run_status&.run_id,
53
53
  "source" => solo_run? ? "chef_solo" : "chef_client",
54
- "start_time" => run_status.start_time.utc.iso8601,
54
+ "start_time" => run_status&.start_time&.utc&.iso8601,
55
55
  }
56
56
  end
57
57
  end
@@ -113,7 +113,7 @@ class Chef
113
113
  # @return [void]
114
114
  def target(id, page = nil)
115
115
  @deprecation_id = id
116
- @doc_page = page || "#{deprecation_key}"
116
+ @doc_page = page || deprecation_key.to_s
117
117
  end
118
118
  end
119
119
  end
@@ -21,12 +21,12 @@ class Chef
21
21
  module Warnings
22
22
 
23
23
  require_relative "../version"
24
- require_relative "../dist"
24
+ require "chef-utils/dist" unless defined?(ChefUtils::Dist)
25
25
 
26
26
  def add_deprecation_warnings_for(method_names)
27
27
  method_names.each do |name|
28
28
  define_method(name) do |*args|
29
- message = "Method '#{name}' of '#{self.class}' is deprecated. It will be removed in #{Chef::Dist::PRODUCT} #{Chef::VERSION.to_i.next}."
29
+ message = "Method '#{name}' of '#{self.class}' is deprecated. It will be removed in #{ChefUtils::Dist::Infra::PRODUCT} #{Chef::VERSION.to_i.next}."
30
30
  message << " Please update your cookbooks accordingly."
31
31
  Chef.deprecated(:internal_api, message)
32
32
  super(*args)
@@ -18,8 +18,8 @@
18
18
  # limitations under the License.
19
19
  #
20
20
 
21
- require "openssl" unless defined?(OpenSSL)
22
- require "digest" unless defined?(Digest)
21
+ autoload :OpenSSL, "openssl"
22
+ autoload :Digest, "digest"
23
23
  require "singleton" unless defined?(Singleton)
24
24
 
25
25
  class Chef
@@ -17,7 +17,7 @@
17
17
  # limitations under the License.
18
18
  #
19
19
 
20
- require "chef-vault"
20
+ autoload :ChefVault, "chef-vault"
21
21
  require_relative "data_query"
22
22
 
23
23
  class Chef
@@ -17,8 +17,8 @@
17
17
  #
18
18
 
19
19
  require_relative "../search/query"
20
- require_relative "../data_bag"
21
- require_relative "../data_bag_item"
20
+ Chef.autoload :DataBag, File.expand_path("../data_bag", __dir__)
21
+ Chef.autoload :DataBagItem, File.expand_path("../data_bag_item", __dir__)
22
22
  require_relative "../encrypted_data_bag_item"
23
23
  require_relative "../encrypted_data_bag_item/check_encrypted"
24
24
 
@@ -16,7 +16,7 @@
16
16
  # limitations under the License.
17
17
  #
18
18
 
19
- require "chef-utils" unless defined?(ChefUtils::CANARY)
19
+ autoload :ChefUtils, "chef-utils"
20
20
  require_relative "../mixin/chef_utils_wiring" unless defined?(Chef::Mixin::ChefUtilsWiring)
21
21
 
22
22
  class Chef
@@ -17,11 +17,9 @@
17
17
  #
18
18
 
19
19
  require_relative "config"
20
- require_relative "data_bag_item"
20
+ Chef.autoload :DataBagItem, File.expand_path("data_bag_item", __dir__)
21
21
  require_relative "encrypted_data_bag_item/decryptor"
22
22
  require_relative "encrypted_data_bag_item/encryptor"
23
- require_relative "dist"
24
- require "open-uri"
25
23
 
26
24
  # An EncryptedDataBagItem represents a read-only data bag item where
27
25
  # all values, except for the value associated with the id key, have
@@ -129,9 +127,10 @@ class Chef::EncryptedDataBagItem
129
127
  end
130
128
 
131
129
  def self.load_secret(path = nil)
130
+ require "open-uri" unless defined?(OpenURI)
132
131
  path ||= Chef::Config[:encrypted_data_bag_secret]
133
132
  unless path
134
- raise ArgumentError, "No secret specified and no secret found at #{Chef::Config.platform_specific_path(Chef::Dist::CONF_DIR + "/encrypted_data_bag_secret")}"
133
+ raise ArgumentError, "No secret specified and no secret found at #{Chef::Config.platform_specific_path(ChefConfig::Config.etc_chef_dir) + "/encrypted_data_bag_secret"}"
135
134
  end
136
135
 
137
136
  secret = case path
@@ -16,10 +16,10 @@
16
16
  # limitations under the License.
17
17
  #
18
18
 
19
- require "yaml" unless defined?(YAML)
19
+ autoload :YAML, "yaml"
20
20
  require_relative "../json_compat"
21
- require "openssl" unless defined?(OpenSSL)
22
- require "base64"
21
+ autoload :OpenSSL, "openssl"
22
+ autoload :Base64, "base64"
23
23
  require "digest/sha2" unless defined?(Digest::SHA2)
24
24
  require_relative "../encrypted_data_bag_item"
25
25
  require_relative "unsupported_encrypted_data_bag_item_format"
@@ -16,10 +16,10 @@
16
16
  # limitations under the License.
17
17
  #
18
18
 
19
- require "base64"
19
+ autoload :Base64, "base64"
20
20
  require "digest/sha2" unless defined?(Digest::SHA2)
21
- require "openssl" unless defined?(OpenSSL)
22
- require "ffi_yajl" unless defined?(FFI_Yajl)
21
+ autoload :OpenSSL, "openssl"
22
+ autoload :FFI_Yajl, "ffi_yajl"
23
23
  require_relative "../encrypted_data_bag_item"
24
24
  require_relative "unsupported_encrypted_data_bag_item_format"
25
25
  require_relative "encryption_failure"
@@ -25,7 +25,7 @@ require_relative "mixin/params_validate"
25
25
  require_relative "mixin/from_file"
26
26
  require_relative "version_constraint"
27
27
  require_relative "server_api"
28
- require_relative "dist"
28
+ require "chef-utils/dist" unless defined?(ChefUtils::Dist)
29
29
 
30
30
  class Chef
31
31
  class Environment
@@ -308,7 +308,7 @@ class Chef
308
308
  def self.validate_cookbook_version(version)
309
309
  if Chef::Config[:solo_legacy_mode]
310
310
  raise Chef::Exceptions::IllegalVersionConstraint,
311
- "Environment cookbook version constraints not allowed in #{Chef::Dist::SOLO}"
311
+ "Environment cookbook version constraints not allowed in #{ChefUtils::Dist::Solo::PRODUCT}"
312
312
  else
313
313
  Chef::VersionConstraint.new version
314
314
  true
@@ -19,7 +19,7 @@
19
19
  require_relative "base"
20
20
  require_relative "../platform/query_helpers"
21
21
  require_relative "../win32/eventlog"
22
- require_relative "../dist"
22
+ require "chef-utils" unless defined?(ChefUtils)
23
23
 
24
24
  class Chef
25
25
  module EventLoggers
@@ -36,7 +36,7 @@ class Chef
36
36
  LOG_CATEGORY_ID = 11001
37
37
 
38
38
  # Since we must install the event logger, this is not really configurable
39
- SOURCE = Chef::Dist::SHORT.freeze
39
+ SOURCE = ChefUtils::Dist::Infra::SHORT.freeze
40
40
 
41
41
  def self.available?
42
42
  ChefUtils.windows?
@@ -18,7 +18,7 @@
18
18
  # limitations under the License.
19
19
 
20
20
  require "chef-config/exceptions"
21
- require_relative "dist"
21
+ require "chef-utils/dist" unless defined?(ChefUtils::Dist)
22
22
  require_relative "constants"
23
23
 
24
24
  class Chef
@@ -301,7 +301,7 @@ class Chef
301
301
 
302
302
  def client_run_failure(exception)
303
303
  set_backtrace(exception.backtrace)
304
- @all_failures << [ "#{Chef::Dist::PRODUCT} run", exception ]
304
+ @all_failures << [ "#{ChefUtils::Dist::Infra::PRODUCT} run", exception ]
305
305
  end
306
306
 
307
307
  def notification_failure(exception)
@@ -402,7 +402,7 @@ class Chef
402
402
  def initialize(response_length, content_length)
403
403
  super <<~EOF
404
404
  Response body length #{response_length} does not match HTTP Content-Length header #{content_length}.
405
- This error is most often caused by network issues (proxies, etc) outside of #{Chef::Dist::CLIENT}.
405
+ This error is most often caused by network issues (proxies, etc) outside of #{ChefUtils::Dist::Infra::CLIENT}.
406
406
  EOF
407
407
  end
408
408
  end
@@ -477,7 +477,7 @@ class Chef
477
477
  class CookbookChefVersionMismatch < RuntimeError
478
478
  def initialize(chef_version, cookbook_name, cookbook_version, *constraints)
479
479
  constraint_str = constraints.map { |c| c.requirement.as_list.to_s }.join(", ")
480
- super "Cookbook '#{cookbook_name}' version '#{cookbook_version}' depends on #{Chef::Dist::PRODUCT} version #{constraint_str}, but the running #{Chef::Dist::PRODUCT} version is #{chef_version}"
480
+ super "Cookbook '#{cookbook_name}' version '#{cookbook_version}' depends on #{ChefUtils::Dist::Infra::PRODUCT} version #{constraint_str}, but the running #{ChefUtils::Dist::Infra::PRODUCT} version is #{chef_version}"
481
481
  end
482
482
  end
483
483
 
@@ -112,7 +112,11 @@ class Chef
112
112
 
113
113
  def get_sid(value)
114
114
  if value.is_a?(String)
115
- SID.from_account(value)
115
+ begin
116
+ Security.convert_string_sid_to_sid(value)
117
+ rescue Chef::Exceptions::Win32APIError
118
+ SID.from_account(value)
119
+ end
116
120
  elsif value.is_a?(SID)
117
121
  value
118
122
  else
@@ -1,6 +1,6 @@
1
1
  require_relative "base"
2
2
  require_relative "../config"
3
- require_relative "../dist"
3
+ require "chef-utils/dist" unless defined?(ChefUtils::Dist)
4
4
 
5
5
  class Chef
6
6
  module Formatters
@@ -41,7 +41,8 @@ class Chef
41
41
  end
42
42
 
43
43
  def run_start(version, run_status)
44
- puts_line "Starting #{Chef::Dist::PRODUCT}, version #{version}"
44
+ puts_line "Starting #{ChefUtils::Dist::Infra::PRODUCT}, version #{version}"
45
+ puts_line "Patents: #{ChefUtils::Dist::Org::PATENTS}"
45
46
  puts_line "Targeting node: #{Chef::Config.target_mode.host}" if Chef::Config.target_mode?
46
47
  puts_line "OpenSSL FIPS 140 mode enabled" if Chef::Config[:fips]
47
48
  end
@@ -77,18 +78,18 @@ class Chef
77
78
  puts_line ""
78
79
  end
79
80
  if Chef::Config[:why_run]
80
- puts_line "#{Chef::Dist::PRODUCT} finished, #{@updated_resources}/#{total_resources} resources would have been updated"
81
+ puts_line "#{ChefUtils::Dist::Infra::PRODUCT} finished, #{@updated_resources}/#{total_resources} resources would have been updated"
81
82
  else
82
- puts_line "#{Chef::Dist::PRODUCT} finished, #{@updated_resources}/#{total_resources} resources updated in #{pretty_elapsed_time}"
83
+ puts_line "#{ChefUtils::Dist::Infra::PRODUCT} finished, #{@updated_resources}/#{total_resources} resources updated in #{pretty_elapsed_time}"
83
84
  end
84
85
  end
85
86
 
86
87
  def run_failed(exception)
87
88
  @end_time = Time.now
88
89
  if Chef::Config[:why_run]
89
- puts_line "#{Chef::Dist::PRODUCT} failed. #{@updated_resources} resources would have been updated"
90
+ puts_line "#{ChefUtils::Dist::Infra::PRODUCT} failed. #{@updated_resources} resources would have been updated"
90
91
  else
91
- puts_line "#{Chef::Dist::PRODUCT} failed. #{@updated_resources} resources updated in #{pretty_elapsed_time}"
92
+ puts_line "#{ChefUtils::Dist::Infra::PRODUCT} failed. #{@updated_resources} resources updated in #{pretty_elapsed_time}"
92
93
  end
93
94
  end
94
95