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
@@ -18,7 +18,7 @@
18
18
 
19
19
  require_relative "package"
20
20
  require_relative "gem_package"
21
- require_relative "../dist"
21
+ require "chef-utils/dist" unless defined?(ChefUtils::Dist)
22
22
 
23
23
  class Chef
24
24
  class Resource
@@ -27,27 +27,27 @@ class Chef
27
27
  provides :chef_gem
28
28
 
29
29
  description <<~DESC
30
- Use the **chef_gem** resource to install a gem only for the instance of Ruby that is dedicated to the #{Chef::Dist::CLIENT}.
30
+ Use the **chef_gem** resource to install a gem only for the instance of Ruby that is dedicated to the #{ChefUtils::Dist::Infra::CLIENT}.
31
31
  When a gem is installed from a local file, it must be added to the node using the **remote_file** or **cookbook_file** resources.
32
32
 
33
33
  The **chef_gem** resource works with all of the same properties and options as the **gem_package** resource, but does not
34
- accept the `gem_binary` property because it always uses the `CurrentGemEnvironment` under which the `#{Chef::Dist::CLIENT}` is
34
+ accept the `gem_binary` property because it always uses the `CurrentGemEnvironment` under which the `#{ChefUtils::Dist::Infra::CLIENT}` is
35
35
  running. In addition to performing actions similar to the **gem_package** resource, the **chef_gem** resource does the
36
36
  following:
37
37
  - Runs its actions immediately, before convergence, allowing a gem to be used in a recipe immediately after it is installed.
38
38
  - Runs `Gem.clear_paths` after the action, ensuring that gem is aware of changes so that it can be required immediately after it is installed.
39
39
 
40
- Warning: The **chef_gem** and **gem_package** resources are both used to install Ruby gems. For any machine on which #{Chef::Dist::PRODUCT} is
40
+ Warning: The **chef_gem** and **gem_package** resources are both used to install Ruby gems. For any machine on which #{ChefUtils::Dist::Infra::PRODUCT} is
41
41
  installed, there are two instances of Ruby. One is the standard, system-wide instance of Ruby and the other is a dedicated instance that is
42
- available only to #{Chef::Dist::PRODUCT}.
43
- Use the **chef_gem** resource to install gems into the instance of Ruby that is dedicated to #{Chef::Dist::PRODUCT}.
42
+ available only to #{ChefUtils::Dist::Infra::PRODUCT}.
43
+ Use the **chef_gem** resource to install gems into the instance of Ruby that is dedicated to #{ChefUtils::Dist::Infra::PRODUCT}.
44
44
  Use the **gem_package** resource to install all other gems (i.e. install gems system-wide).
45
45
  DESC
46
46
 
47
47
  examples <<~EXAMPLES
48
48
  **Compile time vs. converge time installation of gems**
49
49
 
50
- To install a gem while #{Chef::Dist::PRODUCT} is configuring the node (the converge phase), set the `compile_time` property to `false`:
50
+ To install a gem while #{ChefUtils::Dist::Infra::PRODUCT} is configuring the node (the converge phase), set the `compile_time` property to `false`:
51
51
  ```ruby
52
52
  chef_gem 'right_aws' do
53
53
  compile_time false
@@ -63,7 +63,7 @@ class Chef
63
63
  end
64
64
  ```
65
65
 
