chef 12.18.31 → 13.0.118

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 (611) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +15 -11
  3. data/README.md +13 -13
  4. data/Rakefile +1 -19
  5. data/VERSION +1 -1
  6. data/acceptance/.shared/kitchen_acceptance/libraries/kitchen.rb +1 -1
  7. data/acceptance/Gemfile +8 -5
  8. data/acceptance/Gemfile.lock +90 -81
  9. data/acceptance/basics/test/integration/chef-current-install/serverspec/chef_client_spec.rb +1 -1
  10. data/acceptance/data-collector/.acceptance/data-collector-test/metadata.rb +1 -1
  11. data/acceptance/data-collector/test/integration/default/serverspec/default_spec.rb +4 -0
  12. data/acceptance/top-cookbooks/.acceptance/acceptance-cookbook/libraries/top_cookbooks.rb +9 -8
  13. data/chef-universal-mingw32.gemspec +2 -3
  14. data/chef.gemspec +8 -7
  15. data/lib/chef/api_client.rb +8 -15
  16. data/lib/chef/api_client_v1.rb +9 -11
  17. data/lib/chef/application/apply.rb +8 -10
  18. data/lib/chef/application/client.rb +1 -1
  19. data/lib/chef/application/exit_code.rb +11 -82
  20. data/lib/chef/application/knife.rb +2 -2
  21. data/lib/chef/application/solo.rb +0 -1
  22. data/lib/chef/application/windows_service.rb +36 -37
  23. data/lib/chef/application/windows_service_manager.rb +1 -1
  24. data/lib/chef/application.rb +15 -25
  25. data/lib/chef/audit/audit_event_proxy.rb +2 -2
  26. data/lib/chef/audit/control_group_data.rb +1 -1
  27. data/lib/chef/blacklist.rb +81 -0
  28. data/lib/chef/chef_class.rb +1 -0
  29. data/lib/chef/chef_fs/chef_fs_data_store.rb +6 -8
  30. data/lib/chef/chef_fs/command_line.rb +15 -16
  31. data/lib/chef/chef_fs/data_handler/client_data_handler.rb +1 -1
  32. data/lib/chef/chef_fs/data_handler/container_data_handler.rb +1 -1
  33. data/lib/chef/chef_fs/data_handler/cookbook_data_handler.rb +1 -1
  34. data/lib/chef/chef_fs/data_handler/data_bag_item_data_handler.rb +1 -1
  35. data/lib/chef/chef_fs/data_handler/environment_data_handler.rb +1 -1
  36. data/lib/chef/chef_fs/data_handler/group_data_handler.rb +1 -1
  37. data/lib/chef/chef_fs/data_handler/node_data_handler.rb +1 -1
  38. data/lib/chef/chef_fs/data_handler/organization_data_handler.rb +1 -1
  39. data/lib/chef/chef_fs/data_handler/role_data_handler.rb +1 -1
  40. data/lib/chef/chef_fs/data_handler/user_data_handler.rb +1 -1
  41. data/lib/chef/chef_fs/file_pattern.rb +2 -2
  42. data/lib/chef/chef_fs/file_system/chef_server/chef_server_root_dir.rb +2 -2
  43. data/lib/chef/chef_fs/file_system/chef_server/cookbook_artifacts_dir.rb +6 -2
  44. data/lib/chef/chef_fs/file_system/chef_server/cookbook_dir.rb +18 -32
  45. data/lib/chef/chef_fs/file_system/chef_server/cookbook_file.rb +8 -10
  46. data/lib/chef/chef_fs/file_system/chef_server/cookbooks_dir.rb +5 -1
  47. data/lib/chef/chef_fs/file_system/chef_server/data_bags_dir.rb +8 -10
  48. data/lib/chef/chef_fs/file_system/chef_server/nodes_dir.rb +10 -12
  49. data/lib/chef/chef_fs/file_system/chef_server/policies_dir.rb +28 -30
  50. data/lib/chef/chef_fs/file_system/chef_server/policy_group_entry.rb +1 -1
  51. data/lib/chef/chef_fs/file_system/chef_server/rest_list_dir.rb +27 -29
  52. data/lib/chef/chef_fs/file_system/chef_server/rest_list_entry.rb +29 -26
  53. data/lib/chef/chef_fs/file_system/chef_server/versioned_cookbooks_dir.rb +5 -1
  54. data/lib/chef/chef_fs/file_system/memory/memory_file.rb +1 -1
  55. data/lib/chef/chef_fs/file_system/multiplexed_dir.rb +10 -12
  56. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_dir.rb +13 -16
  57. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_entry.rb +9 -13
  58. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_root_dir.rb +2 -0
  59. data/lib/chef/chef_fs/file_system/repository/cookbooks_dir.rb +1 -1
  60. data/lib/chef/chef_fs/file_system/repository/nodes_dir.rb +3 -0
  61. data/lib/chef/chef_fs/file_system.rb +1 -1
  62. data/lib/chef/chef_fs/parallelizer.rb +9 -11
  63. data/lib/chef/client.rb +47 -11
  64. data/lib/chef/config_fetcher.rb +4 -4
  65. data/lib/chef/constants.rb +1 -1
  66. data/lib/chef/cookbook/cookbook_version_loader.rb +26 -115
  67. data/lib/chef/cookbook/file_system_file_vendor.rb +1 -1
  68. data/lib/chef/cookbook/gem_installer.rb +10 -6
  69. data/lib/chef/cookbook/manifest_v0.rb +68 -0
  70. data/lib/chef/cookbook/manifest_v2.rb +41 -0
  71. data/lib/chef/cookbook/metadata.rb +25 -134
  72. data/lib/chef/cookbook/remote_file_vendor.rb +3 -3
  73. data/lib/chef/cookbook/synchronizer.rb +24 -21
  74. data/lib/chef/cookbook/syntax_check.rb +1 -1
  75. data/lib/chef/cookbook_manifest.rb +91 -65
  76. data/lib/chef/cookbook_site_streaming_uploader.rb +7 -9
  77. data/lib/chef/cookbook_uploader.rb +1 -1
  78. data/lib/chef/cookbook_version.rb +69 -157
  79. data/lib/chef/data_bag.rb +1 -7
  80. data/lib/chef/data_bag_item.rb +5 -10
  81. data/lib/chef/data_collector/messages.rb +2 -0
  82. data/lib/chef/data_collector/resource_report.rb +32 -4
  83. data/lib/chef/data_collector.rb +3 -4
  84. data/lib/chef/decorator/unchain.rb +0 -16
  85. data/lib/chef/decorator.rb +1 -1
  86. data/lib/chef/deprecated.rb +53 -19
  87. data/lib/chef/dsl/audit.rb +2 -2
  88. data/lib/chef/dsl/declare_resource.rb +11 -17
  89. data/lib/chef/dsl/platform_introspection.rb +29 -31
  90. data/lib/chef/dsl/reboot_pending.rb +1 -1
  91. data/lib/chef/dsl/recipe.rb +1 -4
  92. data/lib/chef/dsl/resources.rb +4 -13
  93. data/lib/chef/encrypted_data_bag_item.rb +2 -2
  94. data/lib/chef/environment.rb +9 -16
  95. data/lib/chef/event_dispatch/base.rb +16 -0
  96. data/lib/chef/event_loggers/windows_eventlog.rb +1 -1
  97. data/lib/chef/exceptions.rb +6 -10
  98. data/lib/chef/file_access_control/unix.rb +14 -14
  99. data/lib/chef/file_access_control/windows.rb +1 -1
  100. data/lib/chef/formatters/error_description.rb +18 -1
  101. data/lib/chef/formatters/error_inspectors/api_error_formatting.rb +4 -5
  102. data/lib/chef/formatters/error_mapper.rb +6 -6
  103. data/lib/chef/guard_interpreter/default_guard_interpreter.rb +4 -2
  104. data/lib/chef/http/api_versions.rb +54 -0
  105. data/lib/chef/http/authenticator.rb +15 -6
  106. data/lib/chef/http/json_output.rb +4 -1
  107. data/lib/chef/http/socketless_chef_zero_client.rb +1 -0
  108. data/lib/chef/http/validate_content_length.rb +2 -2
  109. data/lib/chef/http.rb +39 -0
  110. data/lib/chef/json_compat.rb +7 -103
  111. data/lib/chef/key.rb +5 -10
  112. data/lib/chef/knife/bootstrap/templates/chef-full.erb +6 -6
  113. data/lib/chef/knife/bootstrap.rb +6 -0
  114. data/lib/chef/knife/configure.rb +1 -3
  115. data/lib/chef/knife/configure_client.rb +1 -3
  116. data/lib/chef/knife/cookbook_create.rb +1 -434
  117. data/lib/chef/knife/cookbook_download.rb +3 -4
  118. data/lib/chef/knife/cookbook_show.rb +7 -3
  119. data/lib/chef/knife/cookbook_site_install.rb +2 -2
  120. data/lib/chef/knife/core/bootstrap_context.rb +8 -7
  121. data/lib/chef/knife/core/cookbook_scm_repo.rb +2 -2
  122. data/lib/chef/knife/core/gem_glob_loader.rb +1 -1
  123. data/lib/chef/knife/core/status_presenter.rb +1 -1
  124. data/lib/chef/knife/core/subcommand_loader.rb +2 -32
  125. data/lib/chef/knife/core/ui.rb +20 -27
  126. data/lib/chef/knife/data_bag_create.rb +6 -4
  127. data/lib/chef/knife/data_bag_secret_options.rb +1 -1
  128. data/lib/chef/knife/deps.rb +32 -34
  129. data/lib/chef/knife/edit.rb +1 -1
  130. data/lib/chef/knife/help.rb +1 -1
  131. data/lib/chef/knife/list.rb +1 -1
  132. data/lib/chef/knife/search.rb +9 -20
  133. data/lib/chef/knife/ssh.rb +62 -36
  134. data/lib/chef/knife/ssl_check.rb +1 -1
  135. data/lib/chef/knife/user_delete.rb +1 -1
  136. data/lib/chef/knife/xargs.rb +1 -1
  137. data/lib/chef/knife.rb +6 -7
  138. data/lib/chef/mash.rb +1 -1
  139. data/lib/chef/mixin/create_path.rb +3 -5
  140. data/lib/chef/mixin/from_file.rb +2 -2
  141. data/lib/chef/mixin/get_source_from_package.rb +2 -2
  142. data/lib/chef/mixin/notifying_block.rb +7 -9
  143. data/lib/chef/mixin/params_validate.rb +9 -8
  144. data/lib/chef/mixin/path_sanity.rb +17 -19
  145. data/lib/chef/mixin/securable.rb +1 -1
  146. data/lib/chef/mixin/shell_out.rb +33 -29
  147. data/lib/chef/mixin/unformatter.rb +2 -2
  148. data/lib/chef/mixin/uris.rb +4 -6
  149. data/lib/chef/mixin/versioned_api.rb +84 -0
  150. data/lib/chef/mixin/which.rb +25 -8
  151. data/lib/chef/mixin/windows_architecture_helper.rb +2 -2
  152. data/lib/chef/mixin/xml_escape.rb +3 -5
  153. data/lib/chef/mixins.rb +0 -1
  154. data/lib/chef/monkey_patches/webrick-utils.rb +1 -1
  155. data/lib/chef/node/attribute.rb +9 -32
  156. data/lib/chef/node/attribute_collections.rb +1 -19
  157. data/lib/chef/node/common_api.rb +5 -7
  158. data/lib/chef/node/immutable_collections.rb +42 -38
  159. data/lib/chef/node/mixin/immutablize_array.rb +1 -1
  160. data/lib/chef/node/mixin/immutablize_hash.rb +1 -1
  161. data/lib/chef/node.rb +21 -20
  162. data/lib/chef/node_map.rb +2 -5
  163. data/lib/chef/org.rb +10 -17
  164. data/lib/chef/platform/provider_mapping.rb +2 -169
  165. data/lib/chef/platform/query_helpers.rb +1 -1
  166. data/lib/chef/platform/rebooter.rb +1 -2
  167. data/lib/chef/policy_builder/expand_node_object.rb +3 -29
  168. data/lib/chef/policy_builder/policyfile.rb +8 -6
  169. data/lib/chef/property.rb +66 -80
  170. data/lib/chef/provider/apt_repository.rb +6 -10
  171. data/lib/chef/provider/apt_update.rb +1 -7
  172. data/lib/chef/provider/batch.rb +1 -1
  173. data/lib/chef/provider/breakpoint.rb +2 -2
  174. data/lib/chef/provider/cookbook_file.rb +3 -9
  175. data/lib/chef/provider/cron.rb +42 -60
  176. data/lib/chef/provider/deploy/revision.rb +3 -5
  177. data/lib/chef/provider/deploy.rb +82 -88
  178. data/lib/chef/provider/directory.rb +33 -37
  179. data/lib/chef/provider/dsc_resource.rb +23 -11
  180. data/lib/chef/provider/dsc_script.rb +1 -5
  181. data/lib/chef/provider/env/windows.rb +5 -1
  182. data/lib/chef/provider/env.rb +32 -30
  183. data/lib/chef/provider/erl_call.rb +15 -47
  184. data/lib/chef/provider/execute.rb +7 -8
  185. data/lib/chef/provider/file.rb +49 -61
  186. data/lib/chef/provider/git.rb +56 -60
  187. data/lib/chef/provider/group.rb +1 -7
  188. data/lib/chef/provider/http_request.rb +37 -41
  189. data/lib/chef/provider/ifconfig/redhat.rb +1 -1
  190. data/lib/chef/provider/ifconfig.rb +0 -6
  191. data/lib/chef/provider/launchd.rb +6 -2
  192. data/lib/chef/provider/link.rb +51 -55
  193. data/lib/chef/provider/log.rb +3 -7
  194. data/lib/chef/provider/lwrp_base.rb +0 -9
  195. data/lib/chef/provider/mdadm.rb +25 -33
  196. data/lib/chef/provider/mount/aix.rb +2 -2
  197. data/lib/chef/provider/mount/mount.rb +2 -2
  198. data/lib/chef/provider/mount.rb +1 -5
  199. data/lib/chef/provider/noop.rb +1 -1
  200. data/lib/chef/provider/ohai.rb +1 -7
  201. data/lib/chef/provider/osx_profile.rb +24 -29
  202. data/lib/chef/provider/package/aix.rb +55 -53
  203. data/lib/chef/provider/package/apt.rb +15 -13
  204. data/lib/chef/provider/package/cab.rb +48 -20
  205. data/lib/chef/provider/package/chocolatey.rb +9 -10
  206. data/lib/chef/provider/package/dnf/dnf_helper.py +1 -1
  207. data/lib/chef/provider/package/dnf/python_helper.rb +63 -26
  208. data/lib/chef/provider/package/dnf/version.rb +1 -1
  209. data/lib/chef/provider/package/dnf.rb +21 -19
  210. data/lib/chef/provider/package/dpkg.rb +8 -9
  211. data/lib/chef/provider/package/freebsd/base.rb +10 -10
  212. data/lib/chef/provider/package/freebsd/pkg.rb +15 -15
  213. data/lib/chef/provider/package/freebsd/pkgng.rb +13 -15
  214. data/lib/chef/provider/package/freebsd/port.rb +7 -7
  215. data/lib/chef/provider/package/homebrew.rb +11 -10
  216. data/lib/chef/provider/package/ips.rb +18 -24
  217. data/lib/chef/provider/package/macports.rb +23 -23
  218. data/lib/chef/provider/package/msu.rb +11 -12
  219. data/lib/chef/provider/package/openbsd.rb +25 -22
  220. data/lib/chef/provider/package/pacman.rb +16 -17
  221. data/lib/chef/provider/package/paludis.rb +26 -27
  222. data/lib/chef/provider/package/portage.rb +22 -23
  223. data/lib/chef/provider/package/powershell.rb +17 -17
  224. data/lib/chef/provider/package/rpm.rb +25 -26
  225. data/lib/chef/provider/package/rubygems.rb +64 -62
  226. data/lib/chef/provider/package/smartos.rb +16 -16
  227. data/lib/chef/provider/package/solaris.rb +44 -45
  228. data/lib/chef/provider/package/windows/exe.rb +6 -6
  229. data/lib/chef/provider/package/windows/msi.rb +7 -7
  230. data/lib/chef/provider/package/windows/registry_uninstall_entry.rb +9 -3
  231. data/lib/chef/provider/package/windows.rb +3 -3
  232. data/lib/chef/provider/package/yum/rpm_utils.rb +34 -34
  233. data/lib/chef/provider/package/yum/yum_cache.rb +12 -12
  234. data/lib/chef/provider/package/yum.rb +319 -269
  235. data/lib/chef/provider/package/zypper.rb +10 -20
  236. data/lib/chef/provider/package.rb +71 -63
  237. data/lib/chef/provider/powershell_script.rb +15 -7
  238. data/lib/chef/provider/reboot.rb +10 -14
  239. data/lib/chef/provider/registry_key.rb +39 -43
  240. data/lib/chef/provider/remote_directory.rb +3 -15
  241. data/lib/chef/provider/remote_file.rb +3 -9
  242. data/lib/chef/provider/route.rb +1 -7
  243. data/lib/chef/provider/ruby_block.rb +4 -8
  244. data/lib/chef/provider/script.rb +42 -6
  245. data/lib/chef/provider/service/aix.rb +1 -5
  246. data/lib/chef/provider/service/debian.rb +15 -21
  247. data/lib/chef/provider/service/freebsd.rb +0 -1
  248. data/lib/chef/provider/service/gentoo.rb +0 -1
  249. data/lib/chef/provider/service/init.rb +0 -1
  250. data/lib/chef/provider/service/insserv.rb +2 -2
  251. data/lib/chef/provider/service/openbsd.rb +0 -1
  252. data/lib/chef/provider/service/redhat.rb +2 -2
  253. data/lib/chef/provider/service/simple.rb +0 -5
  254. data/lib/chef/provider/service/solaris.rb +5 -4
  255. data/lib/chef/provider/service/systemd.rb +1 -1
  256. data/lib/chef/provider/service/upstart.rb +10 -12
  257. data/lib/chef/provider/service/windows.rb +1 -5
  258. data/lib/chef/provider/service.rb +51 -58
  259. data/lib/chef/provider/subversion.rb +40 -46
  260. data/lib/chef/provider/systemd_unit.rb +2 -0
  261. data/lib/chef/provider/template/content.rb +24 -1
  262. data/lib/chef/provider/template.rb +3 -9
  263. data/lib/chef/provider/user/dscl.rb +3 -3
  264. data/lib/chef/provider/user/linux.rb +6 -5
  265. data/lib/chef/provider/user/pw.rb +4 -10
  266. data/lib/chef/provider/user/solaris.rb +2 -2
  267. data/lib/chef/provider/user/useradd.rb +5 -5
  268. data/lib/chef/provider/user.rb +43 -59
  269. data/lib/chef/provider/whyrun_safe_ruby_block.rb +4 -4
  270. data/lib/chef/provider/windows_task.rb +418 -0
  271. data/lib/chef/provider/yum_repository.rb +3 -6
  272. data/lib/chef/provider.rb +63 -115
  273. data/lib/chef/provider_resolver.rb +8 -34
  274. data/lib/chef/providers.rb +1 -1
  275. data/lib/chef/recipe.rb +9 -1
  276. data/lib/chef/resource/action_class.rb +13 -17
  277. data/lib/chef/resource/apt_repository.rb +0 -1
  278. data/lib/chef/resource/apt_update.rb +3 -1
  279. data/lib/chef/resource/chef_gem.rb +4 -11
  280. data/lib/chef/resource/chocolatey_package.rb +4 -1
  281. data/lib/chef/resource/dnf_package.rb +6 -3
  282. data/lib/chef/resource/dsc_resource.rb +9 -1
  283. data/lib/chef/resource/execute.rb +66 -19
  284. data/lib/chef/resource/file/verification/systemd_unit.rb +67 -0
  285. data/lib/chef/resource/file/verification.rb +2 -7
  286. data/lib/chef/resource/freebsd_package.rb +1 -1
  287. data/lib/chef/resource/gem_package.rb +16 -2
  288. data/lib/chef/resource/launchd.rb +3 -3
  289. data/lib/chef/resource/lwrp_base.rb +0 -2
  290. data/lib/chef/resource/mount.rb +5 -12
  291. data/lib/chef/resource/package.rb +2 -2
  292. data/lib/chef/resource/powershell_script.rb +1 -1
  293. data/lib/chef/resource/registry_key.rb +1 -1
  294. data/lib/chef/resource/script.rb +8 -34
  295. data/lib/chef/resource/service.rb +15 -13
  296. data/lib/chef/resource/systemd_unit.rb +5 -0
  297. data/lib/chef/resource/user/aix_user.rb +1 -1
  298. data/lib/chef/resource/user/dscl_user.rb +1 -1
  299. data/lib/chef/resource/user/linux_user.rb +1 -10
  300. data/lib/chef/resource/user/pw_user.rb +1 -1
  301. data/lib/chef/resource/user/solaris_user.rb +1 -1
  302. data/lib/chef/resource/user/windows_user.rb +1 -1
  303. data/lib/chef/resource/user.rb +1 -19
  304. data/lib/chef/resource/windows_package.rb +4 -1
  305. data/lib/chef/resource/windows_task.rb +237 -0
  306. data/lib/chef/resource/yum_package.rb +13 -4
  307. data/lib/chef/resource/yum_repository.rb +0 -1
  308. data/lib/chef/resource/zypper_package.rb +2 -0
  309. data/lib/chef/resource.rb +90 -202
  310. data/lib/chef/resource_builder.rb +1 -65
  311. data/lib/chef/resource_collection/resource_collection_serialization.rb +11 -4
  312. data/lib/chef/resource_collection/resource_list.rb +6 -0
  313. data/lib/chef/resource_collection/resource_set.rb +44 -17
  314. data/lib/chef/resource_collection.rb +10 -0
  315. data/lib/chef/resource_reporter.rb +1 -1
  316. data/lib/chef/resource_resolver.rb +1 -25
  317. data/lib/chef/resources.rb +1 -1
  318. data/lib/chef/role.rb +0 -6
  319. data/lib/chef/run_context/cookbook_compiler.rb +49 -5
  320. data/lib/chef/run_context.rb +4 -25
  321. data/lib/chef/run_list/run_list_item.rb +1 -1
  322. data/lib/chef/run_list/versioned_recipe_list.rb +14 -12
  323. data/lib/chef/search/query.rb +26 -31
  324. data/lib/chef/server_api.rb +2 -0
  325. data/lib/chef/{resource/easy_install_package.rb → server_api_versions.rb} +18 -10
  326. data/lib/chef/shell/ext.rb +3 -3
  327. data/lib/chef/shell/shell_session.rb +14 -4
  328. data/lib/chef/shell.rb +32 -7
  329. data/lib/chef/user.rb +9 -16
  330. data/lib/chef/user_v1.rb +9 -16
  331. data/lib/chef/util/diff.rb +1 -1
  332. data/lib/chef/util/dsc/lcm_output_parser.rb +1 -1
  333. data/lib/chef/util/selinux.rb +1 -1
  334. data/lib/chef/util/windows/net_group.rb +18 -30
  335. data/lib/chef/util/windows/net_use.rb +7 -11
  336. data/lib/chef/util/windows/net_user.rb +12 -18
  337. data/lib/chef/util/windows/volume.rb +9 -15
  338. data/lib/chef/version.rb +1 -1
  339. data/lib/chef/version_class.rb +1 -1
  340. data/lib/chef/win32/api/file.rb +25 -31
  341. data/lib/chef/win32/api/installer.rb +2 -2
  342. data/lib/chef/win32/api.rb +4 -6
  343. data/lib/chef/win32/file.rb +4 -6
  344. data/lib/chef/win32/registry.rb +9 -9
  345. data/lib/chef/win32/security/acl.rb +2 -2
  346. data/lib/chef/win32/security/sid.rb +5 -0
  347. data/lib/chef/win32/security.rb +2 -2
  348. data/lib/chef/win32/unicode.rb +2 -2
  349. data/lib/chef/win32/version.rb +1 -1
  350. data/lib/chef.rb +1 -2
  351. data/spec/data/cookbooks/openldap/templates/default/openldap_nested_variable_stuff.erb +1 -0
  352. data/spec/data/lwrp/providers/buck_passer.rb +1 -1
  353. data/spec/data/lwrp/providers/buck_passer_2.rb +1 -1
  354. data/spec/data/lwrp/providers/embedded_resource_accesses_providers_scope.rb +1 -1
  355. data/spec/data/lwrp/providers/inline_compiler.rb +0 -2
  356. data/spec/data/lwrp/resources/buck_passer.rb +5 -0
  357. data/spec/data/lwrp/resources/buck_passer_2.rb +3 -0
  358. data/spec/data/lwrp/resources/embedded_resource_accesses_providers_scope.rb +3 -0
  359. data/spec/data/lwrp/resources/inline_compiler.rb +3 -0
  360. data/spec/data/lwrp/resources/monkey_name_printer.rb +5 -0
  361. data/spec/data/lwrp/resources/paint_drying_watcher.rb +3 -0
  362. data/spec/data/lwrp/resources/thumb_twiddler.rb +3 -0
  363. data/spec/data/prefer_metadata_json/metadata.json +51 -0
  364. data/spec/data/prefer_metadata_json/metadata.rb +6 -0
  365. data/spec/data/prefer_metadata_json/recipes/default.rb +0 -0
  366. data/spec/data/root_alias_cookbooks/dup_attr/attributes/default.rb +1 -0
  367. data/spec/data/root_alias_cookbooks/dup_attr/attributes.rb +1 -0
  368. data/spec/data/root_alias_cookbooks/dup_attr/metadata.rb +2 -0
  369. data/spec/data/root_alias_cookbooks/dup_attr/recipe.rb +3 -0
  370. data/spec/data/root_alias_cookbooks/dup_recipe/attributes.rb +1 -0
  371. data/spec/data/root_alias_cookbooks/dup_recipe/metadata.rb +2 -0
  372. data/spec/data/root_alias_cookbooks/dup_recipe/recipe.rb +3 -0
  373. data/spec/data/root_alias_cookbooks/dup_recipe/recipes/default.rb +3 -0
  374. data/spec/data/root_alias_cookbooks/simple/attributes.rb +1 -0
  375. data/spec/data/root_alias_cookbooks/simple/metadata.rb +2 -0
  376. data/spec/data/root_alias_cookbooks/simple/recipe.rb +3 -0
  377. data/spec/data/shef-config.rb +11 -10
  378. data/spec/functional/knife/ssh_spec.rb +34 -6
  379. data/spec/functional/rebooter_spec.rb +1 -0
  380. data/spec/functional/resource/bash_spec.rb +11 -45
  381. data/spec/functional/resource/batch_spec.rb +5 -1
  382. data/spec/functional/resource/cron_spec.rb +2 -2
  383. data/spec/functional/resource/dsc_script_spec.rb +2 -4
  384. data/spec/functional/resource/execute_spec.rb +17 -0
  385. data/spec/functional/resource/link_spec.rb +3 -3
  386. data/spec/functional/resource/template_spec.rb +33 -0
  387. data/spec/functional/resource/user/dscl_spec.rb +2 -4
  388. data/spec/functional/root_alias_spec.rb +78 -0
  389. data/spec/functional/shell_spec.rb +38 -40
  390. data/spec/integration/client/client_spec.rb +109 -16
  391. data/spec/integration/client/exit_code_spec.rb +1 -105
  392. data/spec/integration/knife/chef_repository_file_system_spec.rb +0 -97
  393. data/spec/integration/knife/cookbook_download_spec.rb +0 -24
  394. data/spec/integration/knife/cookbook_show_spec.rb +12 -23
  395. data/spec/integration/knife/deps_spec.rb +5 -9
  396. data/spec/integration/knife/search_node_spec.rb +39 -0
  397. data/spec/integration/knife/serve_spec.rb +58 -22
  398. data/spec/integration/knife/upload_spec.rb +3 -11
  399. data/spec/integration/recipes/lwrp_inline_resources_spec.rb +7 -11
  400. data/spec/integration/recipes/notifies_spec.rb +60 -0
  401. data/spec/integration/recipes/recipe_dsl_spec.rb +76 -226
  402. data/spec/integration/recipes/resource_action_spec.rb +37 -30
  403. data/spec/spec_helper.rb +7 -0
  404. data/spec/support/chef_helpers.rb +5 -7
  405. data/spec/support/platform_helpers.rb +10 -3
  406. data/spec/support/platforms/prof/gc.rb +4 -6
  407. data/spec/support/shared/context/client.rb +9 -2
  408. data/spec/support/shared/functional/execute_resource.rb +150 -0
  409. data/spec/support/shared/functional/windows_script.rb +74 -4
  410. data/spec/support/shared/integration/knife_support.rb +1 -1
  411. data/spec/support/shared/unit/execute_resource.rb +37 -9
  412. data/spec/support/shared/unit/provider/file.rb +10 -0
  413. data/spec/support/shared/unit/script_resource.rb +1 -9
  414. data/spec/unit/application/exit_code_spec.rb +4 -89
  415. data/spec/unit/application_spec.rb +39 -29
  416. data/spec/unit/chef_fs/file_system/operation_failed_error_spec.rb +1 -1
  417. data/spec/unit/client_spec.rb +72 -31
  418. data/spec/unit/config_fetcher_spec.rb +2 -2
  419. data/spec/unit/cookbook/cookbook_version_loader_spec.rb +31 -19
  420. data/spec/unit/cookbook/file_vendor_spec.rb +20 -9
  421. data/spec/unit/cookbook/gem_installer_spec.rb +85 -0
  422. data/spec/unit/cookbook/manifest_v0_spec.rb +133 -0
  423. data/spec/unit/cookbook/manifest_v2_spec.rb +70 -0
  424. data/spec/unit/cookbook/metadata_spec.rb +29 -108
  425. data/spec/unit/cookbook/synchronizer_spec.rb +5 -6
  426. data/spec/unit/cookbook/syntax_check_spec.rb +9 -2
  427. data/spec/unit/cookbook_loader_spec.rb +17 -19
  428. data/spec/unit/cookbook_manifest_spec.rb +12 -44
  429. data/spec/unit/cookbook_site_streaming_uploader_spec.rb +0 -4
  430. data/spec/unit/cookbook_spec.rb +10 -14
  431. data/spec/unit/cookbook_uploader_spec.rb +1 -1
  432. data/spec/unit/cookbook_version_file_specificity_spec.rb +55 -28
  433. data/spec/unit/cookbook_version_spec.rb +19 -128
  434. data/spec/unit/data_bag_item_spec.rb +4 -0
  435. data/spec/unit/data_collector/messages_spec.rb +137 -0
  436. data/spec/unit/data_collector/resource_report_spec.rb +145 -0
  437. data/spec/unit/deprecation_spec.rb +0 -14
  438. data/spec/unit/encrypted_data_bag_item_spec.rb +6 -6
  439. data/spec/unit/formatters/error_description_spec.rb +52 -7
  440. data/spec/unit/http/api_versions_spec.rb +79 -0
  441. data/spec/unit/http/authenticator_spec.rb +20 -0
  442. data/spec/unit/http/socketless_chef_zero_client_spec.rb +2 -1
  443. data/spec/unit/json_compat_spec.rb +0 -32
  444. data/spec/unit/knife/bootstrap_spec.rb +34 -0
  445. data/spec/unit/knife/configure_client_spec.rb +0 -2
  446. data/spec/unit/knife/cookbook_create_spec.rb +1 -220
  447. data/spec/unit/knife/cookbook_download_spec.rb +46 -28
  448. data/spec/unit/knife/cookbook_show_spec.rb +42 -9
  449. data/spec/unit/knife/core/bootstrap_context_spec.rb +17 -0
  450. data/spec/unit/knife/core/cookbook_scm_repo_spec.rb +1 -1
  451. data/spec/unit/knife/core/subcommand_loader_spec.rb +0 -6
  452. data/spec/unit/knife/core/ui_spec.rb +21 -11
  453. data/spec/unit/knife/data_bag_create_spec.rb +65 -45
  454. data/spec/unit/knife/ssh_spec.rb +34 -36
  455. data/spec/unit/knife_spec.rb +2 -2
  456. data/spec/unit/lwrp_spec.rb +38 -127
  457. data/spec/unit/mixin/path_sanity_spec.rb +7 -7
  458. data/spec/unit/mixin/shell_out_spec.rb +18 -84
  459. data/spec/unit/mixin/versioned_api_spec.rb +128 -0
  460. data/spec/unit/mixin/which.rb +160 -0
  461. data/spec/unit/node/attribute_spec.rb +65 -33
  462. data/spec/unit/node/immutable_collections_spec.rb +104 -1
  463. data/spec/unit/node_map_spec.rb +1 -23
  464. data/spec/unit/node_spec.rb +81 -98
  465. data/spec/unit/policy_builder/expand_node_object_spec.rb +2 -27
  466. data/spec/unit/policy_builder/policyfile_spec.rb +12 -12
  467. data/spec/unit/property/validation_spec.rb +51 -69
  468. data/spec/unit/property_spec.rb +105 -125
  469. data/spec/unit/provider/apt_repository_spec.rb +33 -27
  470. data/spec/unit/provider/cron_spec.rb +15 -39
  471. data/spec/unit/provider/deploy_spec.rb +1 -1
  472. data/spec/unit/provider/directory_spec.rb +10 -0
  473. data/spec/unit/provider/dsc_resource_spec.rb +175 -0
  474. data/spec/unit/provider/erl_call_spec.rb +5 -13
  475. data/spec/unit/provider/execute_spec.rb +3 -14
  476. data/spec/unit/provider/launchd_spec.rb +2 -2
  477. data/spec/unit/provider/package/aix_spec.rb +22 -22
  478. data/spec/unit/provider/package/apt_spec.rb +37 -27
  479. data/spec/unit/provider/package/cab_spec.rb +59 -5
  480. data/{lib-backcompat/chef/chef_fs/file_system/repository/file_system_root_dir.rb → spec/unit/provider/package/dnf/python_helper_spec.rb} +10 -15
  481. data/spec/unit/provider/package/dpkg_spec.rb +16 -16
  482. data/spec/unit/provider/package/freebsd/pkg_spec.rb +15 -15
  483. data/spec/unit/provider/package/freebsd/pkgng_spec.rb +9 -9
  484. data/spec/unit/provider/package/freebsd/port_spec.rb +9 -9
  485. data/spec/unit/provider/package/homebrew_spec.rb +9 -9
  486. data/spec/unit/provider/package/ips_spec.rb +37 -31
  487. data/spec/unit/provider/package/macports_spec.rb +10 -10
  488. data/spec/unit/provider/package/openbsd_spec.rb +10 -10
  489. data/spec/unit/provider/package/pacman_spec.rb +6 -6
  490. data/spec/unit/provider/package/paludis_spec.rb +7 -7
  491. data/spec/unit/provider/package/portage_spec.rb +6 -7
  492. data/spec/unit/provider/package/rpm_spec.rb +23 -23
  493. data/spec/unit/provider/package/rubygems_spec.rb +135 -46
  494. data/spec/unit/provider/package/solaris_spec.rb +15 -15
  495. data/spec/unit/provider/package/windows/msi_spec.rb +1 -1
  496. data/spec/unit/provider/package/windows/registry_uninstall_entry_spec.rb +25 -0
  497. data/spec/unit/provider/package/windows_spec.rb +2 -1
  498. data/spec/unit/provider/package/yum_spec.rb +58 -50
  499. data/spec/unit/provider/package/zypper_spec.rb +54 -97
  500. data/spec/unit/provider/package_spec.rb +8 -0
  501. data/spec/unit/provider/powershell_script_spec.rb +14 -4
  502. data/spec/unit/provider/remote_file/sftp_spec.rb +3 -3
  503. data/spec/unit/provider/route_spec.rb +7 -1
  504. data/spec/unit/provider/script_spec.rb +49 -6
  505. data/spec/unit/provider/service/debian_service_spec.rb +14 -20
  506. data/spec/unit/provider/service/solaris_smf_service_spec.rb +37 -1
  507. data/spec/unit/provider/service/upstart_service_spec.rb +12 -25
  508. data/spec/unit/provider/subversion_spec.rb +2 -2
  509. data/spec/unit/provider/user/linux_spec.rb +5 -43
  510. data/spec/unit/provider/user/pw_spec.rb +7 -27
  511. data/spec/unit/provider/windows_task_spec.rb +392 -0
  512. data/spec/unit/provider_resolver_spec.rb +0 -1
  513. data/spec/unit/provider_spec.rb +10 -3
  514. data/spec/unit/recipe_spec.rb +3 -172
  515. data/spec/unit/resource/chef_gem_spec.rb +16 -62
  516. data/spec/unit/resource/conditional_spec.rb +4 -4
  517. data/spec/unit/resource/cookbook_file_spec.rb +2 -2
  518. data/spec/unit/resource/cron_spec.rb +1 -1
  519. data/spec/unit/resource/deploy_spec.rb +4 -4
  520. data/spec/unit/resource/directory_spec.rb +2 -2
  521. data/spec/unit/resource/dsc_resource_spec.rb +6 -0
  522. data/spec/unit/resource/env_spec.rb +1 -1
  523. data/spec/unit/resource/execute_spec.rb +215 -1
  524. data/spec/unit/resource/file/verification/systemd_unit_spec.rb +103 -0
  525. data/spec/unit/resource/file/verification_spec.rb +8 -14
  526. data/spec/unit/resource/file_spec.rb +3 -3
  527. data/spec/unit/resource/freebsd_package_spec.rb +2 -2
  528. data/spec/unit/resource/group_spec.rb +2 -2
  529. data/spec/unit/resource/ifconfig_spec.rb +1 -1
  530. data/spec/unit/resource/link_spec.rb +2 -2
  531. data/spec/unit/resource/mdadm_spec.rb +1 -1
  532. data/spec/unit/resource/mount_spec.rb +3 -3
  533. data/spec/unit/resource/ohai_spec.rb +1 -1
  534. data/spec/unit/resource/package_spec.rb +14 -4
  535. data/spec/unit/resource/registry_key_spec.rb +2 -2
  536. data/spec/unit/resource/remote_directory_spec.rb +2 -2
  537. data/spec/unit/resource/remote_file_spec.rb +2 -2
  538. data/spec/unit/resource/route_spec.rb +1 -1
  539. data/spec/unit/resource/scm_spec.rb +2 -2
  540. data/spec/unit/resource/script_spec.rb +1 -1
  541. data/spec/unit/resource/service_spec.rb +25 -5
  542. data/spec/unit/resource/systemd_unit_spec.rb +1 -1
  543. data/spec/unit/resource/template_spec.rb +2 -2
  544. data/spec/unit/resource/user_spec.rb +6 -6
  545. data/spec/unit/resource/windows_task_spec.rb +213 -0
  546. data/spec/unit/resource/yum_package_spec.rb +42 -1
  547. data/spec/unit/resource_collection/resource_set_spec.rb +46 -1
  548. data/spec/unit/resource_collection_spec.rb +4 -3
  549. data/spec/unit/resource_reporter_spec.rb +6 -6
  550. data/spec/unit/resource_spec.rb +55 -71
  551. data/spec/unit/run_context/cookbook_compiler_spec.rb +1 -3
  552. data/spec/unit/run_list/versioned_recipe_list_spec.rb +7 -4
  553. data/spec/unit/runner_spec.rb +10 -28
  554. data/spec/unit/search/query_spec.rb +32 -34
  555. data/spec/unit/server_api_versions_spec.rb +44 -0
  556. data/spec/unit/shell/shell_session_spec.rb +33 -2
  557. data/spec/unit/util/selinux_spec.rb +3 -14
  558. data/spec/unit/win32/error_spec.rb +67 -0
  559. data/spec/unit/win32/security_spec.rb +66 -0
  560. data/tasks/bundle.rb +36 -52
  561. data/tasks/changelog.rb +1 -1
  562. data/tasks/dependencies.rb +54 -52
  563. data/tasks/version.rb +41 -0
  564. metadata +91 -76
  565. data/lib/chef/deprecation/mixin/template.rb +0 -48
  566. data/lib/chef/deprecation/provider/cookbook_file.rb +0 -54
  567. data/lib/chef/deprecation/provider/file.rb +0 -198
  568. data/lib/chef/deprecation/provider/remote_directory.rb +0 -52
  569. data/lib/chef/deprecation/provider/remote_file.rb +0 -85
  570. data/lib/chef/deprecation/provider/template.rb +0 -63
  571. data/lib/chef/dsl/method_missing.rb +0 -75
  572. data/lib/chef/knife/cookbook_site_vendor.rb +0 -46
  573. data/lib/chef/knife/core/custom_manifest_loader.rb +0 -69
  574. data/lib/chef/mixin/command/unix.rb +0 -220
  575. data/lib/chef/mixin/command/windows.rb +0 -71
  576. data/lib/chef/mixin/command.rb +0 -194
  577. data/lib/chef/monkey_patches/net-ssh-multi.rb +0 -141
  578. data/lib/chef/provider/package/easy_install.rb +0 -135
  579. data/lib/chef/rest.rb +0 -210
  580. data/lib/chef/shell_out.rb +0 -13
  581. data/lib/chef/tasks/chef_repo.rake +0 -200
  582. data/lib-backcompat/chef/chef_fs/file_system/acl_entry.rb +0 -5
  583. data/lib-backcompat/chef/chef_fs/file_system/already_exists_error.rb +0 -20
  584. data/lib-backcompat/chef/chef_fs/file_system/chef_repository_file_system_root_dir.rb +0 -5
  585. data/lib-backcompat/chef/chef_fs/file_system/chef_server_root_dir.rb +0 -5
  586. data/lib-backcompat/chef/chef_fs/file_system/cookbook_frozen_error.rb +0 -20
  587. data/lib-backcompat/chef/chef_fs/file_system/default_environment_cannot_be_modified_error.rb +0 -20
  588. data/lib-backcompat/chef/chef_fs/file_system/file_system_error.rb +0 -20
  589. data/lib-backcompat/chef/chef_fs/file_system/must_delete_recursively_error.rb +0 -20
  590. data/lib-backcompat/chef/chef_fs/file_system/not_found_error.rb +0 -20
  591. data/lib-backcompat/chef/chef_fs/file_system/operation_failed_error.rb +0 -20
  592. data/lib-backcompat/chef/chef_fs/file_system/operation_not_allowed_error.rb +0 -20
  593. data/lib-backcompat/chef/chef_fs/file_system/repository/chef_repository_file_system_acls_dir.rb +0 -5
  594. data/lib-backcompat/chef/chef_fs/file_system/repository/chef_repository_file_system_client_keys_dir.rb +0 -5
  595. data/lib-backcompat/chef/chef_fs/file_system/repository/chef_repository_file_system_entry.rb +0 -6
  596. data/lib-backcompat/chef/chef_fs/file_system/repository/chef_repository_file_system_policies_dir.rb +0 -5
  597. data/spec/functional/rest_spec.rb +0 -95
  598. data/spec/unit/knife/core/custom_manifest_loader_spec.rb +0 -41
  599. data/spec/unit/lib_backcompat_spec.rb +0 -34
  600. data/spec/unit/mixin/command_spec.rb +0 -107
  601. data/spec/unit/platform_spec.rb +0 -242
  602. data/spec/unit/provider/package/easy_install_spec.rb +0 -114
  603. data/spec/unit/resource/easy_install_package_spec.rb +0 -39
  604. data/spec/unit/rest/auth_credentials_spec.rb +0 -292
  605. data/spec/unit/rest_spec.rb +0 -753
  606. data/spec/unit/shell_out_spec.rb +0 -18
  607. data/tasks/bin/bundle-platform +0 -20
  608. data/tasks/bin/bundle-platform.bat +0 -2
  609. data/tasks/bin/bundler_patch.rb +0 -27
  610. data/tasks/bin/gem-version-diff +0 -37
  611. data/tasks/bundle_util.rb +0 -110
