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
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6501568e7cfe7721c7c9905212c30210e51b6dda5932c47734704353d5d2c323
4
- data.tar.gz: cc19bfc60ee23bd2b7f64efc6a4e3a6998bb84e8507c39f13436b6cc01d48a06
3
+ metadata.gz: 5eba2d7e1eb21b115338c4d28335b8f3ce6abb4392600c6c5b951f6bbe42f630
4
+ data.tar.gz: ef1daf1431bdad76bafedffb5544b0197459ac3a6e26fed391645d277af6a02f
5
5
  SHA512:
6
- metadata.gz: 8ef9379627979e00d0e4a87f28ce77005d06b150fd92891cdd529ad40c893fcbaeeb688723acad0be917f96e65863a019da29f1018868f39c27f8d632d57e9e4
7
- data.tar.gz: 812ad315824df498df0fdcccbdab1a1cbfaca8eccc253c1f68b4f31c3d9aea46facdd3c76260d5cc87ac6f6827cd39acee879b358c7fae05408d30494a2bcd46
6
+ metadata.gz: 05d3157e31b90901508632cdc4047981a1e23feb4045cf4d45d8976ac5b93d788428f4c9ac717afe518047bf3f8a7a9577bbd03aea561776a40e03f366c9913a
7
+ data.tar.gz: 208048bb737f1090e4754596d927d73ead142753c1842d8c8e58f89f755bd1508ba98e31eee144cba76f37a68d0b03c3ae5afb26d4e89256e9057f9d5c2feffe
data/Gemfile CHANGED
@@ -87,7 +87,7 @@ eval_gemfile("./Gemfile.local") if File.exist?("./Gemfile.local")
87
87
  if RUBY_PLATFORM.match?(/mswin|mingw|windows/)
88
88
  instance_eval do
89
89
  ruby_exe_dir = RbConfig::CONFIG["bindir"]
90
- assemblies = Dir.glob(File.expand_path("distro/ruby_bin_folder", Dir.pwd) + "/*.dll")
90
+ assemblies = Dir.glob(File.expand_path("distro/ruby_bin_folder", __dir__) + "/*.dll")
91
91
  FileUtils.cp_r assemblies, ruby_exe_dir, verbose: false unless ENV["_BUNDLER_WINDOWS_DLLS_COPIED"]
92
92
  ENV["_BUNDLER_WINDOWS_DLLS_COPIED"] = "1"
93
93
  end
data/Rakefile CHANGED
@@ -26,7 +26,7 @@ begin
26
26
  require_relative "tasks/announce"
27
27
  require_relative "tasks/docs"
28
28
  require_relative "tasks/spellcheck"
29
- require_relative "lib/chef/dist"
29
+ require_relative "chef-utils/lib/chef-utils/dist" unless defined?(ChefUtils::Dist)
30
30
  rescue LoadError => e
31
31
  puts "Skipping missing rake dep: #{e}"
32
32
  end
@@ -108,4 +108,4 @@ begin
108
108
  end
109
109
  rescue LoadError
110
110
  puts "yard is not available. bundle install first to make sure all dependencies are installed."
111
- end
111
+ end
data/bin/knife CHANGED
@@ -18,7 +18,7 @@
18
18
  # See the License for the specific language governing permissions and
19
19
  # limitations under the License.
20
20
 
21
- $:.unshift(File.expand_path(File.join(File.dirname(__FILE__), "..", "lib")))
21
+ $:.unshift(File.expand_path(File.join(__dir__, "..", "lib")))
22
22
  require "chef/application/knife"
23
23
 
24
24
  Chef::Application::Knife.new.run
@@ -20,7 +20,7 @@ Gem::Specification.new do |s|
20
20
  s.add_dependency "train-core", "~> 3.2", ">= 3.2.28" # 3.2.28 fixes sudo prompts. See https://github.com/chef/chef/pull/9635
21
21
  s.add_dependency "train-winrm", ">= 0.2.5"
22
22
 