66
- Install MySQL for Chef
66
+ **Install MySQL gem into #{ChefUtils::Dist::Infra::PRODUCT}***
67
67
  ```ruby
68
68
  apt_update
69
69
 
@@ -84,8 +84,8 @@ class Chef
84
84
 
85
85
  property :gem_binary, String,
86
86
  default: "#{RbConfig::CONFIG["bindir"]}/gem",
87
- default_description: "The `gem` binary included with #{Chef::Dist::PRODUCT}.",
88
- description: "The path of a gem binary to use for the installation. By default, the same version of Ruby that is used by #{Chef::Dist::PRODUCT} will be used.",
87
+ default_description: "The `gem` binary included with #{ChefUtils::Dist::Infra::PRODUCT}.",
88
+ description: "The path of a gem binary to use for the installation. By default, the same version of Ruby that is used by #{ChefUtils::Dist::Infra::PRODUCT} will be used.",
89
89
  callbacks: {
90
90
  "The `chef_gem` resource is restricted to the current gem environment, use `gem_package` to install to other environments." =>
91
91
  proc { |v| v == "#{RbConfig::CONFIG["bindir"]}/gem" },
@@ -16,7 +16,7 @@
16
16
  #
17
17
 
18
18
  require_relative "../resource"
19
- require_relative "../dist"
19
+ require "chef-utils/dist" unless defined?(ChefUtils::Dist)
20
20
 
21
21
  class Chef
22
22
  class Resource
@@ -25,8 +25,152 @@ class Chef
25
25
 
26
26
  provides(:chef_handler) { true }
27
27
 
28
- description "Use the **chef_handler** resource to install or uninstall reporting/exception handlers."
28
+ description "Use the **chef_handler** resource to enable handlers during a #{ChefUtils::Dist::Infra::PRODUCT} run. The resource allows arguments to be passed to #{ChefUtils::Dist::Infra::PRODUCT}, which then applies the conditions defined by the custom handler to the node attribute data collected during a #{ChefUtils::Dist::Infra::PRODUCT} run, and then processes the handler based on that data.\nThe **chef_handler** resource is typically defined early in a node's run-list (often being the first item). This ensures that all of the handlers will be available for the entire #{ChefUtils::Dist::Infra::PRODUCT} run."
29
29
  introduced "14.0"
30
+ examples <<~'DOC'
31
+ **Enable the 'MyHandler' handler**
32
+
33
+ The following example shows how to enable a fictional 'MyHandler' handler which is located on disk at `/etc/chef/my_handler.rb`. The handler will be configured to run with Chef Infra Client and will be passed values to the handler's initializer method:
34
+
35
+ ```ruby
36
+ chef_handler 'MyHandler' do
37
+ source '/etc/chef/my_handler.rb' # the file should already be at this path
38
+ arguments path: '/var/chef/reports'
39
+ action :enable
40
+ end
41
+ ```
42
+
43
+ **Enable handlers during the compile phase**
44
+
45
+ ```ruby
46
+ chef_handler 'Chef::Handler::JsonFile' do
47
+ source 'chef/handler/json_file'
48
+ arguments path: '/var/chef/reports'
49
+ action :enable
50
+ compile_time true
51
+ end
52
+ ```
53
+
54
+ **Handle only exceptions**
55
+
56
+ ```ruby
57
+ chef_handler 'Chef::Handler::JsonFile' do
58
+ source 'chef/handler/json_file'
59
+ arguments path: '/var/chef/reports'
60
+ type exception: true
61
+ action :enable
62
+ end
63
+ ```
64
+
65
+ **Cookbook Versions (a custom handler)**
66
+
67
+ [@juliandunn](https://github.com/juliandunn) created a custom report handler that logs all of the cookbooks and cookbook versions that were used during a Chef Infra Client run, and then reports after the run is complete.
68
+
69
+ cookbook_versions.rb:
70
+
71
+ The following custom handler defines how cookbooks and cookbook versions that are used during a Chef Infra Client run will be compiled into a report using the `Chef::Log` class in Chef Infra Client:
72
+
73
+ ```ruby
74
+ require 'chef/log'
75
+
76
+ module Chef
77
+ class CookbookVersionsHandler < Chef::Handler
78
+ def report
79
+ cookbooks = run_context.cookbook_collection
80
+ Chef::Log.info('Cookbooks and versions run: #{cookbooks.map {|x| x.name.to_s + ' ' + x.version }}')
81
+ end
82
+ end
83
+ end
84
+ ```
85
+
86
+ default.rb:
87
+
88
+ The following recipe is added to the run-list for every node on which a list of cookbooks and versions will be generated as report output after every Chef Infra Client run.
89
+
90
+ ```ruby
91
+ cookbook_file '/etc/chef/cookbook_versions.rb' do
92
+ source 'cookbook_versions.rb'
93
+ action :create
94
+ end
95
+
96
+ chef_handler 'Chef::CookbookVersionsHandler' do
97
+ source '/etc/chef/cookbook_versions.rb'
98
+ type report: true
99
+ action :enable
100
+ end
101
+ ```
102
+
103
+ This recipe will generate report output similar to the following:
104
+
105
+ [2013-11-26T03:11:06+00:00] INFO: Chef Infra Client Run complete in 0.300029878 seconds
106
+ [2013-11-26T03:11:06+00:00] INFO: Running report handlers
107
+ [2013-11-26T03:11:06+00:00] INFO: Cookbooks and versions run: ["cookbook_versions_handler 1.0.0"]
108
+ [2013-11-26T03:11:06+00:00] INFO: Report handlers complete
109
+ ```
110
+
111
+ **JsonFile Handler**
112
+
113
+ The JsonFile handler is available from the `chef_handler` cookbook and can be used with exceptions and reports. It serializes run status data to a JSON file. This handler may be enabled in one of the following ways.
114
+
115
+ By adding the following lines of Ruby code to either the client.rb file or the solo.rb file, depending on how Chef Infra Client is being run:
116
+
117
+ ```ruby
118
+ require 'chef/handler/json_file'
119
+ report_handlers << Chef::Handler::JsonFile.new(path: '/var/chef/reports')
120
+ exception_handlers << Chef::Handler::JsonFile.new(path: '/var/chef/reports')
121
+ ```
122
+
123
+ By using the `chef_handler` resource in a recipe, similar to the following:
124
+
125
+ ```ruby
126
+ chef_handler 'Chef::Handler::JsonFile' do
127
+ source 'chef/handler/json_file'
128
+ arguments path: '/var/chef/reports'
129
+ action :enable
130
+ end
131
+ ```
132
+
133
+ After it has run, the run status data can be loaded and inspected via Interactive Ruby (IRb):
134
+
135
+ ```
136
+ irb(main):002:0> require 'json' => true
137
+ irb(main):003:0> require 'chef' => true
138
+ irb(main):004:0> r = JSON.parse(IO.read('/var/chef/reports/chef-run-report-20110322060731.json')) => ... output truncated
139
+ irb(main):005:0> r.keys => ['end_time', 'node', 'updated_resources', 'exception', 'all_resources', 'success', 'elapsed_time', 'start_time', 'backtrace']
140
+ irb(main):006:0> r['elapsed_time'] => 0.00246
141
+ ```
142
+
143
+ Register the JsonFile handler
144
+
145
+ ```ruby
146
+ chef_handler 'Chef::Handler::JsonFile' do
147
+ source 'chef/handler/json_file'
148
+ arguments path: '/var/chef/reports'
149
+ action :enable
150
+ end
151
+ ```
152
+
153
+ **ErrorReport Handler**
154
+
155
+ The ErrorReport handler is built into Chef Infra Client and can be used for both exceptions and reports. It serializes error report data to a JSON file. This handler may be enabled in one of the following ways.
156
+
157
+ By adding the following lines of Ruby code to either the client.rb file or the solo.rb file, depending on how Chef Infra Client is being run:
158
+
159
+ ```ruby
160
+ require 'chef/handler/error_report'
161
+ report_handlers << Chef::Handler::ErrorReport.new
162
+ exception_handlers << Chef::Handler::ErrorReport.new
163
+ ```
164
+
165
+ By using the `chef_handler` resource in a recipe, similar to the following:
166
+
167
+ ```ruby
168
+ chef_handler 'Chef::Handler::ErrorReport' do
169
+ source 'chef/handler/error_report'
170
+ action :enable
171
+ end
172
+ ```
173
+ DOC
30
174
 
