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/property.rb CHANGED
@@ -74,7 +74,7 @@ class Chef
74
74
  # return `true` if the property is set *or* if `name` is set.
75
75
  # @option options [Boolean] :nillable `true` opt-in to Chef-13 style behavior where
76
76
  # attempting to set a nil value will really set a nil value instead of issuing
77
- # a warning and operating like a getter
77
+ # a warning and operating like a getter [DEPRECATED]
78
78
  # @option options [Object] :default The value this property
79
79
  # will return if the user does not set one. If this is `lazy`, it will
80
80
  # be run in the context of the instance (and able to access other
@@ -106,17 +106,22 @@ class Chef
106
106
  @options = options
107
107
  end
108
108
 
109
- # Only pick the first of :default, :name_property and :name_attribute if
110
- # more than one is specified.
111
- if options.has_key?(:default) && options[:name_property]
112
- if options[:default].nil? || options.keys.index(:name_property) < options.keys.index(:default)
113
- options.delete(:default)
114
- preferred_default = :name_property
115
- else
116
- options.delete(:name_property)
117
- preferred_default = :default
109
+ if options.has_key?(:default) && options.has_key?(:name_property)
110
+ raise ArgumentError, "Cannot specify both default and name_property/name_attribute together on property #{self}"
111
+ end
112
+
113
+ # Recursively freeze the default if it isn't a lazy value.
114
+ unless default.is_a?(DelayedEvaluator)
115
+ visitor = lambda do |obj|
116
+ case obj
117
+ when Hash
118
+ obj.each_value { |value| visitor.call(value) }
119
+ when Array
120
+ obj.each { |value| visitor.call(value) }
121
+ end
122
+ obj.freeze
118
123
  end
119
- Chef.deprecated(:custom_resource, "Cannot specify both default and name_property together on property #{self}. Only one (#{preferred_default}) will be obeyed. In Chef 13, this will become an error. Please remove one or the other from the property.")
124
+ visitor.call(default)
120
125
  end
121
126
 
122
127
  # Validate the default early, so the user gets a good error message, and
@@ -273,32 +278,8 @@ class Chef
273
278
  #
274
279
  def call(resource, value = NOT_PASSED)
275
280
  if value == NOT_PASSED
276
- return get(resource)
277
- end
278
-
279
- if value.nil? && !nillable?
280
- # In Chef 12, value(nil) does a *get* instead of a set, so we
281
- # warn if the value would have been changed. In Chef 13, it will be
282
- # equivalent to value = nil.
283
- result = get(resource, nil_set: true)
284
-
285
- # Warn about this becoming a set in Chef 13.
286
- begin
287
- input_to_stored_value(resource, value)
288
- # If nil is valid, and it would change the value, warn that this will change to a set.
289
- if !result.nil?
290
- Chef.deprecated(:custom_resource, "An attempt was made to change #{name} from #{result.inspect} to nil by calling #{name}(nil). In Chef 12, this does a get rather than a set. In Chef 13, this will change to set the value to nil.")
291
- end
292
- rescue Chef::Exceptions::DeprecatedFeatureError
293
- raise
294
- rescue
295
- # If nil is invalid, warn that this will become an error.
296
- Chef.deprecated(:custom_resource, "nil is an invalid value for #{self}. In Chef 13, this warning will change to an error. Error: #{$!}")
297
- end
298
-
299
- result
281
+ get(resource)
300
282
  else
301
- # Anything else, such as myprop(value) is a set
302
283
  set(resource, value)
303
284
  end
304
285
  end
@@ -327,10 +308,11 @@ class Chef
327
308
  #
328
309
  def get(resource, nil_set: false)
329
310
  # If it's set, return it (and evaluate any lazy values)
311
+ value = nil
312
+
330
313
  if is_set?(resource)
331
314
  value = get_value(resource)
332
315
  value = stored_value_to_output(resource, value)
333
-
334
316
  else
335
317
  # We are getting the default value.
336
318
 
@@ -375,13 +357,14 @@ class Chef
375
357
  if !value.frozen? && !value.nil?
376
358
  set_value(resource, value)
377
359
  end
378
-
379
- value
380
-
381
- elsif required?
382
- raise Chef::Exceptions::ValidationFailed, "#{name} is required"
383
360
  end
384
361
  end
362
+
363
+ if value.nil? && required?
364
+ raise Chef::Exceptions::ValidationFailed, "#{name} is required"
365
+ else
366
+ value
367
+ end
385
368
  end
