chef 15.11.3-universal-mingw32 → 16.1.16-universal-mingw32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (513) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +3 -7
  3. data/README.md +1 -1
  4. data/Rakefile +44 -16
  5. data/chef.gemspec +6 -4
  6. data/distro/powershell/chef/chef.psm1 +3 -3
  7. data/distro/templates/powershell/chef/chef.psm1.erb +3 -3
  8. data/lib/chef/action_collection.rb +16 -5
  9. data/lib/chef/application.rb +33 -54
  10. data/lib/chef/application/apply.rb +18 -1
  11. data/lib/chef/application/base.rb +8 -3
  12. data/lib/chef/application/knife.rb +1 -1
  13. data/lib/chef/chef_class.rb +4 -4
  14. data/lib/chef/chef_fs/file_system/chef_server/acls_dir.rb +1 -1
  15. data/lib/chef/chef_fs/file_system/chef_server/cookbook_file.rb +1 -1
  16. data/lib/chef/chef_fs/file_system/chef_server/rest_list_entry.rb +6 -2
  17. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_root_dir.rb +3 -3
  18. data/lib/chef/chef_fs/file_system/repository/directory.rb +1 -1
  19. data/lib/chef/chef_fs/parallelizer/parallel_enumerable.rb +1 -1
  20. data/lib/chef/chef_fs/path_utils.rb +3 -3
  21. data/lib/chef/client.rb +16 -14
  22. data/lib/chef/config.rb +1 -1
  23. data/lib/chef/cookbook/file_system_file_vendor.rb +1 -1
  24. data/lib/chef/cookbook/gem_installer.rb +1 -1
  25. data/lib/chef/cookbook/metadata.rb +45 -22
  26. data/lib/chef/cookbook_loader.rb +1 -1
  27. data/lib/chef/cookbook_manifest.rb +1 -1
  28. data/lib/chef/cookbook_site_streaming_uploader.rb +1 -1
  29. data/lib/chef/cookbook_version.rb +38 -3
  30. data/lib/chef/data_collector.rb +1 -1
  31. data/lib/chef/data_collector/error_handlers.rb +1 -1
  32. data/lib/chef/data_collector/run_end_message.rb +7 -1
  33. data/lib/chef/decorator/lazy_array.rb +2 -2
  34. data/lib/chef/deprecated.rb +4 -0
  35. data/lib/chef/digester.rb +4 -4
  36. data/lib/chef/dist.rb +8 -0
  37. data/lib/chef/dsl/chef_vault.rb +84 -0
  38. data/lib/chef/dsl/declare_resource.rb +7 -5
  39. data/lib/chef/dsl/platform_introspection.rb +3 -2
  40. data/lib/chef/dsl/recipe.rb +7 -12
  41. data/lib/chef/dsl/universal.rb +3 -7
  42. data/lib/chef/encrypted_data_bag_item/decryptor.rb +1 -1
  43. data/lib/chef/encrypted_data_bag_item/encryptor.rb +1 -1
  44. data/lib/chef/event_dispatch/base.rb +3 -0
  45. data/lib/chef/formatters/base.rb +1 -1
  46. data/lib/chef/formatters/doc.rb +1 -1
  47. data/lib/chef/formatters/indentable_output_stream.rb +7 -16
  48. data/lib/chef/http.rb +1 -1
  49. data/lib/chef/http/decompressor.rb +1 -1
  50. data/lib/chef/http/http_request.rb +3 -2
  51. data/lib/chef/json_compat.rb +1 -1
  52. data/lib/chef/key.rb +1 -1
  53. data/lib/chef/knife.rb +2 -4
  54. data/lib/chef/knife/acl_add.rb +57 -0
  55. data/lib/chef/knife/acl_base.rb +183 -0
  56. data/lib/chef/knife/acl_bulk_add.rb +78 -0
  57. data/lib/chef/knife/acl_bulk_remove.rb +83 -0
  58. data/lib/chef/knife/acl_remove.rb +62 -0
  59. data/lib/chef/knife/acl_show.rb +56 -0
  60. data/lib/chef/knife/bootstrap.rb +84 -90
  61. data/lib/chef/knife/bootstrap/chef_vault_handler.rb +2 -2
  62. data/lib/chef/knife/bootstrap/client_builder.rb +2 -2
  63. data/lib/chef/knife/bootstrap/templates/chef-full.erb +11 -11
  64. data/lib/chef/knife/bootstrap/templates/windows-chef-client-msi.erb +12 -12
  65. data/lib/chef/knife/core/bootstrap_context.rb +63 -60
  66. data/lib/chef/knife/core/generic_presenter.rb +4 -3
  67. data/lib/chef/knife/core/hashed_command_loader.rb +1 -1
  68. data/lib/chef/knife/core/node_presenter.rb +2 -2
  69. data/lib/chef/knife/core/status_presenter.rb +5 -5
  70. data/lib/chef/knife/core/subcommand_loader.rb +1 -1
  71. data/lib/chef/knife/core/ui.rb +17 -1
  72. data/lib/chef/knife/core/windows_bootstrap_context.rb +44 -42
  73. data/lib/chef/knife/data_bag_secret_options.rb +18 -45
  74. data/lib/chef/knife/group_add.rb +55 -0
  75. data/lib/chef/knife/{cookbook_site_download.rb → group_create.rb} +21 -12
  76. data/lib/chef/knife/group_destroy.rb +53 -0
  77. data/lib/chef/knife/{cookbook_site_list.rb → group_list.rb} +14 -11
  78. data/lib/chef/knife/group_remove.rb +56 -0
  79. data/lib/chef/knife/{cookbook_site_install.rb → group_show.rb} +21 -12
  80. data/lib/chef/knife/key_create_base.rb +1 -1
  81. data/lib/chef/knife/key_edit_base.rb +1 -1
  82. data/lib/chef/knife/ssh.rb +12 -31
  83. data/lib/chef/knife/status.rb +3 -3
  84. data/lib/chef/knife/supermarket_download.rb +1 -2
  85. data/lib/chef/knife/supermarket_install.rb +2 -3
  86. data/lib/chef/knife/supermarket_list.rb +1 -2
  87. data/lib/chef/knife/supermarket_search.rb +1 -2
  88. data/lib/chef/knife/supermarket_share.rb +1 -2
  89. data/lib/chef/knife/supermarket_show.rb +1 -2
  90. data/lib/chef/knife/supermarket_unshare.rb +1 -2
  91. data/lib/chef/knife/{cookbook_site_show.rb → user_dissociate.rb} +15 -13
  92. data/lib/chef/knife/{cookbook_site_search.rb → user_invite_add.rb} +16 -13
  93. data/lib/chef/knife/user_invite_list.rb +34 -0
  94. data/lib/chef/knife/user_invite_rescind.rb +63 -0
  95. data/lib/chef/knife/yaml_convert.rb +91 -0
  96. data/lib/chef/mixin/api_version_request_handling.rb +1 -1
  97. data/lib/chef/mixin/checksum.rb +0 -1
  98. data/lib/chef/mixin/openssl_helper.rb +4 -4
  99. data/lib/chef/mixin/powershell_exec.rb +10 -1
  100. data/lib/chef/mixin/powershell_out.rb +1 -1
  101. data/lib/chef/mixin/properties.rb +16 -2
  102. data/lib/chef/mixin/shell_out.rb +1 -5
  103. data/lib/chef/monkey_patches/net_http.rb +0 -4
  104. data/lib/chef/node.rb +18 -6
  105. data/lib/chef/node/attribute.rb +2 -2
  106. data/lib/chef/node/immutable_collections.rb +1 -1
  107. data/lib/chef/node/mixin/immutablize_array.rb +4 -0
  108. data/lib/chef/node/mixin/immutablize_hash.rb +3 -0
  109. data/lib/chef/node_map.rb +5 -31
  110. data/lib/chef/platform/priority_map.rb +4 -4
  111. data/lib/chef/platform/query_helpers.rb +6 -34
  112. data/lib/chef/policy_builder/policyfile.rb +1 -1
  113. data/lib/chef/powershell.rb +14 -0
  114. data/lib/chef/property.rb +24 -6
  115. data/lib/chef/provider.rb +40 -6
  116. data/lib/chef/provider/cron.rb +2 -2
  117. data/lib/chef/provider/directory.rb +3 -3
  118. data/lib/chef/provider/dsc_resource.rb +1 -1
  119. data/lib/chef/provider/dsc_script.rb +1 -1
  120. data/lib/chef/provider/execute.rb +3 -9
  121. data/lib/chef/provider/file.rb +6 -6
  122. data/lib/chef/provider/git.rb +84 -27
  123. data/lib/chef/provider/group.rb +4 -4
  124. data/lib/chef/provider/http_request.rb +6 -6
  125. data/lib/chef/provider/ifconfig.rb +4 -4
  126. data/lib/chef/provider/launchd.rb +45 -64
  127. data/lib/chef/provider/link.rb +2 -2
  128. data/lib/chef/provider/mount.rb +5 -5
  129. data/lib/chef/provider/osx_profile.rb +7 -3
  130. data/lib/chef/provider/package.rb +2 -2
  131. data/lib/chef/provider/package/cab.rb +5 -6
  132. data/lib/chef/provider/package/chocolatey.rb +1 -3
  133. data/lib/chef/provider/package/dnf.rb +66 -10
  134. data/lib/chef/provider/package/dnf/dnf_helper.py +85 -26
  135. data/lib/chef/provider/package/dnf/python_helper.rb +79 -36
  136. data/lib/chef/provider/package/dnf/version.rb +5 -1
  137. data/lib/chef/provider/package/dpkg.rb +1 -1
  138. data/lib/chef/provider/package/freebsd/base.rb +2 -1
  139. data/lib/chef/provider/package/homebrew.rb +107 -43
  140. data/lib/chef/provider/package/macports.rb +0 -2
  141. data/lib/chef/provider/package/msu.rb +4 -1
  142. data/lib/chef/provider/package/pacman.rb +25 -34
  143. data/lib/chef/provider/package/portage.rb +1 -0
  144. data/lib/chef/provider/package/powershell.rb +1 -1
  145. data/lib/chef/provider/package/rubygems.rb +30 -3
  146. data/lib/chef/provider/package/windows.rb +29 -53
  147. data/lib/chef/provider/package/windows/msi.rb +2 -2
  148. data/lib/chef/provider/package/yum.rb +1 -9
  149. data/lib/chef/provider/package/yum/yum_cache.rb +1 -1
  150. data/lib/chef/provider/package/zypper.rb +0 -1
  151. data/lib/chef/provider/powershell_script.rb +5 -11
  152. data/lib/chef/provider/registry_key.rb +4 -4
  153. data/lib/chef/provider/remote_directory.rb +5 -5
  154. data/lib/chef/provider/remote_file/ftp.rb +3 -2
  155. data/lib/chef/provider/remote_file/local_file.rb +2 -1
  156. data/lib/chef/provider/remote_file/sftp.rb +3 -2
  157. data/lib/chef/provider/route.rb +5 -3
  158. data/lib/chef/provider/ruby_block.rb +1 -1
  159. data/lib/chef/provider/script.rb +2 -2
  160. data/lib/chef/provider/service.rb +8 -8
  161. data/lib/chef/provider/service/aixinit.rb +1 -1
  162. data/lib/chef/provider/service/arch.rb +1 -1
  163. data/lib/chef/provider/service/debian.rb +30 -28
  164. data/lib/chef/provider/service/macosx.rb +16 -10
  165. data/lib/chef/provider/service/systemd.rb +12 -12
  166. data/lib/chef/provider/service/upstart.rb +1 -1
  167. data/lib/chef/provider/service/windows.rb +5 -11
  168. data/lib/chef/provider/subversion.rb +25 -5
  169. data/lib/chef/provider/systemd_unit.rb +26 -25
  170. data/lib/chef/provider/user.rb +6 -6
  171. data/lib/chef/provider/user/aix.rb +1 -1
  172. data/lib/chef/provider/user/dscl.rb +6 -6
  173. data/lib/chef/provider/user/mac.rb +20 -15
  174. data/lib/chef/provider/whyrun_safe_ruby_block.rb +1 -1
  175. data/lib/chef/provider/windows_env.rb +3 -3
  176. data/lib/chef/provider/windows_script.rb +2 -2
  177. data/lib/chef/provider/windows_task.rb +10 -10
  178. data/lib/chef/providers.rb +0 -6
  179. data/lib/chef/recipe.rb +36 -0
  180. data/lib/chef/resource.rb +44 -57
  181. data/lib/chef/resource/action_class.rb +24 -22
  182. data/lib/chef/resource/alternatives.rb +210 -0
  183. data/lib/chef/resource/apt_package.rb +33 -3
  184. data/lib/chef/resource/apt_preference.rb +103 -7
  185. data/lib/chef/resource/apt_repository.rb +357 -18
  186. data/lib/chef/resource/apt_update.rb +58 -5
  187. data/lib/chef/resource/archive_file.rb +6 -5
  188. data/lib/chef/resource/bash.rb +3 -1
  189. data/lib/chef/resource/batch.rb +1 -1
  190. data/lib/chef/resource/bff_package.rb +10 -2
  191. data/lib/chef/resource/breakpoint.rb +1 -2
  192. data/lib/chef/resource/build_essential.rb +49 -51
  193. data/lib/chef/resource/cab_package.rb +9 -2
  194. data/lib/chef/resource/chef_client_cron.rb +228 -0
  195. data/lib/chef/resource/chef_client_scheduled_task.rb +201 -0
  196. data/lib/chef/resource/chef_client_systemd_timer.rb +180 -0
  197. data/lib/chef/resource/chef_gem.rb +15 -18
  198. data/lib/chef/resource/chef_handler.rb +5 -4
  199. data/lib/chef/resource/chef_sleep.rb +7 -5
  200. data/lib/chef/resource/chef_vault_secret.rb +135 -0
  201. data/lib/chef/resource/chocolatey_config.rb +8 -4
  202. data/lib/chef/resource/chocolatey_feature.rb +7 -4
  203. data/lib/chef/resource/chocolatey_package.rb +7 -4
  204. data/lib/chef/resource/chocolatey_source.rb +7 -4
  205. data/lib/chef/resource/cookbook_file.rb +4 -3
  206. data/lib/chef/resource/cron.rb +34 -80
  207. data/lib/chef/resource/cron_access.rb +10 -6
  208. data/lib/chef/resource/cron_d.rb +44 -95
  209. data/lib/chef/resource/csh.rb +3 -1
  210. data/lib/chef/resource/directory.rb +3 -3
  211. data/lib/chef/resource/dmg_package.rb +22 -19
  212. data/lib/chef/resource/dnf_package.rb +3 -4
  213. data/lib/chef/resource/dpkg_package.rb +3 -2
  214. data/lib/chef/resource/dsc_resource.rb +6 -4
  215. data/lib/chef/resource/dsc_script.rb +3 -2
  216. data/lib/chef/resource/execute.rb +15 -14
  217. data/lib/chef/resource/file.rb +14 -9
  218. data/lib/chef/resource/freebsd_package.rb +3 -2
  219. data/lib/chef/resource/gem_package.rb +19 -11
  220. data/lib/chef/resource/group.rb +5 -2
  221. data/lib/chef/resource/helpers/cron_validations.rb +98 -0
  222. data/lib/chef/resource/homebrew_cask.rb +3 -2
  223. data/lib/chef/resource/homebrew_package.rb +5 -3
  224. data/lib/chef/resource/homebrew_tap.rb +3 -2
  225. data/lib/chef/resource/hostname.rb +26 -20
  226. data/lib/chef/resource/http_request.rb +1 -2
  227. data/lib/chef/resource/ifconfig.rb +8 -8
  228. data/lib/chef/resource/ips_package.rb +11 -3
  229. data/lib/chef/resource/kernel_module.rb +30 -30
  230. data/lib/chef/resource/ksh.rb +3 -1
  231. data/lib/chef/resource/launchd.rb +3 -3
  232. data/lib/chef/resource/link.rb +5 -27
  233. data/lib/chef/resource/locale.rb +60 -26
  234. data/lib/chef/resource/log.rb +13 -2
  235. data/lib/chef/resource/lwrp_base.rb +1 -1
  236. data/lib/chef/resource/macos_userdefaults.rb +18 -10
  237. data/lib/chef/resource/macosx_service.rb +3 -2
  238. data/lib/chef/resource/macports_package.rb +10 -2
  239. data/lib/chef/resource/mdadm.rb +63 -3
  240. data/lib/chef/resource/mount.rb +4 -1
  241. data/lib/chef/resource/msu_package.rb +19 -2
  242. data/lib/chef/resource/notify_group.rb +8 -3
  243. data/lib/chef/resource/ohai.rb +20 -4
  244. data/lib/chef/resource/ohai_hint.rb +4 -13
  245. data/lib/chef/resource/openbsd_package.rb +10 -2
  246. data/lib/chef/resource/openssl_dhparam.rb +11 -2
  247. data/lib/chef/resource/openssl_ec_private_key.rb +24 -2
  248. data/lib/chef/resource/openssl_ec_public_key.rb +22 -2
  249. data/lib/chef/resource/openssl_rsa_private_key.rb +21 -2
  250. data/lib/chef/resource/openssl_rsa_public_key.rb +23 -2
  251. data/lib/chef/resource/openssl_x509_certificate.rb +38 -2
  252. data/lib/chef/resource/openssl_x509_crl.rb +13 -2
  253. data/lib/chef/resource/openssl_x509_request.rb +38 -2
  254. data/lib/chef/resource/osx_profile.rb +4 -3
  255. data/lib/chef/resource/package.rb +3 -2
  256. data/lib/chef/resource/pacman_package.rb +3 -2
  257. data/lib/chef/resource/paludis_package.rb +13 -4
  258. data/lib/chef/resource/perl.rb +3 -1
  259. data/lib/chef/resource/plist.rb +207 -0
  260. data/lib/chef/resource/portage_package.rb +14 -4
  261. data/lib/chef/resource/powershell_package.rb +2 -4
  262. data/lib/chef/resource/powershell_package_source.rb +4 -2
  263. data/lib/chef/resource/powershell_script.rb +8 -18
  264. data/lib/chef/resource/python.rb +3 -1
  265. data/lib/chef/resource/reboot.rb +1 -2
  266. data/lib/chef/resource/registry_key.rb +2 -3
  267. data/lib/chef/resource/remote_directory.rb +3 -1
  268. data/lib/chef/resource/remote_file.rb +3 -2
  269. data/lib/chef/resource/rhsm_errata.rb +1 -4
  270. data/lib/chef/resource/rhsm_errata_level.rb +1 -2
  271. data/lib/chef/resource/rhsm_register.rb +3 -3
  272. data/lib/chef/resource/rhsm_repo.rb +4 -3
  273. data/lib/chef/resource/rhsm_subscription.rb +5 -4
  274. data/lib/chef/resource/route.rb +6 -2
  275. data/lib/chef/resource/rpm_package.rb +13 -3
  276. data/lib/chef/resource/ruby.rb +3 -1
  277. data/lib/chef/resource/ruby_block.rb +2 -5
  278. data/lib/chef/resource/scm/_scm.rb +49 -0
  279. data/lib/chef/resource/{scm.rb → scm/git.rb} +16 -30
  280. data/lib/chef/resource/{subversion.rb → scm/subversion.rb} +10 -7
  281. data/lib/chef/resource/script.rb +7 -4
  282. data/lib/chef/resource/service.rb +7 -8
  283. data/lib/chef/resource/smartos_package.rb +10 -2
  284. data/lib/chef/resource/snap_package.rb +4 -2
  285. data/lib/chef/resource/solaris_package.rb +10 -2
  286. data/lib/chef/resource/ssh_known_hosts_entry.rb +6 -3
  287. data/lib/chef/resource/sudo.rb +11 -11
  288. data/lib/chef/resource/support/cron.d.erb +1 -1
  289. data/lib/chef/resource/support/cron_access.erb +1 -1
  290. data/lib/chef/resource/support/sudoer.erb +1 -2
  291. data/lib/chef/resource/support/ulimit.erb +41 -0
  292. data/lib/chef/resource/swap_file.rb +7 -5
  293. data/lib/chef/resource/sysctl.rb +63 -4
  294. data/lib/chef/resource/systemd_unit.rb +6 -4
  295. data/lib/chef/resource/template.rb +0 -1
  296. data/lib/chef/resource/timezone.rb +8 -19
  297. data/lib/chef/resource/user.rb +3 -5
  298. data/lib/chef/resource/user/aix_user.rb +0 -2
  299. data/lib/chef/resource/user/dscl_user.rb +1 -1
  300. data/lib/chef/resource/user/linux_user.rb +0 -2
  301. data/lib/chef/resource/user/mac_user.rb +1 -1
  302. data/lib/chef/resource/user/pw_user.rb +0 -2
  303. data/lib/chef/resource/user/solaris_user.rb +0 -2
  304. data/lib/chef/resource/user/windows_user.rb +0 -2
  305. data/lib/chef/resource/user_ulimit.rb +116 -0
  306. data/lib/chef/resource/whyrun_safe_ruby_block.rb +1 -0
  307. data/lib/chef/resource/windows_ad_join.rb +20 -7
  308. data/lib/chef/resource/windows_auto_run.rb +2 -3
  309. data/lib/chef/resource/windows_certificate.rb +3 -3
  310. data/lib/chef/resource/windows_dfs_folder.rb +1 -2
  311. data/lib/chef/resource/windows_dfs_namespace.rb +1 -2
  312. data/lib/chef/resource/windows_dfs_server.rb +2 -3
  313. data/lib/chef/resource/windows_dns_record.rb +0 -1
  314. data/lib/chef/resource/windows_dns_zone.rb +0 -1
  315. data/lib/chef/resource/windows_env.rb +12 -4
  316. data/lib/chef/resource/windows_feature.rb +59 -4
  317. data/lib/chef/resource/windows_feature_dism.rb +24 -24
  318. data/lib/chef/resource/windows_feature_powershell.rb +44 -78
  319. data/lib/chef/resource/windows_firewall_rule.rb +121 -8
  320. data/lib/chef/resource/windows_font.rb +10 -2
  321. data/lib/chef/resource/windows_package.rb +76 -7
  322. data/lib/chef/resource/windows_pagefile.rb +31 -4
  323. data/lib/chef/resource/windows_path.rb +18 -2
  324. data/lib/chef/resource/windows_printer.rb +26 -7
  325. data/lib/chef/resource/windows_printer_port.rb +29 -2
  326. data/lib/chef/resource/windows_script.rb +3 -4
  327. data/lib/chef/resource/windows_security_policy.rb +119 -0
  328. data/lib/chef/resource/windows_service.rb +46 -32
  329. data/lib/chef/resource/windows_share.rb +22 -6
  330. data/lib/chef/resource/windows_shortcut.rb +13 -3
  331. data/lib/chef/resource/windows_task.rb +129 -16
  332. data/lib/chef/resource/windows_uac.rb +20 -2
  333. data/lib/chef/resource/windows_user_privilege.rb +199 -0
  334. data/lib/chef/resource/windows_workgroup.rb +19 -4
  335. data/lib/chef/resource/yum_package.rb +91 -7
  336. data/lib/chef/resource/yum_repository.rb +30 -12
  337. data/lib/chef/resource/zypper_package.rb +32 -5
  338. data/lib/chef/resource/zypper_repository.rb +19 -6
  339. data/lib/chef/resource_builder.rb +8 -0
  340. data/lib/chef/resource_inspector.rb +3 -2
  341. data/lib/chef/resource_resolver.rb +7 -14
  342. data/lib/chef/resources.rb +11 -3
  343. data/lib/chef/run_context/cookbook_compiler.rb +29 -5
  344. data/lib/chef/scan_access_control.rb +1 -1
  345. data/lib/chef/shell.rb +22 -0
  346. data/lib/chef/shell/ext.rb +1 -1
  347. data/lib/chef/version.rb +1 -1
  348. data/lib/chef/win32/api.rb +2 -2
  349. data/lib/chef/win32/api/error.rb +3 -1
  350. data/lib/chef/win32/api/file.rb +1 -1
  351. data/lib/chef/win32/api/net.rb +1 -0
  352. data/lib/chef/win32/api/security.rb +6 -0
  353. data/lib/chef/win32/file.rb +1 -9
  354. data/lib/chef/win32/mutex.rb +1 -1
  355. data/lib/chef/win32/net.rb +1 -0
  356. data/lib/chef/win32/security.rb +40 -2
  357. data/lib/chef/win32/security/sid.rb +4 -4
  358. data/spec/functional/assets/inittest +8 -7
  359. data/spec/functional/knife/ssh_spec.rb +23 -19
  360. data/spec/functional/resource/cron_spec.rb +10 -29
  361. data/spec/functional/resource/dnf_package_spec.rb +441 -156
  362. data/spec/functional/resource/git_spec.rb +184 -134
  363. data/spec/functional/resource/insserv_spec.rb +1 -1
  364. data/spec/functional/resource/launchd_spec.rb +232 -0
  365. data/spec/functional/resource/link_spec.rb +3 -3
  366. data/spec/functional/resource/locale_spec.rb +13 -2
  367. data/spec/functional/resource/msu_package_spec.rb +5 -2
  368. data/spec/functional/resource/powershell_script_spec.rb +7 -68
  369. data/spec/functional/resource/remote_file_spec.rb +1 -1
  370. data/spec/functional/resource/windows_security_policy_spec.rb +90 -0
  371. data/spec/functional/resource/windows_task_spec.rb +4 -4
  372. data/spec/functional/resource/windows_user_privilege_spec.rb +193 -0
  373. data/spec/functional/run_lock_spec.rb +1 -1
  374. data/spec/functional/shell_spec.rb +1 -1
  375. data/spec/functional/util/powershell/cmdlet_spec.rb +1 -1
  376. data/spec/functional/version_spec.rb +1 -1
  377. data/spec/functional/win32/registry_spec.rb +0 -6
  378. data/spec/functional/win32/security_spec.rb +22 -0
  379. data/spec/integration/client/client_spec.rb +123 -2
  380. data/spec/integration/knife/cookbook_show_spec.rb +28 -26
  381. data/spec/integration/knife/data_bag_show_spec.rb +1 -1
  382. data/spec/integration/knife/raw_spec.rb +34 -6
  383. data/spec/integration/knife/redirection_spec.rb +2 -2
  384. data/spec/integration/knife/show_spec.rb +32 -3
  385. data/spec/integration/recipes/lwrp_inline_resources_spec.rb +3 -3
  386. data/spec/integration/recipes/noop_resource_spec.rb +1 -1
  387. data/spec/integration/recipes/notifies_spec.rb +49 -20
  388. data/spec/integration/recipes/notifying_block_spec.rb +8 -5
  389. data/spec/integration/recipes/provider_choice.rb +2 -0
  390. data/spec/integration/recipes/recipe_dsl_spec.rb +45 -143
  391. data/spec/integration/recipes/resource_action_spec.rb +16 -11
  392. data/spec/integration/recipes/resource_converge_if_changed_spec.rb +1 -1
  393. data/spec/integration/recipes/resource_load_spec.rb +133 -12
  394. data/spec/integration/recipes/use_partial_spec.rb +112 -0
  395. data/spec/integration/solo/solo_spec.rb +3 -3
  396. data/spec/spec_helper.rb +18 -3
  397. data/spec/support/chef_helpers.rb +2 -2
  398. data/spec/support/lib/chef/resource/zen_follower.rb +2 -0
  399. data/spec/support/platform_helpers.rb +2 -20
  400. data/spec/support/recipe_dsl_helper.rb +83 -0
  401. data/spec/support/shared/functional/http.rb +2 -2
  402. data/spec/support/shared/functional/windows_script.rb +3 -16
  403. data/spec/support/shared/integration/knife_support.rb +9 -6
  404. data/spec/support/shared/unit/mock_shellout.rb +1 -1
  405. data/spec/support/shared/unit/provider/useradd_based_user_provider.rb +4 -4
  406. data/spec/unit/application/apply_spec.rb +3 -0
  407. data/spec/unit/application/client_spec.rb +5 -1
  408. data/spec/unit/application_spec.rb +1 -2
  409. data/spec/unit/client_spec.rb +7 -5
  410. data/spec/unit/cookbook/gem_installer_spec.rb +2 -2
  411. data/spec/unit/cookbook/metadata_spec.rb +38 -19
  412. data/spec/unit/data_collector_spec.rb +39 -18
  413. data/spec/unit/file_access_control_spec.rb +1 -1
  414. data/spec/unit/json_compat_spec.rb +1 -1
  415. data/spec/unit/knife/bootstrap/chef_vault_handler_spec.rb +15 -15
  416. data/spec/unit/knife/bootstrap/client_builder_spec.rb +9 -9
  417. data/spec/unit/knife/bootstrap_spec.rb +20 -38
  418. data/spec/unit/knife/cookbook_show_spec.rb +1 -0
  419. data/spec/unit/knife/core/bootstrap_context_spec.rb +23 -43
  420. data/spec/unit/knife/core/ui_spec.rb +16 -0
  421. data/spec/unit/knife/core/windows_bootstrap_context_spec.rb +9 -63
  422. data/spec/unit/knife/data_bag_secret_options_spec.rb +22 -14
  423. data/spec/unit/knife/ssh_spec.rb +8 -111
  424. data/spec/unit/knife/status_spec.rb +1 -1
  425. data/spec/unit/knife_spec.rb +18 -0
  426. data/spec/unit/mixin/openssl_helper_spec.rb +4 -4
  427. data/spec/unit/mixin/powershell_exec_spec.rb +10 -0
  428. data/spec/unit/mixin/shell_out_spec.rb +25 -31
  429. data/spec/unit/node/attribute_spec.rb +3 -3
  430. data/spec/unit/node_spec.rb +24 -0
  431. data/spec/unit/platform/query_helpers_spec.rb +0 -143
  432. data/spec/unit/property/state_spec.rb +12 -7
  433. data/spec/unit/property/validation_spec.rb +25 -1
  434. data/spec/unit/property_spec.rb +12 -9
  435. data/spec/unit/provider/apt_preference_spec.rb +14 -10
  436. data/spec/unit/provider/apt_repository_spec.rb +34 -36
  437. data/spec/unit/provider/apt_update_spec.rb +12 -11
  438. data/spec/unit/provider/cookbook_file_spec.rb +4 -4
  439. data/spec/unit/provider/cron_spec.rb +2 -2
  440. data/spec/unit/provider/directory_spec.rb +4 -15
  441. data/spec/unit/provider/file_spec.rb +4 -4
  442. data/spec/unit/provider/git_spec.rb +41 -1
  443. data/spec/unit/provider/group/groupadd_spec.rb +1 -1
  444. data/spec/unit/provider/launchd_spec.rb +8 -50
  445. data/spec/unit/provider/link_spec.rb +0 -1
  446. data/spec/unit/provider/log_spec.rb +3 -3
  447. data/spec/unit/provider/mdadm_spec.rb +3 -3
  448. data/spec/unit/provider/package/dnf/python_helper_spec.rb +1 -1
  449. data/spec/unit/provider/package/homebrew_spec.rb +280 -174
  450. data/spec/unit/provider/package/pacman_spec.rb +65 -147
  451. data/spec/unit/provider/package/portage_spec.rb +2 -2
  452. data/spec/unit/provider/package/powershell_spec.rb +3 -2
  453. data/spec/unit/provider/package/rubygems_spec.rb +211 -26
  454. data/spec/unit/provider/package/windows/exe_spec.rb +1 -1
  455. data/spec/unit/provider/powershell_script_spec.rb +21 -61
  456. data/spec/unit/provider/remote_file_spec.rb +3 -4
  457. data/spec/unit/provider/service/debian_service_spec.rb +34 -13
  458. data/spec/unit/provider/service/macosx_spec.rb +210 -214
  459. data/spec/unit/provider/service/systemd_service_spec.rb +23 -23
  460. data/spec/unit/provider/subversion_spec.rb +4 -2
  461. data/spec/unit/provider/template_spec.rb +3 -4
  462. data/spec/unit/provider/zypper_repository_spec.rb +17 -17
  463. data/spec/unit/provider_resolver_spec.rb +4 -4
  464. data/spec/unit/recipe_spec.rb +68 -0
  465. data/spec/unit/resource/alternatives_spec.rb +120 -0
  466. data/spec/unit/resource/apt_preference_spec.rb +0 -18
  467. data/spec/unit/resource/apt_repository_spec.rb +0 -18
  468. data/spec/unit/resource/apt_update_spec.rb +0 -18
  469. data/spec/unit/resource/chef_client_cron_spec.rb +119 -0
  470. data/spec/unit/resource/chef_client_scheduled_task_spec.rb +102 -0
  471. data/spec/unit/resource/chef_client_systemd_timer_spec.rb +70 -0
  472. data/spec/unit/resource/chef_vault_secret_spec.rb +40 -0
  473. data/spec/unit/resource/chocolatey_source_spec.rb +2 -1
  474. data/spec/unit/resource/cron_d_spec.rb +6 -48
  475. data/spec/unit/resource/cron_spec.rb +4 -10
  476. data/spec/unit/resource/gem_package_spec.rb +3 -3
  477. data/spec/unit/resource/helpers/cron_validations_spec.rb +77 -0
  478. data/spec/unit/resource/link_spec.rb +0 -4
  479. data/spec/unit/resource/locale_spec.rb +0 -34
  480. data/spec/unit/resource/msu_package_spec.rb +4 -0
  481. data/spec/unit/resource/ohai_spec.rb +56 -2
  482. data/spec/unit/resource/plist_spec.rb +130 -0
  483. data/spec/unit/resource/powershell_script_spec.rb +0 -5
  484. data/spec/unit/resource/{git_spec.rb → scm/git_spec.rb} +50 -2
  485. data/spec/unit/resource/{scm_spec.rb → scm/scm.rb} +1 -52
  486. data/spec/unit/resource/{subversion_spec.rb → scm/subversion_spec.rb} +2 -3
  487. data/spec/unit/resource/service_spec.rb +4 -0
  488. data/spec/unit/resource/user_spec.rb +2 -2
  489. data/spec/unit/resource/user_ulimit_spec.rb +53 -0
  490. data/spec/unit/resource/windows_feature_dism_spec.rb +2 -17
  491. data/spec/unit/resource/windows_feature_powershell_spec.rb +2 -17
  492. data/spec/unit/resource/windows_firewall_rule_spec.rb +88 -41
  493. data/spec/unit/resource/windows_package_spec.rb +14 -0
  494. data/spec/unit/resource/windows_service_spec.rb +9 -0
  495. data/spec/unit/resource_reporter_spec.rb +2 -6
  496. data/spec/unit/resource_spec.rb +10 -3
  497. data/spec/unit/run_lock_spec.rb +1 -1
  498. data/spec/unit/scan_access_control_spec.rb +1 -1
  499. data/spec/unit/search/query_spec.rb +1 -1
  500. data/spec/unit/win32/registry_spec.rb +1 -1
  501. data/tasks/rspec.rb +6 -14
  502. metadata +92 -37
  503. data/lib/chef/dsl/core.rb +0 -52
  504. data/lib/chef/knife/cookbook_site_share.rb +0 -41
  505. data/lib/chef/knife/cookbook_site_unshare.rb +0 -41
  506. data/lib/chef/provider/apt_preference.rb +0 -93
  507. data/lib/chef/provider/apt_repository.rb +0 -358
  508. data/lib/chef/provider/apt_update.rb +0 -79
  509. data/lib/chef/provider/log.rb +0 -43
  510. data/lib/chef/provider/mdadm.rb +0 -85
  511. data/lib/chef/provider/ohai.rb +0 -45
  512. data/lib/chef/resource/git.rb +0 -37
  513. data/spec/unit/provider/ohai_spec.rb +0 -84