31
175
  property :class_name, String,
32
176
  description: "The name of the handler class. This can be module name-spaced.",
@@ -50,7 +194,7 @@ class Chef
50
194
  # This action needs to find an rb file that presumably contains the indicated class in it and the
51
195
  # load that file. It then instantiates that class by name and registers it as a handler.
52
196
  action :enable do
53
- description "Enables the handler for the current #{Chef::Dist::PRODUCT} run on the current node"
197
+ description "Enables the handler for the current #{ChefUtils::Dist::Infra::PRODUCT} run on the current node"
54
198
 
55
199
  class_name = new_resource.class_name
56
200
  new_resource.type.each do |type, enable|
@@ -74,7 +218,7 @@ class Chef
74
218
  end
75
219
 
76
220
  action :disable do
77
- description "Disables the handler for the current #{Chef::Dist::PRODUCT} run on the current node"
221
+ description "Disables the handler for the current #{ChefUtils::Dist::Infra::PRODUCT} run on the current node"
78
222
 
79
223
  new_resource.type.each_key do |type|
80
224
  unregister_handler(type, new_resource.class_name)
@@ -15,7 +15,7 @@
15
15
  #
16
16
 
17
17
  require_relative "../resource"
18
- require_relative "../dist"
18
+ require "chef-utils/dist" unless defined?(ChefUtils::Dist)
19
19
 