23
- s.add_dependency "license-acceptance", "~> 1.0", ">= 1.0.5"
23
+ s.add_dependency "license-acceptance", ">= 1.0.5", "< 3"
24
24
  s.add_dependency "mixlib-cli", ">= 2.1.1", "< 3.0"
25
25
  s.add_dependency "mixlib-log", ">= 2.0.3", "< 4.0"
26
26
  s.add_dependency "mixlib-authentication", ">= 2.1", "< 4"
@@ -38,6 +38,7 @@ Gem::Specification.new do |s|
38
38
  s.add_dependency "highline", ">= 1.6.9", "< 3"
39
39
  s.add_dependency "tty-prompt", "~> 0.21" # knife ui.ask prompt
40
40
  s.add_dependency "tty-screen", "~> 0.6" # knife list
41
+ s.add_dependency "tty-table", "~> 0.11.0" # knife render table output
41
42
  s.add_dependency "pastel" # knife ui.color
42
43
  s.add_dependency "erubis", "~> 2.7"
43
44
  s.add_dependency "diff-lcs", ">= 1.2.4", "< 1.4.0" # 1.4 breaks output
@@ -27,8 +27,10 @@ require "mixlib/cli" unless defined?(Mixlib::CLI)
27
27
  require "tmpdir" unless defined?(Dir.mktmpdir)
28
28
  require "rbconfig" unless defined?(RbConfig)
29
29
  require_relative "application/exit_code"
30
- require_relative "dist"
31
- require "license_acceptance/acceptor"
30
+ require "chef-utils" unless defined?(ChefUtils)
31
+ module LicenseAcceptance
32
+ autoload :Acceptor, "license_acceptance/acceptor"
33
+ end
32
34
 
33
35
  class Chef
34
36
  class Application
@@ -39,9 +41,6 @@ class Chef
39
41
 
40
42
  @chef_client = nil
41
43
  @chef_client_json = nil
42
-
43
- # Always switch to a readable directory. Keeps subsequent Dir.chdir() {}
44
- # from failing due to permissions when launched as a less privileged user.
45
44
  end
46
45
 
47
46
  # Configure mixlib-cli to always separate defaults from user-supplied CLI options
@@ -96,7 +95,11 @@ class Chef
96
95
  # Parse configuration (options and config file)
97
96
  def configure_chef
98
97
  parse_options
99
- load_config_file
98
+ begin
99
+ load_config_file
100
+ rescue Exception => e
101
+ Chef::Application.fatal!(e.message, Chef::Exceptions::ConfigurationError.new)
102
+ end
100
103
  chef_config.export_proxies
101
104
  chef_config.init_openssl
102
105
  File.umask chef_config[:umask]
@@ -151,8 +154,6 @@ class Chef
151
154
 
152
155
  def apply_extra_config_options(extra_config_options)
153
156
  chef_config.apply_extra_config_options(extra_config_options)
154
- rescue ChefConfig::UnparsableConfigOption => e
155
- Chef::Application.fatal!(e.message)
156
157
  end
157
158
 
158
159
  # Set the specific recipes to Chef::Config if the recipes are valid
@@ -306,7 +307,7 @@ class Chef
306
307
  end
307
308
 
308
309
  def fork_chef_client
309
- logger.info "Forking #{Chef::Dist::PRODUCT} instance to converge..."
310
+ logger.info "Forking #{ChefUtils::Dist::Infra::PRODUCT} instance to converge..."
310
311
  pid = fork do
311
312
  # Want to allow forked processes to finish converging when
312
313
  # TERM singal is received (exit gracefully)
@@ -315,7 +316,7 @@ class Chef
315
316
  " finishing converge to exit normally (send SIGINT to terminate immediately)")
316
317
  end
317
318
 
318
- client_solo = chef_config[:solo] ? "#{Chef::Dist::SOLOEXEC}" : "#{Chef::Dist::CLIENT}"
319
+ client_solo = chef_config[:solo] ? ChefUtils::Dist::Solo::EXEC : ChefUtils::Dist::Infra::CLIENT
319
320
  $0 = "#{client_solo} worker: ppid=#{Process.ppid};start=#{Time.new.strftime("%R:%S")};"
