chef 16.4.41 → 16.5.64

Sign up to get free protection for your applications and to get access to all the features.
Files changed (268) 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/lib/chef/application.rb +18 -16
  7. data/lib/chef/application/apply.rb +12 -7
  8. data/lib/chef/application/base.rb +26 -23
  9. data/lib/chef/application/client.rb +10 -4
  10. data/lib/chef/application/exit_code.rb +13 -4
  11. data/lib/chef/application/knife.rb +22 -11
  12. data/lib/chef/application/solo.rb +2 -1
  13. data/lib/chef/application/windows_service.rb +14 -14
  14. data/lib/chef/application/windows_service_manager.rb +6 -6
  15. data/lib/chef/chef_fs/knife.rb +2 -2
  16. data/lib/chef/chef_fs/parallelizer.rb +0 -1
  17. data/lib/chef/client.rb +10 -11
  18. data/lib/chef/cookbook/cookbook_version_loader.rb +1 -1
  19. data/lib/chef/cookbook/synchronizer.rb +2 -2
  20. data/lib/chef/cookbook_site_streaming_uploader.rb +13 -11
  21. data/lib/chef/cookbook_uploader.rb +1 -1
  22. data/lib/chef/data_collector.rb +6 -5
  23. data/lib/chef/data_collector/config_validation.rb +22 -13
  24. data/lib/chef/data_collector/run_end_message.rb +2 -2
  25. data/lib/chef/data_collector/run_start_message.rb +1 -1
  26. data/lib/chef/deprecated.rb +1 -1
  27. data/lib/chef/deprecation/warnings.rb +2 -2
  28. data/lib/chef/digester.rb +2 -2
  29. data/lib/chef/dsl/chef_vault.rb +1 -1
  30. data/lib/chef/dsl/data_query.rb +2 -2
  31. data/lib/chef/dsl/platform_introspection.rb +1 -1
  32. data/lib/chef/encrypted_data_bag_item.rb +3 -4
  33. data/lib/chef/encrypted_data_bag_item/decryptor.rb +3 -3
  34. data/lib/chef/encrypted_data_bag_item/encryptor.rb +3 -3
  35. data/lib/chef/environment.rb +2 -2
  36. data/lib/chef/event_loggers/windows_eventlog.rb +2 -2
  37. data/lib/chef/exceptions.rb +4 -4
  38. data/lib/chef/file_access_control/windows.rb +5 -1
  39. data/lib/chef/formatters/doc.rb +7 -6
  40. data/lib/chef/formatters/error_inspectors/api_error_formatting.rb +6 -5
  41. data/lib/chef/formatters/error_inspectors/node_load_error_inspector.rb +3 -3
  42. data/lib/chef/formatters/error_inspectors/registration_error_inspector.rb +9 -9
  43. data/lib/chef/formatters/error_inspectors/resource_failure_inspector.rb +2 -2
  44. data/lib/chef/formatters/error_inspectors/run_list_expansion_error_inspector.rb +3 -3
  45. data/lib/chef/formatters/minimal.rb +5 -4
  46. data/lib/chef/http.rb +6 -4
  47. data/lib/chef/http/auth_credentials.rb +5 -1
  48. data/lib/chef/http/authenticator.rb +1 -1
  49. data/lib/chef/http/basic_client.rb +4 -2
  50. data/lib/chef/http/decompressor.rb +1 -1
  51. data/lib/chef/http/http_request.rb +7 -5
  52. data/lib/chef/http/socketless_chef_zero_client.rb +5 -2
  53. data/lib/chef/http/ssl_policies.rb +1 -1
  54. data/lib/chef/json_compat.rb +1 -1
  55. data/lib/chef/knife.rb +4 -4
  56. data/lib/chef/knife/bootstrap.rb +16 -14
  57. data/lib/chef/knife/bootstrap/chef_vault_handler.rb +1 -1
  58. data/lib/chef/knife/bootstrap/templates/chef-full.erb +3 -3
  59. data/lib/chef/knife/bootstrap/templates/windows-chef-client-msi.erb +7 -7
  60. data/lib/chef/knife/client_create.rb +3 -3
  61. data/lib/chef/knife/config_get.rb +8 -97
  62. data/lib/chef/knife/config_get_profile.rb +9 -9
  63. data/lib/chef/knife/config_list.rb +139 -0
  64. data/lib/chef/knife/config_list_profiles.rb +8 -98
  65. data/lib/chef/knife/config_show.rb +127 -0
  66. data/lib/chef/knife/config_use.rb +61 -0
  67. data/lib/chef/knife/config_use_profile.rb +9 -24
  68. data/lib/chef/knife/configure.rb +2 -2
  69. data/lib/chef/knife/core/bootstrap_context.rb +2 -2
  70. data/lib/chef/knife/core/object_loader.rb +1 -1
  71. data/lib/chef/knife/core/windows_bootstrap_context.rb +11 -11
  72. data/lib/chef/knife/exec.rb +2 -2
  73. data/lib/chef/knife/node_show.rb +2 -2
  74. data/lib/chef/knife/serve.rb +3 -3
  75. data/lib/chef/knife/ssh.rb +16 -1
  76. data/lib/chef/knife/ssl_check.rb +3 -3
  77. data/lib/chef/knife/status.rb +2 -2
  78. data/lib/chef/knife/user_create.rb +2 -2
  79. data/lib/chef/knife/yaml_convert.rb +1 -1
  80. data/lib/chef/local_mode.rb +2 -2
  81. data/lib/chef/log/syslog.rb +2 -2
  82. data/lib/chef/log/winevt.rb +2 -2
  83. data/lib/chef/mixin/deep_merge.rb +0 -12
  84. data/lib/chef/mixin/openssl_helper.rb +1 -4
  85. data/lib/chef/mixin/template.rb +2 -2
  86. data/lib/chef/mixin/uris.rb +2 -2
  87. data/lib/chef/mixin/versioned_api.rb +1 -2
  88. data/lib/chef/monkey_patches/net_http.rb +4 -4
  89. data/lib/chef/node_map.rb +2 -2
  90. data/lib/chef/policy_builder/policyfile.rb +2 -2
  91. data/lib/chef/provider.rb +0 -4
  92. data/lib/chef/provider/file.rb +2 -2
  93. data/lib/chef/provider/ifconfig.rb +1 -1
  94. data/lib/chef/provider/launchd.rb +2 -2
  95. data/lib/chef/provider/mount/linux.rb +63 -0
  96. data/lib/chef/provider/package/rubygems.rb +21 -18
  97. data/lib/chef/provider/package/snap.rb +0 -1
  98. data/lib/chef/provider/package/windows.rb +2 -2
  99. data/lib/chef/provider/package/windows/registry_uninstall_entry.rb +3 -1
  100. data/lib/chef/provider/package/zypper.rb +1 -1
  101. data/lib/chef/provider/remote_file/content.rb +3 -0
  102. data/lib/chef/provider/remote_file/ftp.rb +6 -4
  103. data/lib/chef/provider/remote_file/sftp.rb +6 -4
  104. data/lib/chef/provider/route.rb +2 -6
  105. data/lib/chef/provider/service/macosx.rb +2 -2
  106. data/lib/chef/provider/template_finder.rb +2 -10
  107. data/lib/chef/provider/user/dscl.rb +3 -3
  108. data/lib/chef/provider/user/mac.rb +1 -1
  109. data/lib/chef/provider/windows_task.rb +1 -2
  110. data/lib/chef/provider/zypper_repository.rb +2 -2
  111. data/lib/chef/provider_resolver.rb +1 -1
  112. data/lib/chef/providers.rb +1 -0
  113. data/lib/chef/recipe.rb +2 -2
  114. data/lib/chef/resource.rb +1 -1
  115. data/lib/chef/resource/apt_repository.rb +1 -1
  116. data/lib/chef/resource/bff_package.rb +22 -0
  117. data/lib/chef/resource/breakpoint.rb +57 -2
  118. data/lib/chef/resource/build_essential.rb +1 -1
  119. data/lib/chef/resource/cab_package.rb +29 -0
  120. data/lib/chef/resource/chef_client_cron.rb +32 -25
  121. data/lib/chef/resource/chef_client_launchd.rb +194 -0
  122. data/lib/chef/resource/chef_client_scheduled_task.rb +21 -18
  123. data/lib/chef/resource/chef_client_systemd_timer.rb +24 -17
  124. data/lib/chef/resource/chef_client_trusted_certificate.rb +101 -0
  125. data/lib/chef/resource/chef_gem.rb +10 -10
  126. data/lib/chef/resource/chef_handler.rb +148 -4
  127. data/lib/chef/resource/chef_sleep.rb +2 -2
  128. data/lib/chef/resource/chef_vault_secret.rb +1 -1
  129. data/lib/chef/resource/cookbook_file.rb +2 -2
  130. data/lib/chef/resource/cron/cron_d.rb +0 -1
  131. data/lib/chef/resource/dnf_package.rb +2 -2
  132. data/lib/chef/resource/dsc_resource.rb +0 -1
  133. data/lib/chef/resource/dsc_script.rb +2 -2
  134. data/lib/chef/resource/execute.rb +6 -6
  135. data/lib/chef/resource/file.rb +4 -4
  136. data/lib/chef/resource/gem_package.rb +5 -5
  137. data/lib/chef/resource/homebrew_package.rb +3 -3
  138. data/lib/chef/resource/homebrew_update.rb +5 -5
  139. data/lib/chef/resource/hostname.rb +2 -2
  140. data/lib/chef/resource/launchd.rb +2 -1
  141. data/lib/chef/resource/locale.rb +2 -2
  142. data/lib/chef/resource/macos_userdefaults.rb +3 -3
  143. data/lib/chef/resource/notify_group.rb +0 -1
  144. data/lib/chef/resource/ohai.rb +46 -3
  145. data/lib/chef/resource/ohai_hint.rb +33 -0
  146. data/lib/chef/resource/openssl_dhparam.rb +27 -5
  147. data/lib/chef/resource/openssl_ec_private_key.rb +6 -3
  148. data/lib/chef/resource/openssl_ec_public_key.rb +2 -2
  149. data/lib/chef/resource/openssl_rsa_private_key.rb +6 -3
  150. data/lib/chef/resource/openssl_x509_certificate.rb +14 -14
  151. data/lib/chef/resource/openssl_x509_crl.rb +19 -10
  152. data/lib/chef/resource/openssl_x509_request.rb +14 -16
  153. data/lib/chef/resource/osx_profile.rb +77 -13
  154. data/lib/chef/resource/plist.rb +1 -1
  155. data/lib/chef/resource/powershell_package_source.rb +5 -5
  156. data/lib/chef/resource/reboot.rb +2 -2
  157. data/lib/chef/resource/remote_file.rb +3 -3
  158. data/lib/chef/resource/rhsm_register.rb +22 -10
  159. data/lib/chef/resource/ruby_block.rb +2 -2
  160. data/lib/chef/resource/scm/subversion.rb +2 -2
  161. data/lib/chef/resource/service.rb +3 -3
  162. data/lib/chef/resource/ssh_known_hosts_entry.rb +2 -2
  163. data/lib/chef/resource/support/cron.d.erb +1 -1
  164. data/lib/chef/resource/support/cron_access.erb +1 -1
  165. data/lib/chef/resource/support/sudoer.erb +1 -1
  166. data/lib/chef/resource/support/ulimit.erb +1 -1
  167. data/lib/chef/resource/sysctl.rb +1 -5
  168. data/lib/chef/resource/systemd_unit.rb +2 -2
  169. data/lib/chef/resource/template.rb +2 -2
  170. data/lib/chef/resource/windows_ad_join.rb +10 -3
  171. data/lib/chef/resource/windows_certificate.rb +6 -4
  172. data/lib/chef/resource/windows_firewall_profile.rb +22 -20
  173. data/lib/chef/resource/windows_package.rb +28 -5
  174. data/lib/chef/resource/windows_printer.rb +5 -3
  175. data/lib/chef/resource/windows_printer_port.rb +6 -4
  176. data/lib/chef/resource/windows_user_privilege.rb +53 -54
  177. data/lib/chef/resource/windows_workgroup.rb +3 -3
  178. data/lib/chef/resource/yum_package.rb +2 -2
  179. data/lib/chef/resources.rb +3 -1
  180. data/lib/chef/run_context.rb +2 -2
  181. data/lib/chef/run_context/cookbook_compiler.rb +1 -1
  182. data/lib/chef/run_lock.rb +2 -2
  183. data/lib/chef/search/query.rb +4 -5
  184. data/lib/chef/shell.rb +31 -26
  185. data/lib/chef/shell/ext.rb +11 -11
  186. data/lib/chef/shell/shell_session.rb +2 -2
  187. data/lib/chef/train_transport.rb +5 -104
  188. data/lib/chef/util/diff.rb +3 -3
  189. data/lib/chef/util/powershell/cmdlet.rb +3 -1
  190. data/lib/chef/util/powershell/ps_credential.rb +18 -14
  191. data/lib/chef/util/threaded_job_queue.rb +0 -2
  192. data/lib/chef/version.rb +1 -1
  193. data/lib/chef/win32/crypto.rb +1 -1
  194. data/lib/chef/win32/registry.rb +1 -2
  195. data/spec/data/shef-config.rb +1 -1
  196. data/spec/functional/event_loggers/windows_eventlog_spec.rb +6 -5
  197. data/spec/functional/resource/aix_service_spec.rb +2 -2
  198. data/spec/functional/resource/aixinit_service_spec.rb +1 -1
  199. data/spec/functional/resource/insserv_spec.rb +1 -1
  200. data/spec/functional/resource/user/dscl_spec.rb +1 -1
  201. data/spec/functional/resource/user/mac_user_spec.rb +1 -1
  202. data/spec/functional/resource/windows_task_spec.rb +13 -13
  203. data/spec/functional/version_spec.rb +3 -3
  204. data/spec/integration/client/client_spec.rb +4 -4
  205. data/spec/integration/client/exit_code_spec.rb +3 -2
  206. data/spec/integration/client/ipv6_spec.rb +1 -1
  207. data/spec/integration/knife/{config_list_profiles_spec.rb → config_list_spec.rb} +30 -29
  208. data/spec/integration/knife/{config_get_spec.rb → config_show_spec.rb} +3 -3
  209. data/spec/integration/knife/{config_use_profile_spec.rb → config_use_spec.rb} +53 -10
  210. data/spec/integration/knife/cookbook_api_ipv6_spec.rb +1 -1
  211. data/spec/integration/ohai/ohai_spec.rb +61 -0
  212. data/spec/integration/recipes/remote_directory.rb +1 -1
  213. data/spec/integration/solo/solo_spec.rb +5 -5
  214. data/spec/spec_helper.rb +6 -3
  215. data/spec/stress/win32/file_spec.rb +1 -1
  216. data/spec/support/chef_helpers.rb +2 -2
  217. data/spec/support/matchers/leak.rb +2 -2
  218. data/spec/support/platform_helpers.rb +16 -34
  219. data/spec/support/shared/functional/securable_resource.rb +108 -27
  220. data/spec/support/shared/functional/win32_service.rb +1 -1
  221. data/spec/support/shared/unit/application_dot_d.rb +5 -3
  222. data/spec/tiny_server.rb +0 -1
  223. data/spec/unit/application/client_spec.rb +2 -2
  224. data/spec/unit/application/exit_code_spec.rb +10 -0
  225. data/spec/unit/application_spec.rb +4 -6
  226. data/spec/unit/chef_fs/parallelizer_spec.rb +5 -1
  227. data/spec/unit/chef_fs/path_util_spec.rb +1 -1
  228. data/spec/unit/cookbook/synchronizer_spec.rb +2 -2
  229. data/spec/unit/cookbook_spec.rb +2 -2
  230. data/spec/unit/data_collector/config_validation_spec.rb +208 -0
  231. data/spec/unit/data_collector_spec.rb +0 -113
  232. data/spec/unit/dsl/declare_resource_spec.rb +1 -1
  233. data/spec/unit/file_access_control_spec.rb +1 -1
  234. data/spec/unit/knife/bootstrap_spec.rb +6 -6
  235. data/spec/unit/knife/core/ui_spec.rb +1 -0
  236. data/spec/unit/knife/ssh_spec.rb +2 -2
  237. data/spec/unit/lwrp_spec.rb +3 -3
  238. data/spec/unit/mixin/deep_merge_spec.rb +15 -0
  239. data/spec/unit/mixin/openssl_helper_spec.rb +1 -1
  240. data/spec/unit/mixin/powershell_exec_spec.rb +1 -1
  241. data/spec/unit/mixin/securable_spec.rb +2 -2
  242. data/spec/unit/node/immutable_collections_spec.rb +2 -2
  243. data/spec/unit/provider/mount/linux_spec.rb +97 -0
  244. data/spec/unit/provider/package/chocolatey_spec.rb +1 -1
  245. data/spec/unit/provider/package/powershell_spec.rb +1 -1
  246. data/spec/unit/provider/package/rubygems_spec.rb +4 -1
  247. data/spec/unit/provider/route_spec.rb +0 -2
  248. data/spec/unit/recipe_spec.rb +1 -1
  249. data/spec/unit/resource/chef_client_cron_spec.rb +35 -14
  250. data/spec/unit/resource/chef_client_launchd_spec.rb +127 -0
  251. data/spec/unit/resource/chef_client_systemd_timer_spec.rb +36 -1
  252. data/spec/unit/resource/chef_client_trusted_certificate_spec.rb +54 -0
  253. data/spec/unit/resource/launchd_spec.rb +8 -0
  254. data/spec/unit/resource/osx_profile_spec.rb +67 -1
  255. data/spec/unit/resource/rhsm_register_spec.rb +56 -18
  256. data/spec/unit/resource/windows_uac_spec.rb +1 -1
  257. data/spec/unit/resource/windows_user_privilege_spec.rb +55 -0
  258. data/spec/unit/run_lock_spec.rb +5 -1
  259. data/spec/unit/runner_spec.rb +1 -2
  260. data/spec/unit/shell/shell_ext_spec.rb +46 -3
  261. data/spec/unit/shell/shell_session_spec.rb +35 -64
  262. data/spec/unit/shell_spec.rb +16 -19
  263. data/spec/unit/train_transport_spec.rb +14 -13
  264. data/spec/unit/util/selinux_spec.rb +2 -0
  265. data/tasks/rspec.rb +0 -2
  266. metadata +41 -17
  267. data/lib/chef/dist.rb +0 -68
  268. data/spec/integration/knife/config_get_profile_spec.rb +0 -114