20
20
  class Chef
21
21
  class Resource
@@ -24,7 +24,7 @@ class Chef
24
24
 
25
25
  unified_mode true
26
26
 
27
- description "Use the **chef_sleep** resource to pause (sleep) for a number of seconds during a #{Chef::Dist::PRODUCT} run. Only use this resource when a command or service exits successfully but is not ready for the next step in a recipe."
27
+ description "Use the **chef_sleep** resource to pause (sleep) for a number of seconds during a #{ChefUtils::Dist::Infra::PRODUCT} run. Only use this resource when a command or service exits successfully but is not ready for the next step in a recipe."
28
28
  introduced "15.5"
29
29
  examples <<~DOC
30
30
  **Sleep for 10 seconds**:
@@ -16,7 +16,7 @@
16
16
  #
17
17
 
18
18
  require_relative "../resource"
19
- require "chef-vault"
19
+ autoload :ChefVault, "chef-vault"
20
20
 
21
21
  class Chef
22
22
  class Resource
@@ -21,7 +21,7 @@
21
21
  require_relative "file"
22
22
  require_relative "../provider/cookbook_file"
23
23
  require_relative "../mixin/securable"
24
- require_relative "../dist"
24
+ require "chef-utils/dist" unless defined?(ChefUtils::Dist)
25
25
 
26
26
  class Chef
27
27
  class Resource
@@ -31,7 +31,7 @@ class Chef
31
31
 
32
32
  provides :cookbook_file
33
33
 
34
- description "Use the **cookbook_file** resource to transfer files from a sub-directory of COOKBOOK_NAME/files/ to a specified path located on a host that is running the #{Chef::Dist::PRODUCT}. The file is selected according to file specificity, which allows different source files to be used based on the hostname, host platform (operating system, distro, or as appropriate), or platform version. Files that are located in the COOKBOOK_NAME/files/default sub-directory may be used on any platform.\n\nDuring a #{Chef::Dist::PRODUCT} run, the checksum for each local file is calculated and then compared against the checksum for the same file as it currently exists in the cookbook on the #{Chef::Dist::SERVER_PRODUCT}. A file is not transferred when the checksums match. Only files that require an update are transferred from the #{Chef::Dist::SERVER_PRODUCT} to a node."
34
+ description "Use the **cookbook_file** resource to transfer files from a sub-directory of COOKBOOK_NAME/files/ to a specified path located on a host that is running the #{ChefUtils::Dist::Infra::PRODUCT}. The file is selected according to file specificity, which allows different source files to be used based on the hostname, host platform (operating system, distro, or as appropriate), or platform version. Files that are located in the COOKBOOK_NAME/files/default sub-directory may be used on any platform.\n\nDuring a #{ChefUtils::Dist::Infra::PRODUCT} run, the checksum for each local file is calculated and then compared against the checksum for the same file as it currently exists in the cookbook on the #{ChefUtils::Dist::Server::PRODUCT}. A file is not transferred when the checksums match. Only files that require an update are transferred from the #{ChefUtils::Dist::Server::PRODUCT} to a node."
35
35
 
36
36
  property :source, [ String, Array ],
37
37
  description: "The name of the file in COOKBOOK_NAME/files/default or the path to a file located in COOKBOOK_NAME/files. The path must include the file name and its extension. This can be used to distribute specific files depending upon the platform used.",
@@ -18,7 +18,6 @@
18
18
  require_relative "../../resource"
19
19
  require_relative "../helpers/cron_validations"
20
20
  require "shellwords" unless defined?(Shellwords)
21
- require_relative "../../dist"
22
21
 
23
22
  class Chef
24
23
  class Resource
@@ -18,7 +18,7 @@
18
18
  require_relative "package"
19
19
  require_relative "../mixin/which"
20
20
  require_relative "../mixin/shell_out"
21
- require_relative "../dist"
21
+ require "chef-utils/dist" unless defined?(ChefUtils::Dist)
22
22
 
23
23
  class Chef
24
24
  class Resource
@@ -52,7 +52,7 @@ class Chef
52
52
 
53
53
  # Flush the in-memory available/installed cache, this does not flush the dnf caches on disk
54
54
  property :flush_cache, Hash,