data/lib/chef/resource.rb CHANGED
@@ -23,6 +23,7 @@ require "chef/dsl/data_query"
23
23
  require "chef/dsl/registry_helper"
24
24
  require "chef/dsl/reboot_pending"
25
25
  require "chef/dsl/resources"
26
+ require "chef/json_compat"
26
27
  require "chef/mixin/convert_to_class_name"
27
28
  require "chef/guard_interpreter/resource_guard_interpreter"
28
29
  require "chef/resource/conditional"
@@ -83,7 +84,7 @@ class Chef
83
84
  # @param name [Object] The name to set, typically a String or Array
84
85
  # @return [String] The name of this Resource.
85
86
  #
86
- property :name, String, coerce: proc { |v| v.is_a?(Array) ? v.join(", ") : v.to_s }, desired_state: false
87
+ property :name, String, coerce: proc { |v| v.is_a?(Array) ? v.join(", ") : v.to_s }, desired_state: false, required: true
87
88
 
88
89
  #
89
90
  # The node the current Chef run is using.
@@ -130,7 +131,6 @@ class Chef
130
131
  def initialize(name, run_context = nil)
131
132
  name(name) unless name.nil?
132
133
  @run_context = run_context
133
- @noop = nil
134
134
  @before = nil
135
135
  @params = Hash.new