@@ -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
 
@@ -17,7 +17,8 @@
17
17
  #
18
18
 
19
19
  require_relative "../../http/authenticator"
20
- require_relative "../../dist"
20
+ require "chef-utils/dist" unless defined?(ChefUtils::Dist)
21
+ require "timeout" unless defined?(Timeout)
21
22
 
22
23
  class Chef
23
24
  module Formatters
@@ -40,7 +41,7 @@ class Chef
40
41
  def describe_eof_error(error_description)
41
42
  error_description.section("Authentication Error:", <<~E)
42
43
  Received an EOF on transport socket. This almost always indicates a network
43
- error external to #{Chef::Dist::CLIENT}. Some causes include:
44
+ error external to #{ChefUtils::Dist::Infra::CLIENT}. Some causes include:
44
45
 
45
46
  - Blocking ICMP Dest Unreachable (breaking Path MTU Discovery)
46
47
  - IPsec or VPN tunnelling / TCP Encapsulation MTU issues
@@ -114,8 +115,8 @@ class Chef
114
115
  error_description.section("Incompatible server API version:", <<~E)
115
116
  This version of the API that this request specified is not supported by the server you sent this request to.
116
117
  The server supports a min API version of #{min_server_version} and a max API version of #{max_server_version}.
117
- #{Chef::Dist::PRODUCT} just made a request with an API version of #{client_api_version}.
118
- Please either update your #{Chef::Dist::PRODUCT} or the server to be a compatible set.
118
+ #{ChefUtils::Dist::Infra::PRODUCT} just made a request with an API version of #{client_api_version}.
119
+ Please either update your #{ChefUtils::Dist::Infra::PRODUCT} or the server to be a compatible set.
119
120
  E