386
369
 
387
370
  #
@@ -400,7 +383,13 @@ class Chef
400
383
  # this property.
401
384
  #
402
385
  def set(resource, value)
403
- set_value(resource, input_to_stored_value(resource, value))
386
+ value = set_value(resource, input_to_stored_value(resource, value))
387
+
388
+ if value.nil? && required?
389
+ raise Chef::Exceptions::ValidationFailed, "#{name} is required"
390
+ else
391
+ value
392
+ end
404
393
  end
405
394
 
406
395
  #
@@ -453,8 +442,8 @@ class Chef
453
442
  #
454
443
  def coerce(resource, value)
455
444
  if options.has_key?(:coerce)
456
- # If we have no default value, `nil` is never coerced or validated
457
- unless !has_default? && value.nil?
445
+ # nil is never coerced
446
+ unless value.nil?
458
447
  value = exec_in_resource(resource, options[:coerce], value)
459
448
  end
460
449
  end
@@ -475,8 +464,8 @@ class Chef
475
464
  # this property.
476
465
  #
477
466
  def validate(resource, value)
478
- # If we have no default value, `nil` is never coerced or validated
479
- unless value.nil? && !has_default?
467
+ # nils are not validated unless we have an explicit default value
468
+ if !value.nil? || has_default?
480
469
  if resource
481
470
  resource.validate({ name => value }, { name => validation_options })
482
471
  else
@@ -518,6 +507,16 @@ class Chef
518
507
  # be using the existing getter/setter to manipulate it instead.
519
508
  return if !instance_variable_name
520
509
 
510
+ # Properties may override existing properties up the inheritance heirarchy, but
511
+ # properties must not override inherited methods like Object#hash. When the Resource is
512
+ # placed into the resource collection the ruby Hash object will call the
513
+ # Object#hash method on the resource, and overriding that with a property will cause
514
+ # very confusing results.
515
+ if property_redefines_method?
516
+ resource_name = declared_in.respond_to?(:resource_name) ? declared_in.resource_name : declared_in
517
+ raise ArgumentError, "Property `#{name}` of resource `#{resource_name}` overwrites an existing method."
518
+ end
519
+
521
520
  # We prefer this form because the property name won't show up in the
522
521
  # stack trace if you use `define_method`.
523
522
  declared_in.class_eval <<-EOM, __FILE__, __LINE__ + 1