136
136
  @provider = nil
@@ -138,10 +138,6 @@ class Chef
138
138
  @action = self.class.default_action
139
139
  @updated = false
140
140
  @updated_by_last_action = false
141
- @supports = {}
142
- @ignore_failure = false
143
- @retries = 0
144
- @retry_delay = 2
145
141
  @not_if = []
146
142
  @only_if = []
147
143
  @source_line = nil
@@ -153,7 +149,6 @@ class Chef
153
149
  @guard_interpreter = nil
154
150
  @default_guard_interpreter = :default
155
151
  @elapsed_time = 0
156
- @sensitive = false
157
152
  end
158
153
 
159
154
  #
@@ -437,10 +432,7 @@ class Chef
437
432
  # @param arg [Integer] The number of retries.
438
433
  # @return [Integer] The number of retries.
439
434
  #
440
- def retries(arg = nil)
441
- set_or_return(:retries, arg, kind_of: Integer)
442
- end
443
- attr_writer :retries
435
+ property :retries, Integer, default: 0, desired_state: false
444
436
 
445
437
  #
446
438
  # The number of seconds to wait between retries. Default: 2.
@@ -448,10 +440,7 @@ class Chef
448
440
  # @param arg [Integer] The number of seconds to wait between retries.
449
441
  # @return [Integer] The number of seconds to wait between retries.