120
121
  else
121
122
  describe_http_error(error_description)
@@ -130,7 +131,7 @@ class Chef
130
131
  end
131
132
 
132
133
  def describe_503_error(error_description)
133
- error_description.section("Server Unavailable", "The #{Chef::Dist::SERVER_PRODUCT} is temporarily unavailable")
134
+ error_description.section("Server Unavailable", "The #{ChefUtils::Dist::Server::PRODUCT} is temporarily unavailable")
134
135
  error_description.section("Server Response:", format_rest_error)
135
136
  end
136
137
 
@@ -17,7 +17,7 @@
17
17
  #
18
18
 
19
19
  require_relative "api_error_formatting"
20
- require_relative "../../dist"
20
+ require "chef-utils/dist" unless defined?(ChefUtils::Dist)
21
21
 
22
22
  class Chef
23
23
  module Formatters
@@ -46,7 +46,7 @@ class Chef
46
46
  when Chef::Exceptions::PrivateKeyMissing
47
47
  error_description.section("Private Key Not Found:", <<~E)
48
48
  Your private key could not be loaded. If the key file exists, ensure that it is
49
- readable by #{Chef::Dist::PRODUCT}.
49
+ readable by #{ChefUtils::Dist::Infra::PRODUCT}.
50
50
  E