@@ -351,28 +351,40 @@ class Chef
351
351
  run_list.detect { |r| r == item } ? true : false
352
352
  end
353
353
 
354
- # Consume data from ohai and Attributes provided as JSON on the command line.
354
+ # Handles both the consumption of ohai data and possibly JSON attributes from the CLI
355
+ #
356
+ # @api private
355
357
  def consume_external_attrs(ohai_data, json_cli_attrs)
356
358
  # FIXME(log): should be trace
357
359
  logger.debug("Extracting run list from JSON attributes provided on command line")
358
360
  consume_attributes(json_cli_attrs)
359
361
 
360
362
  self.automatic_attrs = ohai_data
363
+ fix_automatic_attributes
364
+ end
365
+
366
+ # This is for ohai plugins to consume ohai data and have it merged, it should probably be renamed
367
+ #
368
+ # @api private
369
+ def consume_ohai_data(ohai_data)
370
+ self.automatic_attrs = Chef::Mixin::DeepMerge.merge(automatic_attrs, ohai_data)
371
+ fix_automatic_attributes
372
+ end
361
373
 
374
+ # Always ensure that certain automatic attributes are populated and constructed correctly
375
+ #
376
+ # @api private
377
+ def fix_automatic_attributes
362
378
  platform, version = Chef::Platform.find_platform_and_version(self)