450
442
  #
451
- def retry_delay(arg = nil)
452
- set_or_return(:retry_delay, arg, kind_of: Integer)
453
- end
454
- attr_writer :retry_delay
443
+ property :retry_delay, Integer, default: 2, desired_state: false
455
444
 
456
445
  #
457
446
  # Whether to treat this resource's data as sensitive. If set, no resource
@@ -460,15 +449,7 @@ class Chef
460
449
  # @param arg [Boolean] Whether this resource is sensitive or not.
461
450
  # @return [Boolean] Whether this resource is sensitive or not.
462
451
  #
463
- def sensitive(arg = nil)
464
- set_or_return(:sensitive, arg, :kind_of => [ TrueClass, FalseClass ])
465
- end
466
- attr_writer :sensitive
467
-
468
- # ??? TODO unreferenced. Delete?
469
- attr_reader :not_if_args
470
- # ??? TODO unreferenced. Delete?
471
- attr_reader :only_if_args
452
+ property :sensitive, [ TrueClass, FalseClass ], default: false, desired_state: false
472
453
 
473
454
  #
474
455
  # The time it took (in seconds) to run the most recently-run action. Not
@@ -522,15 +503,6 @@ class Chef
522
503
  state
523
504
  end
524
505
 
525
- #
526
- # Since there are collisions with LWRP parameters named 'state' this
527
- # method is not used by the resource_reporter and is most likely unused.
528
- # It certainly cannot be relied upon and cannot be fixed.
529
- #
530
- # @deprecated
531
- #
532
- alias_method :state, :state_for_resource_reporter
533
-
534
506
  #