51
51
  error_description.section("Relevant Config Settings:", <<~E)
52
52
  client_key "#{api_key}"
@@ -99,7 +99,7 @@ class Chef
99
99
  # redirect.
100
100
  def describe_404_error(error_description)
101
101
  error_description.section("Resource Not Found:", <<~E)
102
- The #{Chef::Dist::SERVER_PRODUCT} returned a HTTP 404. This usually indicates that your chef_server_url is incorrect.
102
+ The #{ChefUtils::Dist::Server::PRODUCT} returned a HTTP 404. This usually indicates that your chef_server_url is incorrect.
103
103
  E
104
104
  error_description.section("Relevant Config Settings:", <<~E)
105
105
  chef_server_url "#{server_url}"
@@ -1,4 +1,4 @@
1
- require_relative "../../dist"
1
+ require "chef-utils/dist" unless defined?(ChefUtils::Dist)
2
2
 
3
3
  class Chef
4
4
  module Formatters
@@ -28,7 +28,7 @@ class Chef
28
28
  humanize_http_exception(error_description)
29
29
  when Errno::ECONNREFUSED, Timeout::Error, Errno::ETIMEDOUT, SocketError
30
30
  error_description.section("Network Error:", <<~E)
31
- There was a network error connecting to the #{Chef::Dist::SERVER_PRODUCT}:
31
+ There was a network error connecting to the #{ChefUtils::Dist::Server::PRODUCT}:
32
32
  #{exception.message}