363
379
  # FIXME(log): should be trace
364
380
  logger.debug("Platform is #{platform} version #{version}")
365
381
  automatic[:platform] = platform
366
- automatic[:platform_version] = version
382
+ automatic[:platform_version] = Chef::VersionString.new(version)
367
383
  automatic[:chef_guid] = Chef::Config[:chef_guid] || ( Chef::Config[:chef_guid] = node_uuid )
368
384
  automatic[:name] = name
369
385
  automatic[:chef_environment] = chef_environment
370
386
  end
371
387
 
372
- def consume_ohai_data(ohai_data)
373
- self.automatic_attrs = Chef::Mixin::DeepMerge.merge(automatic_attrs, ohai_data)
374
- end
375
-
376
388
  # Consumes the combined run_list and other attributes in +attrs+
377
389
  def consume_attributes(attrs)
378
390
  normal_attrs_to_merge = consume_run_list(attrs)
@@ -184,7 +184,7 @@ class Chef
184
184
  # return the role level override attribute component
185
185
  attr_reader :role_override
186
186
 
187
- # return the enviroment level override attribute component
187
+ # return the environment level override attribute component
188
188
  attr_reader :env_override
189
189
 
190
190
  # return the force override level attribute component
@@ -535,7 +535,7 @@ class Chef
535
535
  e