535
507
  # The value of the identity of this resource.
536
508
  #
@@ -561,10 +533,7 @@ class Chef
561
533
  # @param arg [Boolean] Whether to ignore failures.
562
534
  # @return Whether this resource will ignore failures.
563
535
  #
564
- def ignore_failure(arg = nil)
565
- set_or_return(:ignore_failure, arg, kind_of: [ TrueClass, FalseClass ])
566
- end
567
- attr_writer :ignore_failure
536
+ property :ignore_failure, [ TrueClass, FalseClass ], default: false, desired_state: false
568
537
 
569
538
  #
570
539
  # Equivalent to #ignore_failure.
@@ -579,7 +548,7 @@ class Chef
579
548
  def load_from(resource)
580
549
  resource.instance_variables.each do |iv|
581
550
  unless iv == :@source_line || iv == :@action || iv == :@not_if || iv == :@only_if
582
- self.instance_variable_set(iv, resource.instance_variable_get(iv))
551
+ instance_variable_set(iv, resource.instance_variable_get(iv))
583
552
  end
584
553
  end
585
554
  end
@@ -620,7 +589,7 @@ class Chef
620
589
  begin
621
590
  return if should_skip?(action)
622
591
  provider_for_action(action).run_action
623
- rescue Exception => e
592
+ rescue StandardError => e
624
593
  if ignore_failure