33
33
  E
34
34
  error_description.section("Relevant Config Settings:", <<~E)
@@ -39,14 +39,14 @@ class Chef
39
39
  when Chef::Exceptions::PrivateKeyMissing
40
40
  error_description.section("Private Key Not Found:", <<~E)
41
41
  Your private key could not be loaded. If the key file exists, ensure that it is
42
- readable by #{Chef::Dist::PRODUCT}.
42
+ readable by #{ChefUtils::Dist::Infra::PRODUCT}.
43
43
  E
44
44
  error_description.section("Relevant Config Settings:", <<~E)
45
45
  validation_key "#{api_key}"
46
46
  E
47
47
  when Chef::Exceptions::InvalidRedirect
48
48
  error_description.section("Invalid Redirect:", <<~E)
49
- Change your #{Chef::Dist::SERVER_PRODUCT} location in client.rb to the #{Chef::Dist::SERVER_PRODUCT}'s FQDN to avoid unwanted redirections.
49
+ Change your #{ChefUtils::Dist::Server::PRODUCT} location in client.rb to the #{ChefUtils::Dist::Server::PRODUCT}'s FQDN to avoid unwanted redirections.
50
50
  E
51
51
  when EOFError
52
52
  describe_eof_error(error_description)
@@ -61,13 +61,13 @@ class Chef
61
61
  when Net::HTTPUnauthorized