320
321
  begin
321
322
  logger.trace "Forked instance now converging"
@@ -327,7 +328,7 @@ class Chef
327
328
  exit 0
328
329
  end
329
330
  end
330
- logger.trace "Fork successful. Waiting for new #{Chef::Dist::CLIENT} pid: #{pid}"
331
+ logger.trace "Fork successful. Waiting for new #{ChefUtils::Dist::Infra::CLIENT} pid: #{pid}"
331
332
  result = Process.waitpid2(pid)
332
333
  handle_child_exit(result)
333
334
  logger.trace "Forked instance successfully reaped (pid: #{pid})"
@@ -339,9 +340,9 @@ class Chef
339
340
  return true if status.success?
340
341
 
341
342
  message = if status.signaled?
342
- "#{Chef::Dist::PRODUCT} run process terminated by signal #{status.termsig} (#{Signal.list.invert[status.termsig]})"
343
+ "#{ChefUtils::Dist::Infra::PRODUCT} run process terminated by signal #{status.termsig} (#{Signal.list.invert[status.termsig]})"
343
344
  else
344
- "#{Chef::Dist::PRODUCT} run process exited unsuccessfully (exit code #{status.exitstatus})"
345
+ "#{ChefUtils::Dist::Infra::PRODUCT} run process exited unsuccessfully (exit code #{status.exitstatus})"
345
346
  end
346
347
  raise Exceptions::ChildConvergeError, message
347
348
  end
@@ -352,7 +353,8 @@ class Chef
352
353
  logger.fatal("Configuration error #{error.class}: #{error.message}")