536
536
  end
537
537
 
538
- # Deep merge all attribute levels using hash-only merging between different precidence
538
+ # Deep merge all attribute levels using hash-only merging between different precedence
539
539
  # levels (so override arrays completely replace arrays set at any default level).
540
540
  #
541
541
  # The path allows for selectively deep-merging a subtree of the node object.
@@ -120,7 +120,7 @@ class Chef
120
120
  # ImmutableMash acts like a Mash (Hash that is indifferent to String or
121
121
  # Symbol keys), with some important exceptions:
122
122
  # * Methods that mutate state are overridden to raise an error instead.
123
- # * Methods that read from the collection are overriden so that they check
123
+ # * Methods that read from the collection are overridden so that they check
124
124
  # if the Chef::Node::Attribute has been modified since an instance of
125
125
  # this class was generated. An error is raised if the object detects that
126
126
  # it is stale.
@@ -43,6 +43,7 @@ class Chef
43
43
  compact
44
44
  count
45
45
  cycle
46
+ deconstruct
46
47
  detect
47
48
  difference
48
49
  dig
@@ -59,6 +60,7 @@ class Chef
59
60
  entries
60
61
  fetch
61
62
  filter
63
+ filter_map
62
64
  find
63
65
  find_all
64
66
  find_index
@@ -71,6 +73,7 @@ class Chef
71
73
  include?