62
62
  if clock_skew?
63
63
  error_description.section("Authentication Error:", <<~E)
64
- Failed to authenticate to the #{Chef::Dist::SERVER_PRODUCT} (http 401).
64
+ Failed to authenticate to the #{ChefUtils::Dist::Server::PRODUCT} (http 401).
65
65
  The request failed because your clock has drifted by more than 15 minutes.
66
66
  Syncing your clock to an NTP Time source should resolve the issue.
67
67
  E
68
68
  else
69
69
  error_description.section("Authentication Error:", <<~E)
70
- Failed to authenticate to the #{Chef::Dist::SERVER_PRODUCT} (http 401).
70
+ Failed to authenticate to the #{ChefUtils::Dist::Server::PRODUCT} (http 401).
71
71
  E
72
72
 
73
73
  error_description.section("Server Response:", format_rest_error)
@@ -81,7 +81,7 @@ class Chef
81
81
  end
82
82
  when Net::HTTPForbidden
83
83
  error_description.section("Authorization Error:", <<~E)
84
- Your validation client is not authorized to create the client for this node on the #{Chef::Dist::SERVER_PRODUCT} (HTTP 403).
84
+ Your validation client is not authorized to create the client for this node on the #{ChefUtils::Dist::Server::PRODUCT} (HTTP 403).
85
85
  E