353
354
  filtered_trace = error.backtrace.grep(/#{Regexp.escape(config_file_path)}/)
354
355
  filtered_trace.each { |line| logger.fatal(" " + line ) }
355
- Chef::Application.fatal!("Aborting due to error in '#{config_file_path}'", error)
356
+ raise Chef::Exceptions::ConfigurationError.new("Aborting due to error in '#{config_file_path}': #{error}")
357
+ # Chef::Application.fatal!("Aborting due to error in '#{config_file_path}'", Chef::Exceptions::ConfigurationError.new(error))
356
358
  end
357
359
 
358
360
  # This is a hook for testing
@@ -373,8 +375,8 @@ class Chef
373
375
  chef_stacktrace_out = "Generated at #{Time.now}\n"
374
376
  chef_stacktrace_out += message
375
377
 
376
- Chef::FileCache.store("#{Chef::Dist::SHORT}-stacktrace.out", chef_stacktrace_out)
377
- logger.fatal("Stacktrace dumped to #{Chef::FileCache.load("#{Chef::Dist::SHORT}-stacktrace.out", false)}")
378
+ Chef::FileCache.store("#{ChefUtils::Dist::Infra::SHORT}-stacktrace.out", chef_stacktrace_out)
379
+ logger.fatal("Stacktrace dumped to #{Chef::FileCache.load("#{ChefUtils::Dist::Infra::SHORT}-stacktrace.out", false)}")
378
380
  logger.fatal("Please provide the contents of the stacktrace.out file if you file a bug report")
379
381
  if Chef::Config[:always_dump_stacktrace]
380
382
  logger.fatal(message)
@@ -27,13 +27,13 @@ require "fileutils" unless defined?(FileUtils)
27
27
  require "tempfile" unless defined?(Tempfile)
28
28
  require_relative "../providers"
29
29
  require_relative "../resources"
30
- require_relative "../dist"
30
+ require "chef-utils/dist" unless defined?(ChefUtils::Dist)
31
31
  require "license_acceptance/cli_flags/mixlib_cli"
32
32
 
33
33
  class Chef::Application::Apply < Chef::Application
34
34
  include LicenseAcceptance::CLIFlags::MixlibCLI
35
35
 
36
- banner "Usage: #{Chef::Dist::APPLY} [RECIPE_FILE | -e RECIPE_TEXT | -s] [OPTIONS]"
36
+ banner "Usage: #{ChefUtils::Dist::Apply::EXEC} [RECIPE_FILE | -e RECIPE_TEXT | -s] [OPTIONS]"
37
37
 
38
38
  option :execute,
39
39
  short: "-e RECIPE_TEXT",
@@ -77,6 +77,11 @@ class Chef::Application::Apply < Chef::Application
77
77
  description: "Set the log level (trace, debug, info, warn, error, fatal).",
78
78
  proc: lambda { |l| l.to_sym }
79
79
 
80
+ option :log_location_cli,
81
+ short: "-L LOGLOCATION",
82
+ long: "--logfile LOGLOCATION",
83
+ description: "Set the log file location, defaults to STDOUT - recommended for daemonizing."
84
+
80
85
  option :always_dump_stacktrace,
81
86
  long: "--[no-]always-dump-stacktrace",
82
87
  boolean: true,
@@ -95,9 +100,9 @@ class Chef::Application::Apply < Chef::Application
95
100
  option :version,
96
101
  short: "-v",
97
102
  long: "--version",
98
- description: "Show #{Chef::Dist::PRODUCT} version.",
103
+ description: "Show #{ChefUtils::Dist::Infra::PRODUCT} version.",
99
104
  boolean: true,
100
- proc: lambda { |v| puts "#{Chef::Dist::PRODUCT}: #{::Chef::VERSION}" },
105
+ proc: lambda { |v| puts "#{ChefUtils::Dist::Infra::PRODUCT}: #{::Chef::VERSION}" },
101
106
  exit: 0
102
107
 
103
108
  option :why_run,
@@ -114,7 +119,7 @@ class Chef::Application::Apply < Chef::Application
114
119
 
115
120
  option :profile_ruby,
116
121
  long: "--[no-]profile-ruby",
117
- description: "Dump complete Ruby call graph stack of entire #{Chef::Dist::PRODUCT} run (expert only).",
122
+ description: "Dump complete Ruby call graph stack of entire #{ChefUtils::Dist::Infra::PRODUCT} run (expert only).",
118
123
  boolean: true,
119
124
  default: false
120
125
 
@@ -126,7 +131,7 @@ class Chef::Application::Apply < Chef::Application
126
131
 
127
132
  option :minimal_ohai,
128
133
  long: "--minimal-ohai",
129
- description: "Only run the bare minimum Ohai plugins #{Chef::Dist::PRODUCT} needs to function.",
134
+ description: "Only run the bare minimum Ohai plugins #{ChefUtils::Dist::Infra::PRODUCT} needs to function.",
130
135
  boolean: true
131
136
 
132
137
  attr_reader :json_attribs
@@ -176,7 +181,7 @@ class Chef::Application::Apply < Chef::Application
176
181
  else
177
182
  Chef::RunContext.new(@chef_client.node, {}, @chef_client.events)
178
183
  end
179
- recipe = Chef::Recipe.new("(#{Chef::Dist::APPLY} cookbook)", "(#{Chef::Dist::APPLY} recipe)", run_context)
184
+ recipe = Chef::Recipe.new("(#{ChefUtils::Dist::Apply::EXEC} cookbook)", "(#{ChefUtils::Dist::Apply::EXEC} recipe)", run_context)
180
185
  [recipe, run_context]
181
186
  end
182
187
 
@@ -20,11 +20,13 @@ require_relative "../log"
20
20
  require_relative "../config"
21
21
  require_relative "../mixin/shell_out"
22
22
  require_relative "../config_fetcher"
23
- require_relative "../dist"
23
+ require "chef-utils/dist" unless defined?(ChefUtils::Dist)
24
24
  require_relative "../daemon"
25
25
  require "chef-config/mixin/dot_d"
26
26
  require "license_acceptance/cli_flags/mixlib_cli"
27
- require "mixlib/archive" unless defined?(Mixlib::Archive)
27
+ module Mixlib
28
+ autoload :Archive, "mixlib/archive"
29
+ end
28
30
 
29
31
  # This is a temporary class being used as a part of an effort to reduce duplication
30
32
  # between Chef::Application::Client and Chef::Application::Solo.
@@ -55,7 +57,7 @@ class Chef::Application::Base < Chef::Application
55
57
 
56
58
  option :once,
57
59
  long: "--once",
58
- description: "Cancel any interval or splay options, run #{Chef::Dist::PRODUCT} once and exit.",
60
+ description: "Cancel any interval or splay options, run #{ChefUtils::Dist::Infra::PRODUCT} once and exit.",
59
61
  boolean: true
60
62
 
61
63
  option :formatter,
@@ -78,7 +80,7 @@ class Chef::Application::Base < Chef::Application
78
80
 
79
81
  option :profile_ruby,
80
82
  long: "--[no-]profile-ruby",
81
- description: "Dump complete Ruby call graph stack of entire #{Chef::Dist::PRODUCT} run (expert only).",
83
+ description: "Dump complete Ruby call graph stack of entire #{ChefUtils::Dist::Infra::PRODUCT} run (expert only).",
82
84
  boolean: true,
83
85
  default: false
84
86
 
@@ -134,7 +136,7 @@ class Chef::Application::Base < Chef::Application
134
136
  option :interval,
135
137
  short: "-i SECONDS",
136
138
  long: "--interval SECONDS",
137
- description: "Run #{Chef::Dist::PRODUCT} periodically, in seconds.",
139
+ description: "Run #{ChefUtils::Dist::Infra::PRODUCT} periodically, in seconds.",
138
140
  proc: lambda { |s| s.to_i }
139
141
 
140
142
  option :json_attribs,
@@ -158,12 +160,12 @@ class Chef::Application::Base < Chef::Application
158
160
  option :environment,
159
161
  short: "-E ENVIRONMENT",
160
162
  long: "--environment ENVIRONMENT",
161
- description: "Set the #{Chef::Dist::PRODUCT} environment on the node."
163
+ description: "Set the #{ChefUtils::Dist::Infra::PRODUCT} environment on the node."
162
164
 
163
165
  option :client_fork,
164
166
  short: "-f",
165
167
  long: "--[no-]fork",
166
- description: "Fork #{Chef::Dist::PRODUCT} process."
168
+ description: "Fork #{ChefUtils::Dist::Infra::PRODUCT} process."
167
169
 
168
170
  option :why_run,
169
171
  short: "-W",
@@ -190,14 +192,14 @@ class Chef::Application::Base < Chef::Application
190
192
  option :version,
191
193
  short: "-v",
192
194
  long: "--version",
193
- description: "Show #{Chef::Dist::PRODUCT} version.",
195
+ description: "Show #{ChefUtils::Dist::Infra::PRODUCT} version.",
194
196
  boolean: true,
195
- proc: lambda { |v| puts "#{Chef::Dist::PRODUCT}: #{::Chef::VERSION}" },
197
+ proc: lambda { |v| puts "#{ChefUtils::Dist::Infra::PRODUCT}: #{::Chef::VERSION}" },
196
198
  exit: 0
197
199
 
198
200
  option :minimal_ohai,
199
201
  long: "--minimal-ohai",
200
- description: "Only run the bare minimum Ohai plugins #{Chef::Dist::PRODUCT} needs to function.",
202
+ description: "Only run the bare minimum Ohai plugins #{ChefUtils::Dist::Infra::PRODUCT} needs to function.",
201
203
  boolean: true
202
204
 
203
205
  option :delete_entire_chef_repo,
@@ -213,7 +215,7 @@ class Chef::Application::Base < Chef::Application
213
215
  option :target,
214
216
  short: "-t TARGET",
215
217
  long: "--target TARGET",
216
- description: "Target #{Chef::Dist::PRODUCT} against a remote system or device",
218
+ description: "Target #{ChefUtils::Dist::Infra::PRODUCT} against a remote system or device",
217
219
  proc: lambda { |target|
218
220
  Chef::Log.warn "-- EXPERIMENTAL -- Target mode activated, resources and dsl may change without warning -- EXPERIMENTAL --"
219
221
  target
@@ -228,7 +230,7 @@ class Chef::Application::Base < Chef::Application
228
230
  option :fatal_windows_admin_check,
229
231
  short: "-A",
230
232
  long: "--fatal-windows-admin-check",
231
- description: "Fail the run when #{Chef::Dist::CLIENT} doesn't have administrator privileges on Windows.",
233
+ description: "Fail the run when #{ChefUtils::Dist::Infra::CLIENT} doesn't have administrator privileges on Windows.",
232
234
  boolean: true
233
235
  end
234
236
 
@@ -245,7 +247,7 @@ class Chef::Application::Base < Chef::Application
245
247
  option :chef_server_url,
246
248
  short: "-S CHEFSERVERURL",
247
249
  long: "--server CHEFSERVERURL",
248
- description: "The #{Chef::Dist::SERVER_PRODUCT} URL.",
250
+ description: "The #{ChefUtils::Dist::Server::PRODUCT} URL.",
249
251
  proc: nil
250
252
 
251
253
  option :validation_key,
@@ -263,7 +265,7 @@ class Chef::Application::Base < Chef::Application
263
265
  option :enable_reporting,
264
266
  short: "-R",
265
267
  long: "--enable-reporting",
266
- description: "(#{Chef::Dist::CLIENT} only) reporting data collection for runs.",
268
+ description: "(#{ChefUtils::Dist::Infra::CLIENT} only) reporting data collection for runs.",
267
269
  boolean: true
268
270
 
269
271
  option :local_mode,
@@ -274,11 +276,11 @@ class Chef::Application::Base < Chef::Application
274
276
 
275
277
  option :chef_zero_host,
276
278
  long: "--chef-zero-host HOST",
277
- description: "Host to start #{Chef::Dist::ZERO} on."
279
+ description: "Host to start #{ChefUtils::Dist::Zero::PRODUCT} on."
278
280
 
279
281
  option :chef_zero_port,
280
282
  long: "--chef-zero-port PORT",
281
- description: "Port (or port range) to start #{Chef::Dist::ZERO} on. Port ranges like 1000,1010 or 8889-9999 will try all given ports until one works."
283
+ description: "Port (or port range) to start #{ChefUtils::Dist::Zero::PRODUCT} on. Port ranges like 1000,1010 or 8889-9999 will try all given ports until one works."
282
284
 
283
285
  option :listen,
284
286
  long: "--[no-]listen",
@@ -287,7 +289,7 @@ class Chef::Application::Base < Chef::Application
287
289
 
288
290
  option :skip_cookbook_sync,
289
291
  long: "--[no-]skip-cookbook-sync",
290
- description: "(#{Chef::Dist::CLIENT} only) Use cached cookbooks without overwriting local differences from the #{Chef::Dist::SERVER_PRODUCT}.",
292
+ description: "(#{ChefUtils::Dist::Infra::CLIENT} only) Use cached cookbooks without overwriting local differences from the #{ChefUtils::Dist::Server::PRODUCT}.",
291
293
  boolean: false
292
294
 
293
295
  option :named_run_list,
@@ -326,7 +328,7 @@ class Chef::Application::Base < Chef::Application
326
328
  # Run the chef client, optionally daemonizing or looping at intervals.
327
329
  def run_application
328
330
  if Chef::Config[:version]
329
- puts "#{Chef::Dist::PRODUCT} version: #{::Chef::VERSION}"
331
+ puts "#{ChefUtils::Dist::Infra::PRODUCT} version: #{::Chef::VERSION}"
330
332
  end
331
333
 
332
334
  if !Chef::Config[:client_fork] || Chef::Config[:once]
@@ -346,20 +348,21 @@ class Chef::Application::Base < Chef::Application
346
348
  private
347
349
 
348
350
  def windows_interval_error_message
349
- "Windows #{Chef::Dist::PRODUCT} interval runs are not supported in #{Chef::Dist::PRODUCT} 15 and later." +
351
+ "Windows #{ChefUtils::Dist::Infra::PRODUCT} interval runs are not supported in #{ChefUtils::Dist::Infra::PRODUCT} 15 and later." +
350
352
  "\nConfiguration settings:" +
351
353
  ("\n interval = #{Chef::Config[:interval]} seconds" if Chef::Config[:interval]).to_s +
352
- "\nPlease manage #{Chef::Dist::PRODUCT} as a scheduled task instead."
354
+ "\nPlease manage #{ChefUtils::Dist::Infra::PRODUCT} as a scheduled task instead."
353
355
  end
354
356
 
355
357
  def unforked_interval_error_message
356
- "Unforked #{Chef::Dist::PRODUCT} interval runs are disabled by default." +
358
+ "Unforked #{ChefUtils::Dist::Infra::PRODUCT} interval runs are disabled by default." +
357
359
  "\nConfiguration settings:" +
358
360
  ("\n interval = #{Chef::Config[:interval]} seconds" if Chef::Config[:interval]).to_s +
359
- "\nEnable #{Chef::Dist::PRODUCT} interval runs by setting `:client_fork = true` in your config file or adding `--fork` to your command line options."
361
+ "\nEnable #{ChefUtils::Dist::Infra::PRODUCT} interval runs by setting `:client_fork = true` in your config file or adding `--fork` to your command line options."
360
362
  end
361
363
 
362
364
  def fetch_recipe_tarball(url, path)
365
+ require "open-uri" unless defined?(OpenURI)
363
366
  Chef::Log.trace("Download recipes tarball from #{url} to #{path}")
364
367
  if File.exist?(url)
365
368
  FileUtils.cp(url, path)
@@ -377,7 +380,7 @@ class Chef::Application::Base < Chef::Application
377
380
 
378
381
  def interval_run_chef_client
379
382
  if Chef::Config[:daemonize]
380
- Chef::Daemon.daemonize(Chef::Dist::PRODUCT)
383
+ Chef::Daemon.daemonize(ChefUtils::Dist::Infra::PRODUCT)
381
384
 
382
385
  # Start first daemonized run after configured number of seconds
383
386
  if Chef::Config[:daemonize].is_a?(Integer)
@@ -20,7 +20,13 @@
20
20
  require_relative "base"
21
21
  require_relative "../handler/error_report"
22
22
  require_relative "../workstation_config_loader"
23
- require "uri" unless defined?(URI)
23
+ autoload :URI, "uri"
24
+ require "chef-utils" unless defined?(ChefUtils)
25
+ module Mixlib
26
+ module Authentication
27
+ autoload :Log, "mixlib/authentication"
28
+ end
29
+ end
24
30
 
25
31
  # DO NOT MAKE EDITS, see Chef::Application::Base
26
32
  #
@@ -45,7 +51,7 @@ class Chef::Application::Client < Chef::Application::Base
45
51
  option :pid_file,
46
52
  short: "-P PID_FILE",
47
53
  long: "--pid PIDFILE",
48
- description: "Set the PID file location, for the #{Chef::Dist::CLIENT} daemon process. Defaults to /tmp/chef-client.pid.",
54
+ description: "Set the PID file location, for the #{ChefUtils::Dist::Infra::CLIENT} daemon process. Defaults to /tmp/chef-client.pid.",
49
55
  proc: nil
50
56
 
51
57
  option :runlist,
@@ -100,7 +106,7 @@ class Chef::Application::Client < Chef::Application::Base
100
106
  tarball_path = File.join(Chef::Config.chef_repo_path, "recipes.tgz")
101
107
  fetch_recipe_tarball(Chef::Config[:recipe_url], tarball_path)
102
108
  Mixlib::Archive.new(tarball_path).extract(Chef::Config.chef_repo_path, perms: false, ignore: /^\.$/)
103
- config_path = File.join(Chef::Config.chef_repo_path, "#{Chef::Dist::USER_CONF_DIR}/config.rb")
109
+ config_path = File.join(Chef::Config.chef_repo_path, "#{ChefUtils::Dist::Infra::USER_CONF_DIR}/config.rb")
104
110
  Chef::Config.from_string(IO.read(config_path), config_path) if File.file?(config_path)
105
111
  end
106
112
  end
@@ -147,7 +153,7 @@ class Chef::Application::Client < Chef::Application::Base
147
153
  if config[:local_mode]
148
154
  config[:config_file] = Chef::WorkstationConfigLoader.new(nil, Chef::Log).config_location
149
155
  else
150
- config[:config_file] = Chef::Config.platform_specific_path("#{Chef::Dist::CONF_DIR}/client.rb")
156
+ config[:config_file] = Chef::Config.platform_specific_path("#{ChefConfig::Config.etc_chef_dir}/client.rb")
151
157
  end
152
158
  end
153
159
 
@@ -22,7 +22,7 @@ class Chef
22
22
  # These are the exit codes defined in Chef RFC 062
23
23
  # https://github.com/chef/chef-rfc/blob/master/rfc062-exit-status.md
24
24
  class ExitCode
25
- require_relative "../dist"
25
+ require "chef-utils/dist" unless defined?(ChefUtils::Dist)
26
26
 
27
27
  # -1 is defined as DEPRECATED_FAILURE in RFC 062, so it is
28
28
  # not enumerated in an active constant.
@@ -36,6 +36,7 @@ class Chef
36
36
  REBOOT_NEEDED: 37,
37
37
  REBOOT_FAILED: 41,
38
38
  # 42 was used by audit mode and should not be reused
39
+ CONFIG_FAILURE: 43,
39
40
  CLIENT_UPGRADED: 213,
40
41
  }.freeze
41
42
 
@@ -79,6 +80,8 @@ class Chef
79
80
  VALID_RFC_062_EXIT_CODES[:REBOOT_NEEDED]
80
81
  elsif reboot_failed?(exception)
81
82
  VALID_RFC_062_EXIT_CODES[:REBOOT_FAILED]
83
+ elsif configuration_failure?(exception)
84
+ VALID_RFC_062_EXIT_CODES[:CONFIG_FAILURE]
82
85
  elsif client_upgraded?(exception)
83
86
  VALID_RFC_062_EXIT_CODES[:CLIENT_UPGRADED]
84
87
  else
@@ -104,6 +107,12 @@ class Chef
104
107
  end
105
108
  end
106
109
 
110
+ def configuration_failure?(exception)
111
+ resolve_exception_array(exception).any? do |e|
112
+ e.is_a? Chef::Exceptions::ConfigurationError
113
+ end
114
+ end
115
+
107
116
  def client_upgraded?(exception)
108
117
  resolve_exception_array(exception).any? do |e|
109
118
  e.is_a? Chef::Exceptions::ClientUpgraded
@@ -144,9 +153,9 @@ class Chef
144
153
  end
145
154
 
146
155
  def non_standard_exit_code_warning(exit_code)
147
- "#{Chef::Dist::CLIENT} attempted to exit with a non-standard exit code of #{exit_code}." \
148
- " The #{Chef::Dist::PRODUCT} Exit Codes design document (https://github.com/chef/chef-rfc/blob/master/rfc062-exit-status.md)" \
149
- " defines the exit codes that should be used with #{Chef::Dist::CLIENT}. Chef::Application::ExitCode defines" \
156
+ "#{ChefUtils::Dist::Infra::CLIENT} attempted to exit with a non-standard exit code of #{exit_code}." \
157
+ " The #{ChefUtils::Dist::Infra::PRODUCT} Exit Codes design document (https://github.com/chef/chef-rfc/blob/master/rfc062-exit-status.md)" \
158
+ " defines the exit codes that should be used with #{ChefUtils::Dist::Infra::CLIENT}. Chef::Application::ExitCode defines" \
150
159
  " valid exit codes Non-standard exit codes are redefined as GENERIC_FAILURE."
151
160
  end
152
161