72
74
  index
73
75
  inject
76
+ intersection
74
77
  join
75
78
  last
76
79
  lazy
@@ -113,6 +116,7 @@ class Chef
113
116
  sum
114
117
  take
115
118
  take_while
119
+ tally
116
120
  to_a
117
121
  to_ary
118
122
  to_csv
@@ -40,6 +40,7 @@ class Chef
40
40
  compare_by_identity?
41
41
  count
42
42
  cycle
43
+ deconstruct_keys
43
44
  default
44
45
  default_proc
45
46
  detect
@@ -60,6 +61,7 @@ class Chef
60
61
  fetch
61
62
  fetch_values
62
63
  filter
64
+ filter_map
63
65
  find
64
66
  find_all
65
67
  find_index
@@ -109,6 +111,7 @@ class Chef
109
111
  sum
110
112
  take
111
113
  take_while
114
+ tally
112
115
  to_a
113
116
  to_h
114
117
  to_hash
@@ -55,14 +55,13 @@ class Chef
55
55
  #
56
56
  # @return [NodeMap] Returns self for possible chaining
57
57
  #
58
- def set(key, klass, platform: nil, platform_version: nil, platform_family: nil, os: nil, canonical: nil, override: nil, chef_version: nil, target_mode: nil, &block)
58
+ def set(key, klass, platform: nil, platform_version: nil, platform_family: nil, os: nil, override: nil, chef_version: nil, target_mode: nil, &block)
59
59
  new_matcher = { klass: klass }