55
- description: "Flush the in-memory cache before or after a DNF operation that installs, upgrades, or removes a package. DNF automatically synchronizes remote metadata to a local cache. The #{Chef::Dist::CLIENT} creates a copy of the local cache, and then stores it in-memory during the #{Chef::Dist::CLIENT} run. The in-memory cache allows packages to be installed during the #{Chef::Dist::CLIENT} run without the need to continue synchronizing the remote metadata to the local cache while the #{Chef::Dist::CLIENT} run is in-progress.",
55
+ description: "Flush the in-memory cache before or after a DNF operation that installs, upgrades, or removes a package. DNF automatically synchronizes remote metadata to a local cache. The #{ChefUtils::Dist::Infra::CLIENT} creates a copy of the local cache, and then stores it in-memory during the #{ChefUtils::Dist::Infra::CLIENT} run. The in-memory cache allows packages to be installed during the #{ChefUtils::Dist::Infra::CLIENT} run without the need to continue synchronizing the remote metadata to the local cache while the #{ChefUtils::Dist::Infra::CLIENT} run is in-progress.",
56
56
  default: { before: false, after: false },
57
57
  coerce: proc { |v|
58
58
  if v.is_a?(Hash)
@@ -16,7 +16,6 @@
16
16
  # limitations under the License.
17
17
  #
18
18
  require_relative "../dsl/powershell"
19
- require_relative "../dist"
20
19
 
21
20
  class Chef
22
21
  class Resource
@@ -19,7 +19,7 @@
19
19
  require_relative "../resource"
20
20
  require_relative "../exceptions"
21
21
  require_relative "../dsl/powershell"
22
- require_relative "../dist"
22
+ require "chef-utils/dist" unless defined?(ChefUtils::Dist)
23
23
 
24
24
  class Chef
25
25
  class Resource
@@ -29,7 +29,7 @@ class Chef
29
29
  unified_mode true
30
30
  provides :dsc_script
31
31
 
32
- description "Many DSC resources are comparable to built-in #{Chef::Dist::PRODUCT} resources. For example, both DSC and #{Chef::Dist::PRODUCT} have file, package, and service resources. The dsc_script resource is most useful for those DSC resources that do not have a direct comparison to a resource in #{Chef::Dist::PRODUCT}, such as the Archive resource, a custom DSC resource, an existing DSC script that performs an important task, and so on. Use the dsc_script resource to embed the code that defines a DSC configuration directly within a #{Chef::Dist::PRODUCT} recipe."
32
+ description "Many DSC resources are comparable to built-in #{ChefUtils::Dist::Infra::PRODUCT} resources. For example, both DSC and #{ChefUtils::Dist::Infra::PRODUCT} have file, package, and service resources. The dsc_script resource is most useful for those DSC resources that do not have a direct comparison to a resource in #{ChefUtils::Dist::Infra::PRODUCT}, such as the Archive resource, a custom DSC resource, an existing DSC script that performs an important task, and so on. Use the dsc_script resource to embed the code that defines a DSC configuration directly within a #{ChefUtils::Dist::Infra::PRODUCT} recipe."
33
33
 
34
34
  default_action :run
35
35
 
@@ -18,7 +18,7 @@
18
18
  #
19
19
 
20
20
  require_relative "../resource"
21
- require_relative "../dist"
21
+ require "chef-utils/dist" unless defined?(ChefUtils::Dist)
22
22
 
23
23
  class Chef
24
24
  class Resource
@@ -533,7 +533,7 @@ class Chef
533
533
  description: "The group name or group ID that must be changed before running a command."
534
534
 
535
535
  property :live_stream, [ TrueClass, FalseClass ], default: false,
536
- description: "Send the output of the command run by this execute resource block to the #{Chef::Dist::PRODUCT} event stream."
536
+ description: "Send the output of the command run by this execute resource block to the #{ChefUtils::Dist::Infra::PRODUCT} event stream."
537
537
 
538
538
  # default_env defaults to `false` so that the command execution more exactly matches what the user gets on the command line without magic
539
539
  property :default_env, [ TrueClass, FalseClass ], desired_state: false, default: false,
@@ -553,7 +553,7 @@ class Chef
553
553
 
554
554
  property :domain, String,
555
555
  introduced: "12.21",
556
- description: "Windows only: The domain of the user user specified by the user property. If not specified, the user name and password specified by the user and password properties will be used to resolve that user against the domain in which the system running #{Chef::Dist::PRODUCT} is joined, or if that system is not joined to a domain it will resolve the user as a local account on that system. An alternative way to specify the domain is to leave this property unspecified and specify the domain as part of the user property."
556
+ description: "Windows only: The domain of the user user specified by the user property. If not specified, the user name and password specified by the user and password properties will be used to resolve that user against the domain in which the system running #{ChefUtils::Dist::Infra::PRODUCT} is joined, or if that system is not joined to a domain it will resolve the user as a local account on that system. An alternative way to specify the domain is to leave this property unspecified and specify the domain as part of the user property."
557
557
 
558
558
  property :password, String, sensitive: true,
559
559
  introduced: "12.21",
@@ -561,11 +561,11 @@ class Chef
561
561
 
562
562
  # lazy used to set default value of sensitive to true if password is set
563
563
  property :sensitive, [ TrueClass, FalseClass ],
564
- description: "Ensure that sensitive resource data is not logged by the #{Chef::Dist::PRODUCT}.",
564
+ description: "Ensure that sensitive resource data is not logged by the #{ChefUtils::Dist::Infra::PRODUCT}.",
565
565
  default: lazy { password ? true : false }, default_description: "True if the password property is set. False otherwise."
566
566
 
567
567
  property :elevated, [ TrueClass, FalseClass ], default: false,
568
- description: "Determines whether the script will run with elevated permissions to circumvent User Access Control (UAC) interactively blocking the process.\nThis will cause the process to be run under a batch login instead of an interactive login. The user running #{Chef::Dist::CLIENT} needs the 'Replace a process level token' and 'Adjust Memory Quotas for a process' permissions. The user that is running the command needs the 'Log on as a batch job' permission.\nBecause this requires a login, the user and password properties are required.",
568
+ description: "Determines whether the script will run with elevated permissions to circumvent User Access Control (UAC) interactively blocking the process.\nThis will cause the process to be run under a batch login instead of an interactive login. The user running #{ChefUtils::Dist::Infra::CLIENT} needs the 'Replace a process level token' and 'Adjust Memory Quotas for a process' permissions. The user that is running the command needs the 'Log on as a batch job' permission.\nBecause this requires a login, the user and password properties are required.",
569
569
  introduced: "13.3"
570
570
 
571
571
  property :input, [String],
@@ -587,7 +587,7 @@ class Chef
587
587
  ancestor_attributes = superclass.guard_inherited_attributes
588
588
  end
589
589
 
590
- ancestor_attributes.concat(@class_inherited_attributes ? @class_inherited_attributes : []).uniq
590
+ ancestor_attributes.concat(@class_inherited_attributes || []).uniq
591
591
  end
592
592
 
593
593
  # post resource creation validation
@@ -22,7 +22,7 @@ require_relative "../platform/query_helpers"
22
22
  require_relative "../mixin/securable"
23
23
  require_relative "file/verification"
24
24
  require "pathname" unless defined?(Pathname)
25
- require_relative "../dist"
25
+ require "chef-utils" unless defined?(ChefUtils)
26
26
 
27
27
  class Chef
28
28
  class Resource
@@ -56,7 +56,7 @@ class Chef
56
56
  allowed_actions :create, :delete, :touch, :create_if_missing
57
57
 
58
58
  property :path, String, name_property: true,
59
- description: "The full path to the file, including the file name and its extension. For example: /files/file.txt. Default value: the name of the resource block. Microsoft Windows: A path that begins with a forward slash (/) will point to the root of the current working directory of the #{Chef::Dist::CLIENT} process. This path can vary from system to system. Therefore, using a path that begins with a forward slash (/) is not recommended."
59
+ description: "The full path to the file, including the file name and its extension. For example: /files/file.txt. Default value: the name of the resource block. Microsoft Windows: A path that begins with a forward slash (/) will point to the root of the current working directory of the #{ChefUtils::Dist::Infra::CLIENT} process. This path can vary from system to system. Therefore, using a path that begins with a forward slash (/) is not recommended."
60
60
 
61
61
  property :atomic_update, [ TrueClass, FalseClass ], desired_state: false, default: lazy { docker? && special_docker_files?(path) ? false : Chef::Config[:file_atomic_update] },
62
62
  default_description: "False if modifying /etc/hosts, /etc/hostname, or /etc/resolv.conf within Docker containers. Otherwise default to the client.rb 'file_atomic_update' config value.",
@@ -76,10 +76,10 @@ class Chef
76
76
  property :diff, [ String, nil ], desired_state: false, skip_docs: true
77
77
 
78
78
  property :force_unlink, [ TrueClass, FalseClass ], desired_state: false, default: false,
79
- description: "How #{Chef::Dist::PRODUCT} handles certain situations when the target file turns out not to be a file. For example, when a target file is actually a symlink. Set to `true` for #{Chef::Dist::PRODUCT} to delete the non-file target and replace it with the specified file. Set to `false` for #{Chef::Dist::PRODUCT} to raise an error."
79
+ description: "How #{ChefUtils::Dist::Infra::PRODUCT} handles certain situations when the target file turns out not to be a file. For example, when a target file is actually a symlink. Set to `true` for #{ChefUtils::Dist::Infra::PRODUCT} to delete the non-file target and replace it with the specified file. Set to `false` for #{ChefUtils::Dist::Infra::PRODUCT} to raise an error."
80
80
 
81
81
  property :manage_symlink_source, [ TrueClass, FalseClass ], desired_state: false,
82
- description: "Change the behavior of the file resource if it is pointed at a symlink. When this value is set to true, #{Chef::Dist::PRODUCT} will manage the symlink's permissions or will replace the symlink with a normal file if the resource has content. When this value is set to false, #{Chef::Dist::PRODUCT} will follow the symlink and will manage the permissions and content of symlink's target file. The default behavior is true but emits a warning that the default value will be changed to false in a future version; setting this explicitly to true or false suppresses this warning."
82
+ description: "Change the behavior of the file resource if it is pointed at a symlink. When this value is set to true, #{ChefUtils::Dist::Infra::PRODUCT} will manage the symlink's permissions or will replace the symlink with a normal file if the resource has content. When this value is set to false, #{ChefUtils::Dist::Infra::PRODUCT} will follow the symlink and will manage the permissions and content of symlink's target file. The default behavior is true but emits a warning that the default value will be changed to false in a future version; setting this explicitly to true or false suppresses this warning."
83
83
 
84
84
  property :verifications, Array, default: lazy { [] }
85
85
 
@@ -17,7 +17,7 @@
17
17
  #
18
18
 
19
19
  require_relative "package"
20
- require_relative "../dist"
20
+ require "chef-utils/dist" unless defined?(ChefUtils::Dist)
21
21
 
22
22
  class Chef
23
23
  class Resource
@@ -31,10 +31,10 @@ class Chef
31
31
 
32
32
  Note: The **gem_package** resource must be specified as `gem_package` and cannot be shortened to `package` in a recipe.
33
33
 
34
- Warning: The **chef_gem** and **gem_package** resources are both used to install Ruby gems. For any machine on which #{Chef::Dist::PRODUCT} is
34
+ Warning: The **chef_gem** and **gem_package** resources are both used to install Ruby gems. For any machine on which #{ChefUtils::Dist::Infra::PRODUCT} is
35
35
  installed, there are two instances of Ruby. One is the standard, system-wide instance of Ruby and the other is a dedicated instance that is
36
- available only to #{Chef::Dist::PRODUCT}.
37
- Use the **chef_gem** resource to install gems into the instance of Ruby that is dedicated to #{Chef::Dist::PRODUCT}.
36
+ available only to #{ChefUtils::Dist::Infra::PRODUCT}.
37
+ Use the **chef_gem** resource to install gems into the instance of Ruby that is dedicated to #{ChefUtils::Dist::Infra::PRODUCT}.
38
38
  Use the **gem_package** resource to install all other gems (i.e. install gems system-wide).
39
39
  DESC
40
40
 
@@ -86,7 +86,7 @@ class Chef
86
86
  default: lazy { Chef::Config[:clear_gem_sources] }, desired_state: false
87
87
 
88
88
  property :gem_binary, String, desired_state: false,
89
- description: "The path of a gem binary to use for the installation. By default, the same version of Ruby that is used by #{Chef::Dist::PRODUCT} will be used."
89
+ description: "The path of a gem binary to use for the installation. By default, the same version of Ruby that is used by #{ChefUtils::Dist::Infra::PRODUCT} will be used."
90
90
 
91
91
  property :include_default_source, [ TrueClass, FalseClass, nil ],
92
92
  description: "Set to `false` to not include `Chef::Config[:rubygems_url]` in the sources.",