86
86
  error_description.section("Possible Causes:", <<~E)
87
87
  * There may already be a client named "#{config[:node_name]}"
@@ -94,7 +94,7 @@ class Chef
94
94
  error_description.section("Server Response:", format_rest_error)
95
95
  when Net::HTTPNotFound
96
96
  error_description.section("Resource Not Found:", <<~E)
97
- The #{Chef::Dist::SERVER_PRODUCT} returned a HTTP 404. This usually indicates that your chef_server_url configuration is incorrect.
97
+ The #{ChefUtils::Dist::Server::PRODUCT} returned a HTTP 404. This usually indicates that your chef_server_url configuration is incorrect.
98
98
  E
99
99
  error_description.section("Relevant Config Settings:", <<~E)
100
100
  chef_server_url "#{server_url}"
@@ -107,7 +107,7 @@ class Chef
107
107
  E
108
108
  error_description.section("Server Response:", format_rest_error)
109
109
  when Net::HTTPBadGateway, Net::HTTPServiceUnavailable
110
- error_description.section("Server Unavailable", "The #{Chef::Dist::SERVER_PRODUCT} is temporarily unavailable")
110
+ error_description.section("Server Unavailable", "The #{ChefUtils::Dist::Server::PRODUCT} is temporarily unavailable")
111
111
  error_description.section("Server Response:", format_rest_error)
112
112
  else
113
113
  error_description.section("Unexpected API Request Failure:", format_rest_error)