60
60
  new_matcher[:platform] = platform if platform
61
61
  new_matcher[:platform_version] = platform_version if platform_version
62
62
  new_matcher[:platform_family] = platform_family if platform_family
63
63
  new_matcher[:os] = os if os
64
64
  new_matcher[:block] = block if block
65
- new_matcher[:canonical] = canonical if canonical
66
65
  new_matcher[:override] = override if override
67
66
  new_matcher[:target_mode] = target_mode
68
67
 
@@ -113,16 +112,14 @@ class Chef
113
112
  # @param node [Chef::Node] The Chef::Node object for the run, or `nil` to
114
113
  # ignore all filters.
115
114
  # @param key [Object] Key to look up
116
- # @param canonical [Boolean] `true` or `false` to match canonical or
117
- # non-canonical values only. `nil` to ignore canonicality. Default: `nil`
118
115
  #
119
116
  # @return [Object] Class
120
117
  #
121
- def get(node, key, canonical: nil)
118
+ def get(node, key)
122
119
  return nil unless map.key?(key)
123
120
 
124
121
  map[key].map do |matcher|
125
- return matcher[:klass] if node_matches?(node, matcher) && canonical_matches?(canonical, matcher)
122
+ return matcher[:klass] if node_matches?(node, matcher)
126
123
  end
127
124
  nil
128
125
  end
@@ -134,16 +131,14 @@ class Chef
134
131
  # @param node [Chef::Node] The Chef::Node object for the run, or `nil` to
135
132
  # ignore all filters.
136
133
  # @param key [Object] Key to look up
137
- # @param canonical [Boolean] `true` or `false` to match canonical or
138
- # non-canonical values only. `nil` to ignore canonicality. Default: `nil`
139
134
  #
140
135
  # @return [Object] Class