625
594
  Chef::Log.error("#{custom_exception_message(e)}; ignore_failure is set, continuing")
626
595
  events.resource_failed(self, action, e)
@@ -667,21 +636,34 @@ class Chef
667
636
 
668
637
  def to_text
669
638
  return "suppressed sensitive resource output" if sensitive
670
- ivars = instance_variables.map { |ivar| ivar.to_sym } - HIDDEN_IVARS
671
639
  text = "# Declared in #{@source_line}\n\n"
672
640
  text << "#{resource_name}(\"#{name}\") do\n"
641
+
642
+ all_props = {}
643
+ self.class.state_properties.map do |p|
644
+ all_props[p.name.to_s] = p.sensitive? ? '"*sensitive value suppressed*"' : value_to_text(p.get(self))
645
+ end
646
+
647
+ ivars = instance_variables.map { |ivar| ivar.to_sym } - HIDDEN_IVARS
673
648
  ivars.each do |ivar|
674
- if (value = instance_variable_get(ivar)) && !(value.respond_to?(:empty?) && value.empty?)
675
- value_string = value.respond_to?(:to_text) ? value.to_text : value.inspect
676
- text << " #{ivar.to_s.sub(/^@/, '')} #{value_string}\n"
649
+ iv = ivar.to_s.sub(/^@/, "")
650
+ if all_props.keys.include?(iv)
651
+ text << " #{iv} #{all_props[iv]}\n"
652
+ elsif (value = instance_variable_get(ivar)) && !(value.respond_to?(:empty?) && value.empty?)
653
+ text << " #{iv} #{value_to_text(value)}\n"
677
654
  end
678
655
  end
656
+
679
657
  [@not_if, @only_if].flatten.each do |conditional|
680
658
  text << " #{conditional.to_text}\n"
681
659
  end
682
660
  text << "end\n"
683
661
  end
684
662
 
663
+ def value_to_text(value)
664
+ value.respond_to?(:to_text) ? value.to_text : value.inspect
665
+ end
666
+
685
667
  def inspect
686
668
  ivars = instance_variables.map { |ivar| ivar.to_sym } - FORBIDDEN_IVARS
687
669
  ivars.inject("<#{self}") do |str, ivar|
@@ -725,14 +707,22 @@ class Chef
725
707
  result
726
708
  end
727
709
 
728
- def self.json_create(o)
729
- resource = self.new(o["instance_vars"]["@name"])
710
+ def self.from_hash(o)
711
+ resource = new(o["instance_vars"]["@name"])
730
712
  o["instance_vars"].each do |k, v|
731
713
  resource.instance_variable_set("@#{k}".to_sym, v)
732
714
  end
733
715
  resource
734
716
  end
735
717
 