@@ -530,16 +529,6 @@ class Chef
530
529
  self.class.properties[#{name.inspect}].set(self, value)
531
530
  end
532
531
  EOM
533
- rescue SyntaxError
534
- # If the name is not a valid ruby name, we use define_method.
535
- declared_in.define_method(name) do |value = NOT_PASSED, &block|
536
- raise "Property `#{name}` of `#{self}` was incorrectly passed a block! Possible property-resource collision. To call a resource named `#{name}` either rename the property or else use `declare_resource(:#{name}, ...)`" if block
537
- self.class.properties[name].call(self, value)
538
- end
539
- declared_in.define_method("#{name}=") do |value, &block|
540
- raise "Property `#{name}` of `#{self}` was incorrectly passed a block! Possible property-resource collision. To call a resource named `#{name}` either rename the property or else use `declare_resource(:#{name}, ...)`" if block
541
- self.class.properties[name].set(self, value)
542
- end
543
532
  end
544
533
 
545
534
  #
@@ -632,6 +621,25 @@ class Chef
632
621
 
633
622
  private
634
623
 
624
+ def property_redefines_method?
625
+ # We only emit deprecations if this property already exists as an instance method.
626
+ # Weeding out class methods avoids unnecessary deprecations such Chef::Resource
627
+ # defining a `name` property when there's an already-existing `name` method
628
+ # for a Module.
629
+ return false unless declared_in.instance_methods.include?(name)
630
+
631
+ # Only emit deprecations for some well-known classes. This will still
632
+ # allow more advanced users to subclass their own custom resources and
633
+ # override their own properties.
634
+ return false unless [ Object, BasicObject, Kernel, Chef::Resource ].include?(declared_in.instance_method(name).owner)
635
+
636
+ # Allow top-level Chef::Resource proprties, such as `name`, to be overridden.
637
+ # As of this writing, `name` is the only Chef::Resource property created with the
638
+ # `property` definition, but this will allow for future properties to be extended
639
+ # as needed.
640
+ !Chef::Resource.properties.keys.include?(name)
641
+ end
642
+
635
643
  def exec_in_resource(resource, proc, *args)
636
644
  if resource
637
645
  if proc.arity > args.size
@@ -666,31 +674,9 @@ class Chef
666
674
  # valid.
667
675
  def coerce_and_validate(resource, value, is_default: false)
668
676
  result = coerce(resource, value)
669
- begin
670
- # If the input is from a default, we need to emit an invalid default warning on validate.
671
- validate(resource, result)
672
- rescue Chef::Exceptions::CannotValidateStaticallyError
673
- # This one gets re-raised
674
- raise
675
- rescue
676
- # Anything else is just an invalid default: in those cases, we just
677
- # warn and return the (possibly coerced) value to the user.
678
- if is_default
679
- if value.nil?
680
- Chef.deprecated(:custom_resource, "Default value nil is invalid for property #{self}. Possible fixes: 1. Remove 'default: nil' if nil means 'undefined'. 2. Set a valid default value if there is a reasonable one. 3. Allow nil as a valid value of your property (for example, 'property #{name.inspect}, [ String, nil ], default: nil'). Error: #{$!}")
681
- else
682
- Chef.deprecated(:custom_resource, "Default value #{value.inspect} is invalid for property #{self}. In Chef 13 this will become an error: #{$!}.")
683
- end
684
- else
685
- raise
686
- end
687
- end
677
+ validate(resource, result)
688
678
 
689
679
  result
690
680
  end
691
-
692
- def nillable?
693
- !!options[:nillable]
694
- end
695
681
  end
696
682
  end
@@ -1,6 +1,6 @@
1
1
  #
2
2
  # Author:: Thom May (<thom@chef.io>)
3
- # Copyright:: Copyright (c) 2016 Chef Software, Inc.
3
+ # Copyright:: Copyright (c) 2016-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");
@@ -26,8 +26,6 @@ require "chef/provider/noop"
26
26
  class Chef
27
27
  class Provider
28
28
  class AptRepository < Chef::Provider
29
- use_inline_resources
30
-
31
29
  include Chef::Mixin::ShellOut
32
30
  extend Chef::Mixin::Which
33
31
 
@@ -35,10 +33,6 @@ class Chef
35
33
  which("apt-get")
36
34
  end
37
35
 
38
- def whyrun_supported?
39
- true
40
- end
41
-
42
36
  def load_current_resource
43
37
  end
44
38
 
@@ -115,7 +109,7 @@ class Chef
115
109
  so = shell_out(cmd)
116
110
  so.run_command
117
111
  so.stdout.split(/\n/).map do |t|
118
- if z = t.match(/^ +Key fingerprint = ([0-9A-F ]+)/)
112
+ if z = t.match(/^fpr:+([0-9A-F]+):/)
119
113
  z[1].split.join
120
114
  end
121
115
  end.compact
@@ -147,8 +141,10 @@ class Chef
147
141
  end
148
142
 
149
143
  def no_new_keys?(file)
150
- installed_keys = extract_fingerprints_from_cmd("apt-key finger")
151
- proposed_keys = extract_fingerprints_from_cmd("gpg --with-fingerprint #{file}")
144
+ # Now we are using the option --with-colons that works across old os versions
145
+ # as well as the latest (16.10). This for both `apt-key` and `gpg` commands
146
+ installed_keys = extract_fingerprints_from_cmd("apt-key adv --list-public-keys --with-fingerprint --with-colons")
147
+ proposed_keys = extract_fingerprints_from_cmd("gpg --with-fingerprint --with-colons #{file}")
152
148
  (installed_keys & proposed_keys).sort == proposed_keys.sort
153
149
  end
154
150
 
@@ -1,6 +1,6 @@
1
1
  #
2
2
  # Author:: Thom May (<thom@chef.io>)
3
- # Copyright:: Copyright (c) 2016 Chef Software, Inc.
3
+ # Copyright:: Copyright (c) 2016-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");
@@ -23,8 +23,6 @@ require "chef/mixin/which"
23
23
  class Chef
24
24
  class Provider
25
25
  class AptUpdate < Chef::Provider
26
- use_inline_resources
27
-
28
26
  extend Chef::Mixin::Which
29
27
 
30
28
  provides :apt_update do
@@ -34,10 +32,6 @@ class Chef
34
32
  APT_CONF_DIR = "/etc/apt/apt.conf.d"
35
33
  STAMP_DIR = "/var/lib/apt/periodic"
36
34
 
37
- def whyrun_supported?
38
- true
39
- end
40
-
41
35
  def load_current_resource
42
36
  end
43
37
 
@@ -37,7 +37,7 @@ class Chef
37
37
  end
38
38
 
39
39
  def flags
40
- @new_resource.flags.nil? ? "/c" : new_resource.flags + " /c"
40
+ new_resource.flags.nil? ? "/c" : new_resource.flags + " /c"
41
41
  end
42
42
 
43
43
  end
@@ -1,6 +1,6 @@
1
1
  #
2
2
  # Author:: Daniel DeLeo (<dan@kallistec.com>)
3
- # Copyright:: Copyright 2008-2016, Chef Software Inc.
3
+ # Copyright:: Copyright 2008-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");
@@ -28,7 +28,7 @@ class Chef
28
28
  def action_break
29
29
  if defined?(Shell) && Shell.running?
30
30
  run_context.resource_collection.iterator.pause
31
- @new_resource.updated_by_last_action(true)
31
+ new_resource.updated_by_last_action(true)
32
32
  run_context.resource_collection.iterator
33
33
  end
34
34
  end
@@ -17,8 +17,6 @@
17
17
  #
18
18
 
19
19
  require "chef/provider/file"
20
- require "chef/deprecation/provider/cookbook_file"
21
- require "chef/deprecation/warnings"
22
20
 
23
21
  class Chef
24
22
  class Provider
@@ -26,25 +24,21 @@ class Chef
26
24
 
27
25
  provides :cookbook_file
28
26
 
29
- extend Chef::Deprecation::Warnings
30
- include Chef::Deprecation::Provider::CookbookFile
31
- add_deprecation_warnings_for(Chef::Deprecation::Provider::CookbookFile.instance_methods)
32
-
33
27
  def initialize(new_resource, run_context)
34
28
  @content_class = Chef::Provider::CookbookFile::Content
35
29
  super
36
30
  end
37
31
 
38
32
  def load_current_resource
39
- @current_resource = Chef::Resource::CookbookFile.new(@new_resource.name)
33
+ @current_resource = Chef::Resource::CookbookFile.new(new_resource.name)
40
34
  super
41
35
  end
42
36
 
43
37
  private
44
38
 
45
39
  def managing_content?
46
- return true if @new_resource.checksum
47
- return true if !@new_resource.source.nil? && @action != :create_if_missing
40
+ return true if new_resource.checksum
41
+ return true if !new_resource.source.nil? && @action != :create_if_missing
48
42
  false
49
43
  end
50
44
 
@@ -17,13 +17,11 @@
17
17
  #
18
18
 
19
19
  require "chef/log"
20
- require "chef/mixin/command"
21
20
  require "chef/provider"
22
21
 
23
22
  class Chef
24
23
  class Provider
25
24
  class Cron < Chef::Provider
26
- include Chef::Mixin::Command
27
25
 
28
26
  provides :cron, os: ["!aix", "!solaris2"]
29
27
 
@@ -42,21 +40,17 @@ class Chef
42
40
  end
43
41
  attr_accessor :cron_exists, :cron_empty
44
42
 
45
- def whyrun_supported?
46
- true
47
- end
48
-
49
43
  def load_current_resource
50
44
  crontab_lines = []
51
- @current_resource = Chef::Resource::Cron.new(@new_resource.name)
52
- @current_resource.user(@new_resource.user)
45
+ @current_resource = Chef::Resource::Cron.new(new_resource.name)
46
+ current_resource.user(new_resource.user)
53
47
  @cron_exists = false
54
48
  if crontab = read_crontab
55
49
  cron_found = false
56
50
  crontab.each_line do |line|
57
51
  case line.chomp
58
- when "# Chef Name: #{@new_resource.name}"
59
- Chef::Log.debug("Found cron '#{@new_resource.name}'")
52
+ when "# Chef Name: #{new_resource.name}"
53
+ Chef::Log.debug("Found cron '#{new_resource.name}'")
60
54
  cron_found = true
61
55
  @cron_exists = true
62
56
  next
@@ -65,18 +59,18 @@ class Chef
65
59
  next
66
60
  when SPECIAL_PATTERN
67
61
  if cron_found
68
- @current_resource.time($2.to_sym)
69
- @current_resource.command($3)
62
+ current_resource.time($2.to_sym)
63
+ current_resource.command($3)
70
64
  cron_found = false
71
65
  end
72
66
  when CRON_PATTERN
73
67
  if cron_found
74
- @current_resource.minute($1)
75
- @current_resource.hour($2)
76
- @current_resource.day($3)
77
- @current_resource.month($4)
78
- @current_resource.weekday($5)
79
- @current_resource.command($6)
68
+ current_resource.minute($1)
69
+ current_resource.hour($2)
70
+ current_resource.day($3)
71
+ current_resource.month($4)
72
+ current_resource.weekday($5)
73
+ current_resource.command($6)
80
74
  cron_found = false
81
75
  end
82
76
  next
@@ -85,18 +79,18 @@ class Chef
85
79
  next
86
80
  end
87
81
  end
88
- Chef::Log.debug("Cron '#{@new_resource.name}' not found") unless @cron_exists
82
+ Chef::Log.debug("Cron '#{new_resource.name}' not found") unless @cron_exists
89
83
  else
90
- Chef::Log.debug("Cron empty for '#{@new_resource.user}'")
84
+ Chef::Log.debug("Cron empty for '#{new_resource.user}'")
91
85
  @cron_empty = true
92
86
  end
93
87
 
94
- @current_resource
88
+ current_resource
95
89
  end
96
90
 
97
91
  def cron_different?
98
92
  CRON_ATTRIBUTES.any? do |cron_var|
99
- @new_resource.send(cron_var) != @current_resource.send(cron_var)
93
+ new_resource.send(cron_var) != current_resource.send(cron_var)
100
94
  end
101
95
  end
102
96
 
@@ -109,12 +103,12 @@ class Chef
109
103
 
110
104
  if @cron_exists
111
105
  unless cron_different?
112
- Chef::Log.debug("Skipping existing cron entry '#{@new_resource.name}'")
106
+ Chef::Log.debug("Skipping existing cron entry '#{new_resource.name}'")
113
107
  return
114
108
  end
115
109
  read_crontab.each_line do |line|
116
110
  case line.chomp
117
- when "# Chef Name: #{@new_resource.name}"
111
+ when "# Chef Name: #{new_resource.name}"
118
112
  cron_found = true
119
113
  next
120
114
  when ENV_PATTERN
@@ -144,18 +138,18 @@ class Chef
144
138
  # Handle edge case where the Chef comment is the last line in the current crontab
145
139
  crontab << newcron if cron_found
146
140
 
147
- converge_by("update crontab entry for #{@new_resource}") do
141
+ converge_by("update crontab entry for #{new_resource}") do
148
142
  write_crontab crontab
149
- Chef::Log.info("#{@new_resource} updated crontab entry")
143
+ Chef::Log.info("#{new_resource} updated crontab entry")
150
144
  end
151
145
 
152
146
  else
153
147
  crontab = read_crontab unless @cron_empty
154
148
  crontab << newcron
155
149
 
156
- converge_by("add crontab entry for #{@new_resource}") do
150
+ converge_by("add crontab entry for #{new_resource}") do
157
151
  write_crontab crontab
158
- Chef::Log.info("#{@new_resource} added crontab entry")
152
+ Chef::Log.info("#{new_resource} added crontab entry")
159
153
  end
160
154
  end
161
155
  end
@@ -166,7 +160,7 @@ class Chef
166
160
  cron_found = false
167
161
  read_crontab.each_line do |line|
168
162
  case line.chomp
169
- when "# Chef Name: #{@new_resource.name}"
163
+ when "# Chef Name: #{new_resource.name}"
170
164
  cron_found = true
171
165
  next
172
166
  when ENV_PATTERN
@@ -187,10 +181,10 @@ class Chef
187
181
  end
188
182
  crontab << line
189
183
  end
190
- description = cron_found ? "remove #{@new_resource.name} from crontab" : "save unmodified crontab"
184
+ description = cron_found ? "remove #{new_resource.name} from crontab" : "save unmodified crontab"
191
185
  converge_by(description) do
192
186
  write_crontab crontab
193
- Chef::Log.info("#{@new_resource} deleted crontab entry")
187
+ Chef::Log.info("#{new_resource} deleted crontab entry")
194
188
  end
195
189
  end
196
190
  end
@@ -199,60 +193,48 @@ class Chef
199
193
 
200
194
  def set_environment_var(attr_name, attr_value)
201
195
  if %w{MAILTO PATH SHELL HOME}.include?(attr_name)
202
- @current_resource.send(attr_name.downcase.to_sym, attr_value.gsub(/^"|"$/, ""))
196
+ current_resource.send(attr_name.downcase.to_sym, attr_value.gsub(/^"|"$/, ""))
203
197
  else
204
- @current_resource.environment(@current_resource.environment.merge(attr_name => attr_value))
198
+ current_resource.environment(current_resource.environment.merge(attr_name => attr_value))
205
199
  end
206
200
  end
207
201
 
208
202
  def read_crontab
209
- crontab = nil
210
- status = popen4("crontab -l -u #{@new_resource.user}") do |pid, stdin, stdout, stderr|
211
- crontab = stdout.read
212
- end
213
- if status.exitstatus > 1
214
- raise Chef::Exceptions::Cron, "Error determining state of #{@new_resource.name}, exit: #{status.exitstatus}"
215
- end
216
- crontab
203
+ so = shell_out!("crontab -l -u #{new_resource.user}", returns: [0, 1])
204
+ return nil if so.exitstatus == 1
205
+ so.stdout
206
+ rescue => e
207
+ raise Chef::Exceptions::Cron, "Error determining state of #{new_resource.name}, error: #{e}"
217
208
  end
218
209
 
219
210
  def write_crontab(crontab)
220
211
  write_exception = false
221
- status = popen4("crontab -u #{@new_resource.user} -", :waitlast => true) do |pid, stdin, stdout, stderr|
222
- begin
223
- stdin.write crontab
224
- rescue Errno::EPIPE => e
225
- # popen4 could yield while child has already died.
226
- write_exception = true
227
- Chef::Log.debug("#{e.message}")
228
- end
229
- end
230
- if status.exitstatus > 0 || write_exception
231
- raise Chef::Exceptions::Cron, "Error updating state of #{@new_resource.name}, exit: #{status.exitstatus}"
232
- end
212
+ so = shell_out!("crontab -u #{new_resource.user} -", input: crontab)
213
+ rescue => e
214
+ raise Chef::Exceptions::Cron, "Error updating state of #{new_resource.name}, error: #{e}"
233
215
  end
234
216
 
235
217
  def get_crontab_entry
236
218
  newcron = ""
237
219
  newcron << "# Chef Name: #{new_resource.name}\n"
238
220
  [ :mailto, :path, :shell, :home ].each do |v|
239
- newcron << "#{v.to_s.upcase}=\"#{@new_resource.send(v)}\"\n" if @new_resource.send(v)
221
+ newcron << "#{v.to_s.upcase}=\"#{new_resource.send(v)}\"\n" if new_resource.send(v)
240
222
  end
241
- @new_resource.environment.each do |name, value|
223
+ new_resource.environment.each do |name, value|
242
224
  newcron << "#{name}=#{value}\n"
243
225
  end
244
- if @new_resource.time
245
- newcron << "@#{@new_resource.time} #{@new_resource.command}\n"
226
+ if new_resource.time
227
+ newcron << "@#{new_resource.time} #{new_resource.command}\n"
246
228
  else
247
- newcron << "#{@new_resource.minute} #{@new_resource.hour} #{@new_resource.day} #{@new_resource.month} #{@new_resource.weekday} #{@new_resource.command}\n"
229
+ newcron << "#{new_resource.minute} #{new_resource.hour} #{new_resource.day} #{new_resource.month} #{new_resource.weekday} #{new_resource.command}\n"
248
230
  end
249
231
  newcron
250
232
  end
251
233
 
252
234
  def weekday_in_crontab
253
- weekday_in_crontab = WEEKDAY_SYMBOLS.index(@new_resource.weekday)
235
+ weekday_in_crontab = WEEKDAY_SYMBOLS.index(new_resource.weekday)
254
236
  if weekday_in_crontab.nil?
255
- @new_resource.weekday
237
+ new_resource.weekday
256
238
  else
257
239
  weekday_in_crontab.to_s
258
240
  end
@@ -91,11 +91,9 @@ class Chef
91
91
  end
92
92
 
93
93
  def load_cache
94
- begin
95
- Chef::JSONCompat.parse(Chef::FileCache.load("revision-deploys/#{new_resource.name}"))
96
- rescue Chef::Exceptions::FileNotFound
97
- sorted_releases_from_filesystem
98
- end
94
+ Chef::JSONCompat.parse(Chef::FileCache.load("revision-deploys/#{new_resource.name}"))
95
+ rescue Chef::Exceptions::FileNotFound
96
+ sorted_releases_from_filesystem
99
97
  end
100
98
 
101
99
  def save_cache(cache)