141
136
  #
142
- def list(node, key, canonical: nil)
137
+ def list(node, key)
143
138
  return [] unless map.key?(key)
144
139
 
145
140
  map[key].select do |matcher|
146
- node_matches?(node, matcher) && canonical_matches?(canonical, matcher)
141
+ node_matches?(node, matcher)
147
142
  end.map { |matcher| matcher[:klass] }
148
143
  end
149
144
 
@@ -174,21 +169,6 @@ class Chef
174
169
  deleted
175
170
  end
176
171
 
177
- # Seriously, don't use this, it's nearly certain to change on you
178
- # @return remaining
179
- # @api private
180
- def delete_canonical(key, klass)
181
- remaining = map[key]
182
- if remaining
183
- remaining.delete_if { |matcher| matcher[:canonical] && Array(matcher[:klass]) == Array(klass) }
184
- if remaining.empty?
185
- map.delete(key)
186
- remaining = nil
187
- end
188
- end
189
- remaining
190
- end
191
-
192
172
  # Check if this map has been locked.
193
173
  #
194
174
  # @api internal
@@ -299,12 +279,6 @@ class Chef
299
279
  filters_match?(node, matcher) && block_matches?(node, matcher[:block])
300
280
  end
301
281
 
302
- def canonical_matches?(canonical, matcher)
303
- return true if canonical.nil?
304
-
305
- !!canonical == !!matcher[:canonical]
306
- end
307
-
308
282
  #
309
283
  # "provides" lines with identical filters sort by class name (ascending).
310
284
  #
@@ -21,8 +21,8 @@ require_relative "../node_map"
21
21
  class Chef
22
22
  class Platform
23
23
  class PriorityMap < Chef::NodeMap
24
- def priority(resource_name, priority_array, *filter)
25
- set_priority_array(resource_name.to_sym, priority_array, *filter)
24
+ def priority(resource_name, priority_array, **filter)
25
+ set_priority_array(resource_name.to_sym, priority_array, **filter)
26
26
  end
27
27
 
28
28
  # @api private
@@ -31,9 +31,9 @@ class Chef
31
31
  end
32
32
 
33
33
  # @api private
34
- def set_priority_array(key, priority_array, *filter, &block)
34
+ def set_priority_array(key, priority_array, **filter, &block)
35
35
  priority_array = Array(priority_array)
36
- set(key, priority_array, *filter, &block)
36
+ set(key, priority_array, **filter, &block)
37
37
  priority_array
38
38
  end
39
39
  end
@@ -26,49 +26,21 @@ class Chef
26
26
  ChefUtils.windows?
27
27
  end
28
28
 
29
+ # @deprecated Windows Nano is not a thing anymore so this check shouldn't be used
29
30
  def windows_nano_server?
30
- return false unless windows?
31
-
32
- require "win32/registry" unless defined?(Win32::Registry)
33
-
34
- # This method may be called before ohai runs (e.g., it may be used to
35
- # determine settings in config.rb). Chef::Win32::Registry.new uses
36
- # node attributes to verify the machine architecture which aren't
37
- # accessible before ohai runs.
38
- nano = nil
39
- key = "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Server\\ServerLevels"
40
- access = ::Win32::Registry::KEY_QUERY_VALUE | 0x0100 # nano is 64-bit only
41
- begin
42
- ::Win32::Registry::HKEY_LOCAL_MACHINE.open(key, access) do |reg|
43
- nano = reg["NanoServer"]
44
- end
45
- rescue ::Win32::Registry::Error
46
- # If accessing the registry key failed, then we're probably not on
47
- # nano. Fail through.
48
- end
49
- nano == 1
31
+ false
50
32
  end
51
33
 
34
+ # @deprecated we added this method due to Windows Server Nano, which is no longer a platform
52
35
  def supports_msi?
53
36
  return false unless windows?
54
37
 
55
- require "win32/registry" unless defined?(Win32::Registry)
56
-
57
- key = "System\\CurrentControlSet\\Services\\msiserver"
58
- access = ::Win32::Registry::KEY_QUERY_VALUE
59
-
60
- begin
61
- ::Win32::Registry::HKEY_LOCAL_MACHINE.open(key, access) do |reg|
62
- true
63
- end
64
- rescue ::Win32::Registry::Error
65
- false
66
- end
38
+ true
67
39
  end
68
40
 
41
+ # @deprecated we don't support any release of Windows that isn't PS 3+
69
42
  def supports_powershell_execution_bypass?(node)
70
- node[:languages] && node[:languages][:powershell] &&
71
- node[:languages][:powershell][:version].to_i >= 3
43
+ true
72
44
  end
73
45
 
74
46
  def supports_dsc?(node)
@@ -328,7 +328,7 @@ class Chef
328
328
  end
329
329
  end
330
330
 
331
- # Do some mimimal validation of the policyfile we fetched from the
331
+ # Do some minimal validation of the policyfile we fetched from the
332
332
  # server. Compatibility mode relies on using data bags to store policy
333
333
  # files; therefore no real validation will be performed server-side and
334
334
  # we need to make additional checks to ensure the data will be formatted
@@ -39,12 +39,26 @@ class Chef
39
39
  exec(script)
40
40
  end
41
41
 
42
+ #
43
+ # Was there an error running the command
44
+ #
45
+ # @return [Boolean]
46
+ #
42
47
  def error?
43
48
  return true if errors.count > 0
44
49
 
45
50
  false
46
51
  end
47
52
 
53
+ class CommandFailed < RuntimeError; end
54
+
55
+ #
56
+ # @raise [Chef::PowerShell::CommandFailed] raise if the command failed
57
+ #
58
+ def error!
59
+ raise Chef::PowerShell::CommandFailed, "Unexpected exit in PowerShell command: #{@errors}" if error?
60
+ end
61
+
48
62
  private
49
63
 
50
64
  def exec(script)
@@ -1,6 +1,7 @@
1
1
  #
2
2
  # Author:: John Keiser <jkeiser@chef.io>
3
- # Copyright:: Copyright 2015-2016, John Keiser.
3
+ # Copyright:: Copyright 2015-2016, John Keiser
4
+ # Copyright:: Copyright (c) Chef Software Inc.
4
5
  # License:: Apache License, Version 2.0
5
6
  #
6
7
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -140,6 +141,10 @@ class Chef
140
141
  raise ArgumentError, "A property cannot be both a name_property/name_attribute and have a default value. Use one or the other on property #{self}"
141
142
  end
142
143
 
144
+ if options[:name_property]
145
+ options[:desired_state] = false unless options.key?(:desired_state)
146
+ end
147
+
143
148
  # Recursively freeze the default if it isn't a lazy value.
144
149
  unless default.is_a?(DelayedEvaluator)
145
150
  visitor = lambda do |obj|
@@ -244,6 +249,15 @@ class Chef
244
249
  options[:default_description]
245
250
  end
246
251
 
252
+ #
253
+ # The equal_to field of this property.
254
+ #
255
+ # @return [Array, NilClass]
256
+ #
257
+ def equal_to
258
+ options[:equal_to]
259
+ end
260
+
247
261
  #
248
262
  # Whether this is part of the resource's natural identity or not.
249
263
  #
@@ -289,8 +303,12 @@ class Chef
289
303
  #
290
304
  # @return [Boolean]