718
+ def self.json_create(o)
719
+ from_hash(o)
720
+ end
721
+
722
+ def self.from_json(j)
723
+ from_hash(Chef::JSONCompat.parse(j))
724
+ end
725
+
736
726
  #
737
727
  # Resource Definition Interface (for resource developers)
738
728
  #
@@ -762,8 +752,7 @@ class Chef
762
752
  else
763
753
  arg
764
754
  end
765
- set_or_return(:provider, klass, kind_of: [ Class ]) ||
766
- self.class.action_class
755
+ set_or_return(:provider, klass, kind_of: [ Class ])
767
756
  end
768
757
 
769
758
  def provider=(arg)
@@ -919,17 +908,6 @@ class Chef
919
908
  @updated_by_last_action
920
909
  end
921
910
 
922
- #
923
- # Set whether this class was updated during an action.
924
- #
925
- # @deprecated Multiple actions are supported by resources. Please call {}#updated_by_last_action} instead.
926
- #
927
- def updated=(true_or_false)
928
- Chef.deprecated(:custom_resource, "Chef::Resource#updated=(true|false) is deprecated. Please call #updated_by_last_action(true|false) instead.")
929
- updated_by_last_action(true_or_false)
930
- @updated = true_or_false
931
- end
932
-
933
911
  #
934
912
  # The display name of this resource type, for printing purposes.
935
913
  #
@@ -941,29 +919,6 @@ class Chef
941
919
  @resource_name || self.class.resource_name
942
920
  end
943
921
 
944
- #
945
- # Sets a list of capabilities of the real resource. For example, `:remount`
946
- # (for filesystems) and `:restart` (for services).
947
- #
948
- # TODO Calling resource.supports({}) will not set this to empty; it will do
949
- # a get instead. That's wrong.
950
- #
951
- # @param args Hash{Symbol=>Boolean} If non-empty, sets the capabilities of
952
- # this resource. Default: {}
953
- # @return Hash{Symbol=>Boolean} An array of things this resource supports.
954
- #
955
- def supports(args = {})
956
- if args.any?
957
- @supports = args
958
- else
959
- @supports
960
- end
961
- end
962
-
963
- def supports=(args)
964
- supports(args)
965
- end
966
-
967
922
  #
968
923
  # A hook called after a resource is created. Meant to be overriden by
969
924
  # subclasses.
@@ -972,21 +927,6 @@ class Chef
972
927
  nil
973
928
  end
974
929
 
975
- #
976
- # The DSL name of this resource (e.g. `package` or `yum_package`)
977
- #
978
- # @return [String] The DSL name of this resource.
979
- #
980
- # @deprecated Use resource_name instead.
981
- #
982
- def self.dsl_name
983
- Chef.deprecated(:custom_resource, "Resource.dsl_name is deprecated and will be removed in Chef 13. Use resource_name instead.")
984
- if name
985
- name = self.name.split("::")[-1]
986
- convert_to_snake_case(name)
987
- end
988
- end
989
-
990
930
  #
991
931
  # The display name of this resource type, for printing purposes.
992
932
  #
@@ -1036,33 +976,10 @@ class Chef
1036
976
  # A::B::BlahDBlah -> blah_d_blah
1037
977
  #
1038
978
  def self.use_automatic_resource_name
1039
- automatic_name = convert_to_snake_case(self.name.split("::")[-1])
979
+ automatic_name = convert_to_snake_case(name.split("::")[-1])
1040
980
  resource_name automatic_name
1041
981
  end
1042
982
 
1043
- #
1044
- # The module where Chef should look for providers for this resource.
1045
- # The provider for `MyResource` will be looked up using
1046
- # `provider_base::MyResource`. Defaults to `Chef::Provider`.
1047
- #
1048
- # @param arg [Module] The module containing providers for this resource
1049
- # @return [Module] The module containing providers for this resource
1050
- #
1051
- # @example
1052
- # class MyResource < Chef::Resource
1053
- # provider_base Chef::Provider::Deploy
1054
- # # ...other stuff
1055
- # end
1056
- #
1057
- # @deprecated Use `provides` on the provider, or `provider` on the resource, instead.
1058
- #
1059
- def self.provider_base(arg = nil)
1060
- if arg
1061
- Chef.deprecated(:custom_resource, "Resource.provider_base is deprecated and will be removed in Chef 13. Use provides on the provider, or provider on the resource, instead.")
1062
- end
1063
- @provider_base ||= arg || Chef::Provider
1064
- end
1065
-
1066
983
  #
1067
984
  # The list of allowed actions for the resource.
1068
985
  #
@@ -1193,53 +1110,65 @@ class Chef
1193
1110
  end
1194
1111
 
1195
1112
  #
1196
- # The action class is an automatic `Provider` created to handle
1197
- # actions declared by `action :x do ... end`.
1198
- #
1199
- # This class will be returned by `resource.provider` if `resource.provider`
1200
- # is not set. `provider_for_action` will also use this instead of calling
1201
- # out to `Chef::ProviderResolver`.
1113
+ # The action class is a `Chef::Provider` which is created at Resource
1114
+ # class evaluation time when the Custom Resource is being constructed.
1202
1115
  #
1203
- # If the user has not declared actions on this class or its superclasses
1204
- # using `action :x do ... end`, then there is no need for this class and
1205
- # `action_class` will be `nil`.
1116
+ # This happens the first time the ruby parser hits an `action` or an
1117
+ # `action_class` method, the presence of either indiates that this is
1118
+ # going to be a Chef-12.5 custom resource. If we never see one of these
1119
+ # directives then we are constructing an old-style Resource+Provider or
1120
+ # LWRP or whatevs.
1206
1121
  #
1207
1122
  # If a block is passed, the action_class is always created and the block is
1208
1123
  # run inside it.
1209
1124
  #
1210
- # @api private
1211
- #
1212
1125
  def self.action_class(&block)
1213
- return @action_class if @action_class && !block
1214
- # If the superclass needed one, then we need one as well.
1215
- if block || (superclass.respond_to?(:action_class) && superclass.action_class)
1216
- @action_class = declare_action_class(&block)
1217
- end
1126
+ @action_class ||= declare_action_class
1127
+ @action_class.class_eval(&block) if block
1218
1128
  @action_class
1219
1129
  end
1220
1130
 
1131
+ # Returns true or false based on if the resource is a custom resource. The
1132
+ # top-level Chef::Resource is not a chef resource. This value is inherited.
1133
+ #
1134
+ # @return [Boolean] if the resource is a custom_resource
1135
+ def self.custom_resource?
1136
+ false
1137
+ end
1138
+
1139
+ # This sets the resource to being a custom resource, and does so in a way
1140
+ # that automatically inherits to all subclasses via defining a method on
1141
+ # the class (class variables and class instance variables don't have the
1142
+ # correct semantics here, this is a poor man's activesupport class_attribute)
1143
+ #
1144
+ # @api private
1145
+ def self.is_custom_resource!
1146
+ define_singleton_method :custom_resource? do
1147
+ true
1148
+ end
1149
+ end
1150
+
1221
1151
  #
1222
1152
  # Ensure the action class actually gets created. This is called
1223
1153
  # when the user does `action :x do ... end`.
1224
1154
  #
1225
- # If a block is passed, it is run inside the action_class.
1226
- #
1227
1155
  # @api private
1228
- def self.declare_action_class(&block)
1229
- @action_class ||= begin
1230
- if superclass.respond_to?(:action_class)
1231
- base_provider = superclass.action_class
1232
- end
1233
- base_provider ||= Chef::Provider
1234
-
1235
- resource_class = self
1236
- Class.new(base_provider) do
1237
- include ActionClass
1238
- self.resource_class = resource_class
1239
- end
1240
- end
1241
- @action_class.class_eval(&block) if block
1242
- @action_class
1156
+ def self.declare_action_class
1157
+ @action_class ||=
1158
+ begin
1159
+ is_custom_resource!
1160
+ base_provider =
1161
+ if superclass.custom_resource?
1162
+ superclass.action_class
1163
+ else
1164
+ ActionClass
1165
+ end
1166
+
1167
+ resource_class = self
1168
+ Class.new(base_provider) do
1169
+ self.resource_class = resource_class
1170
+ end
1171
+ end
1243
1172
  end
1244
1173
 
1245
1174
  #
@@ -1472,24 +1401,6 @@ class Chef
1472
1401
  provider
1473
1402
  end
1474
1403
 
1475
- # ??? TODO Seems unused. Delete?
1476
- def noop(tf = nil)
1477
- if !tf.nil?
1478
- raise ArgumentError, "noop must be true or false!" unless tf == true || tf == false
1479
- @noop = tf
1480
- end
1481
- @noop
1482
- end
1483
-
1484
- # TODO Seems unused. Delete?
1485
- def is(*args)
1486
- if args.size == 1
1487
- args.first
1488
- else
1489
- return *args
1490
- end
1491
- end
1492
-
1493
1404
  #
1494
1405
  # Preface an exception message with generic Resource information.