291
305
  #
292
- def required?
293
- options[:required]
306
+ def required?(action = nil)
307
+ if !action.nil? && options[:required].is_a?(Array)
308
+ options[:required].include?(action)
309
+ else
310
+ !!options[:required]
311
+ end
294
312
  end
295
313
 
296
314
  #
@@ -543,7 +561,7 @@ class Chef
543
561
  modified_options.key?(:default)
544
562
  options = options.reject { |k, v| k == :name_attribute || k == :name_property || k == :default }
545
563
  end
546
- self.class.new(options.merge(modified_options))
564
+ self.class.new(**options.merge(modified_options))
547
565
  end
548
566
 
549
567
  #
@@ -556,7 +574,7 @@ class Chef
556
574
  # be using the existing getter/setter to manipulate it instead.
557
575
  return unless instance_variable_name
558
576
 
559
- # Properties may override existing properties up the inheritance heirarchy, but
577
+ # Properties may override existing properties up the inheritance hierarchy, but
560
578
  # properties must not override inherited methods like Object#hash. When the Resource is
561
579
  # placed into the resource collection the ruby Hash object will call the
562
580
  # Object#hash method on the resource, and overriding that with a property will cause
@@ -684,7 +702,7 @@ class Chef
684
702
  # override their own properties.
685
703
  return false unless [ Object, BasicObject, Kernel, Chef::Resource ].include?(declared_in.instance_method(name).owner)
686
704
 
687
- # Allow top-level Chef::Resource proprties, such as `name`, to be overridden.
705
+ # Allow top-level Chef::Resource properties, such as `name`, to be overridden.
688
706
  # As of this writing, `name` is the only Chef::Resource property created with the
689
707
  # `property` definition, but this will allow for future properties to be extended
690
708
  # as needed.
@@ -23,7 +23,7 @@ require_relative "mixin/enforce_ownership_and_permissions"
23
23
  require_relative "mixin/why_run"
24
24
  require_relative "mixin/shell_out"
25
25
  require_relative "mixin/provides"
26
- require_relative "dsl/core"
26
+ require_relative "dsl/recipe"
27
27
  require_relative "platform/service_helpers"
28
28
  require_relative "node_map"
29
29
  require "forwardable" unless defined?(Forwardable)
@@ -35,6 +35,7 @@ class Chef
35
35
 
36
36
  attr_accessor :new_resource
37
37
  attr_accessor :current_resource
38
+ attr_accessor :after_resource
38
39
  attr_accessor :run_context
39
40
 
40
41
  attr_reader :recipe_name
@@ -44,8 +45,7 @@ class Chef
44
45
  extend Chef::Mixin::Provides
45
46
  extend Forwardable
46
47
 
47
- # includes the "core" DSL and not the "recipe" DSL by design
48
- include Chef::DSL::Core
48
+ include Chef::DSL::Recipe
49
49
  # the class only gets the Universal DSL (no resource_collection at class parsing time)
50
50
  extend Chef::DSL::Universal
51
51
 
@@ -64,7 +64,7 @@ class Chef
64
64
  #
65
65
  # @return [void]
66
66
  def self.action(name, &block)
67
- # We need the block directly in a method so that `super` works.
67
+ # We need the block directly in a method so that `return` works.
68
68
  define_method("compile_action_#{name}", &block)
69
69
  class_eval <<-EOM
70
70
  def action_#{name}
@@ -81,6 +81,20 @@ class Chef
81
81
  # Chef.deprecated(:use_inline_resources, "The use_inline_resources mode is no longer optional and the line enabling it can be removed")
82
82
  end
83
83
 
84
+ # Use a partial code fragment. This can be used for code sharing between multiple resources.
85
+ #
86
+ # Do not wrap the code fragment in a class or module. It also does not support the use of super
87
+ # to subclass any methods defined in the fragment, the methods will just be overwritten.
88
+ #
89
+ # @param partial [String] the code fragment to eval against the class
90
+ #
91
+ def self.use(partial)
92
+ dirname = ::File.dirname(partial)
93
+ basename = ::File.basename(partial, ".rb")
94
+ basename = basename[1..-1] if basename.start_with?("_")
95
+ class_eval IO.read(::File.expand_path("#{dirname}/_#{basename}.rb", ::File.dirname(caller_locations.first.absolute_path)))
96
+ end
97
+
84
98
  # delegate to the resource
85
99
  #
86
100
  def_delegators :@new_resource, :property_is_set?
@@ -95,6 +109,7 @@ class Chef
95
109
  @new_resource = new_resource
96
110
  @action = action
97
111
  @current_resource = nil
112
+ @after_resource = nil
98
113
  @run_context = run_context
99
114
  @converge_actions = nil
100
115
 
@@ -137,6 +152,7 @@ class Chef
137
152
  new_resource.cookbook_name
138
153
  end
139
154
 
155
+ # hook that subclasses can use to do lazy validation for where properties aren't flexible enough
140
156
  def check_resource_semantics!; end
141
157
 
142
158
  # a simple placeholder method that will be called / raise if a resource tries to
@@ -149,6 +165,13 @@ class Chef
149
165
 
150
166
  def cleanup_after_converge; end
151
167
 
168
+ def load_after_resource
169
+ # This is a backwards compatible hack, custom resources properly wire up a new after_resource
170
+ # via load_current_value. It is acceptable for old style resources that cannot be easily made
171
+ # into custom resources to override this method and provide a proper after_resource.
172
+ @after_resource = @new_resource
173
+ end
174
+
152
175
  # the :nothing action which is available on all resources by default
153
176
  def action_nothing
154
177
  logger.trace("Doing nothing for #{@new_resource}")
@@ -159,12 +182,20 @@ class Chef
159
182
  run_context.events
160
183
  end
161
184
 
185
+ def validate_required_properties!
186
+ # all we do is run through all the required properties for this action and vivify them
187
+ new_resource.class.properties.each { |name, property| property.required?(action) && property.get(new_resource) }
188
+ end
189
+
162
190
  def run_action(action = nil)
163
191
  @action = action unless action.nil?
164
192
 
165
- # @todo it would be preferable to get the action to be executed in the constructor...
193
+ # hook that subclasses can use to do lazy validation for where properties aren't flexible enough
166
194
  check_resource_semantics!
167
195
 
196
+ # force the validation of required properties
197
+ validate_required_properties!
198
+
168
199
  # user-defined LWRPs may include unsafe load_current_resource methods that cannot be run in whyrun mode
169
200
  if whyrun_mode? && !whyrun_supported?
170
201
  events.resource_current_state_load_bypassed(@new_resource, @action, @current_resource)
@@ -192,6 +223,9 @@ class Chef
192
223
  set_updated_status
193
224
 
194
225
  cleanup_after_converge
226
+
227
+ load_after_resource
228
+ events.resource_after_state_loaded(@new_resource, @action, @after_resource)
195
229
  end
196
230
 
197
231
  def process_resource_requirements
@@ -334,7 +368,7 @@ class Chef
334
368
  end
335
369
 
336
370
  def self.provides(short_name, opts = {}, &block)
337
- Chef.provider_handler_map.set(short_name, self, opts, &block)
371
+ Chef.provider_handler_map.set(short_name, self, **opts, &block)
338
372
  end
339
373
 
340
374
  def self.provides?(node, resource)