1495
1406
  #
@@ -1567,36 +1478,14 @@ class Chef
1567
1478
 
1568
1479
  # @api private
1569
1480
  def lookup_provider_constant(name, action = :nothing)
1570
- begin
1571
- self.class.provider_base.const_get(convert_to_class_name(name.to_s))
1572
- rescue NameError => e
1573
- if e.to_s =~ /#{Regexp.escape(self.class.provider_base.to_s)}/
1574
- raise ArgumentError, "No provider found to match '#{name}'"
1575
- else
1576
- raise e
1577
- end
1578
- end
1579
- end
1580
-
1581
- module DeprecatedLWRPClass
1582
-
1583
- # @api private
1584
- def register_deprecated_lwrp_class(resource_class, class_name)
1585
- if Chef::Resource.const_defined?(class_name, false)
1586
- Chef::Log.warn "#{class_name} already exists! Deprecation class overwrites #{resource_class}"
1587
- Chef::Resource.send(:remove_const, class_name)
1588
- end
1589
-
1590
- if !Chef::Config[:treat_deprecation_warnings_as_errors]
1591
- Chef::Resource.const_set(class_name, resource_class)
1592
- Chef::Resource.deprecated_constants[class_name.to_sym] = resource_class
1593
- end
1594
- end
1595
-
1596
- def deprecated_constants
1597
- raise "Deprecated constants should be called only on Chef::Resource" unless self == Chef::Resource
1598
- @deprecated_constants ||= {}
1599
- end
1481
+ # XXX: "name" is probably a poor choice of name here, ideally this would be nil, but we need to
1482
+ # fix resources so that nil or empty names work (also solving the apt_update "doesn't matter one bit"
1483
+ # problem). WARNING: this string is not a public API and should not be referenced (e.g. in provides blocks)
1484
+ # and may change at any time. If you've found this comment you're also probably very lost and should maybe
1485
+ # consider using `declare_resource :whatever` instead of trying to set `provider :whatever` on a resource, or in some
1486
+ # other way reconsider what you're trying to do, since you're likely trying to force a bad design that we
1487
+ # can't/won't support.
1488
+ self.class.resource_for_node(name, node).new("name", run_context).provider_for_action(action).class
1600
1489
  end
1601
1490
 
1602
1491
  def self.remove_canonical_dsl
@@ -1607,7 +1496,6 @@ class Chef
1607
1496
  end
1608
1497
  end
1609
1498
  end
1610
- extend DeprecatedLWRPClass
1611
1499
  end
1612
1500
  end
1613
1501
 
@@ -1,6 +1,6 @@
1
1
  #
2
2
  # Author:: Lamont Granquist (<lamont@chef.io>)
3
- # Copyright:: Copyright 2015-2016, Chef Software, Inc.
3
+ # Copyright:: Copyright 2015-2017, Chef Software Inc.
4
4
  # License:: Apache License, Version 2.0
5
5
  #
6
6
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -43,8 +43,6 @@ class Chef
43
43
  end
44
44
 
45
45
  def build(&block)
46
- raise ArgumentError, "You must supply a name when declaring a #{type} resource" if name.nil?
47
-
48
46
  @resource = resource_class.new(name, run_context)
49
47
  if resource.resource_name.nil?
50
48
  raise Chef::Exceptions::InvalidResourceSpecification, "#{resource}.resource_name is `nil`! Did you forget to put `provides :blah` or `resource_name :blah` in your resource class?"
@@ -52,14 +50,6 @@ class Chef
52
50
  resource.source_line = created_at
53
51
  resource.declared_type = type
54
52
 
55
- # If we have a resource like this one, we want to steal its state
56
- # This behavior is very counter-intuitive and should be removed.
57
- # See CHEF-3694, https://tickets.opscode.com/browse/CHEF-3694
58
- # Moved to this location to resolve CHEF-5052, https://tickets.opscode.com/browse/CHEF-5052
59
- if prior_resource && Chef::Config[:resource_cloning]
60
- resource.load_from(prior_resource)
61
- end
62
-
63
53
  resource.cookbook_name = cookbook_name
64
54
  resource.recipe_name = recipe_name
65
55
  # Determine whether this resource is being created in the context of an enclosing Provider
@@ -79,15 +69,6 @@ class Chef
79
69
  end
80
70
  end
81
71
 
82
- # emit a cloned resource warning if it is warranted
83
- if prior_resource && Chef::Config[:resource_cloning]
84
- if is_trivial_resource?(prior_resource) && identicalish_resources?(prior_resource, resource)
85
- emit_harmless_cloning_debug
86
- else
87
- emit_cloned_resource_warning
88
- end
89
- end
90
-
91
72
  # Run optional resource hook
92
73
  resource.after_created
93
74
 
@@ -103,51 +84,6 @@ class Chef
103
84
  @resource_class ||= Chef::Resource.resource_for_node(type, run_context.node)
104
85
  end
105
86
 
106
- def is_trivial_resource?(resource)
107
- trivial_resource = resource_class.new(name, run_context)
108
- # force un-lazy the name property on the created trivial resource
109
- name_property = resource_class.properties.find { |sym, p| p.name_property? }
110
- trivial_resource.send(name_property[0]) unless name_property.nil?
111
- identicalish_resources?(trivial_resource, resource)
112
- end
113
-
114
- # this is an equality test specific to checking for 3694 cloning warnings
115
- def identicalish_resources?(first, second)
116
- skipped_ivars = [ :@source_line, :@cookbook_name, :@recipe_name, :@params, :@elapsed_time, :@declared_type ]
117
- checked_ivars = ( first.instance_variables | second.instance_variables ) - skipped_ivars
118
- non_matching_ivars = checked_ivars.reject do |iv|
119
- if iv == :@action && ( [first.instance_variable_get(iv)].flatten == [:nothing] || [second.instance_variable_get(iv)].flatten == [:nothing] )
120
- # :nothing action on either side of the comparison always matches
121
- true
122
- else
123
- first.instance_variable_get(iv) == second.instance_variable_get(iv)
124
- end
125
- end
126
- Chef::Log.debug("ivars which did not match with the prior resource: #{non_matching_ivars}")
127
- non_matching_ivars.empty?
128
- end
129
-
130
- def emit_cloned_resource_warning
131
- message = "Cloning resource attributes for #{resource} from prior resource"
132
- message << "\nPrevious #{prior_resource}: #{prior_resource.source_line}" if prior_resource.source_line
133
- message << "\nCurrent #{resource}: #{resource.source_line}" if resource.source_line
134
- Chef.deprecated(:resource_cloning, message)
135
- end
136
-
137
- def emit_harmless_cloning_debug
138
- Chef::Log.debug("Harmless resource cloning from #{prior_resource}:#{prior_resource.source_line} to #{resource}:#{resource.source_line}")
139
- end
140
-
141
- def prior_resource
142
- @prior_resource ||=
143
- begin
144
- key = "#{type}[#{name}]"
145
- run_context.resource_collection.lookup_local(key)
146
- rescue Chef::Exceptions::ResourceNotFound
147
- nil
148
- end
149
- end
150
-
151
87
  end
152
88
  end
153
89
 
@@ -15,14 +15,17 @@
15
15
  # See the License for the specific language governing permissions and
16
16
  # limitations under the License.
17
17
  #
18
+
19
+ require "chef/json_compat"
20
+
18
21
  class Chef
19
22
  class ResourceCollection
20
23
  module ResourceCollectionSerialization
21
24
  # Serialize this object as a hash
22
25
  def to_hash
23
26
  instance_vars = Hash.new
24
- self.instance_variables.each do |iv|
25
- instance_vars[iv] = self.instance_variable_get(iv)
27
+ instance_variables.each do |iv|
28
+ instance_vars[iv] = instance_variable_get(iv)
26
29
  end
27
30
  {
28
31
  "json_class" => self.class.name,
@@ -39,13 +42,17 @@ class Chef
39
42
  end
40
43
 
41
44
  module ClassMethods
42
- def json_create(o)
43
- collection = self.new()
45
+ def from_hash(o)
46
+ collection = new()
44
47
  o["instance_vars"].each do |k, v|
45
48
  collection.instance_variable_set(k.to_sym, v)
46
49
  end
47
50
  collection
48
51
  end
52
+
53
+ def from_json(j)
54
+ from_hash(Chef::JSONCompat.parse(j))
55
+ end
49
56
  end
50
57
 
51
58
  def is_chef_resource!(arg)
@@ -95,6 +95,12 @@ class Chef
95
95
  end
96
96
  end
97
97
 
98
+ def self.from_hash(o)
99
+ collection = new()
100
+ resources = o["instance_vars"]["@resources"].map { |r| Chef::Resource.from_hash(r) }
101
+ collection.instance_variable_set(:@resources, resources)
102
+ collection
103
+ end
98
104
  end
99
105
  end
100
106
  end