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
@@ -0,0 +1,418 @@
1
+ #
2
+ # Author:: Nimisha Sharad (<nimisha.sharad@msystechnologies.com>)
3
+ # Copyright:: Copyright 2008-2016, Chef Software Inc.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ require "chef/mixin/shell_out"
20
+ require "rexml/document"
21
+ require "iso8601"
22
+ require "chef/mixin/powershell_out"
23
+
24
+ class Chef
25
+ class Provider
26
+ class WindowsTask < Chef::Provider
27
+ include Chef::Mixin::ShellOut
28
+ include Chef::Mixin::PowershellOut
29
+
30
+ provides :windows_task, os: "windows"
31
+
32
+ def load_current_resource
33
+ @current_resource = Chef::Resource::WindowsTask.new(new_resource.name)
34
+ pathed_task_name = new_resource.task_name.start_with?('\\') ? new_resource.task_name : "\\#{new_resource.task_name}"
35
+
36
+ @current_resource.task_name(pathed_task_name)
37
+ task_hash = load_task_hash(pathed_task_name)
38
+
39
+ set_current_resource(task_hash) if task_hash.respond_to?(:[]) && task_hash[:TaskName] == pathed_task_name
40
+ @current_resource
41
+ end
42
+
43
+ def set_current_resource(task_hash)
44
+ @current_resource.exists = true
45
+ @current_resource.command(task_hash[:TaskToRun])
46
+ @current_resource.cwd(task_hash[:StartIn]) unless task_hash[:StartIn] == "N/A"
47
+ @current_resource.user(task_hash[:RunAsUser])
48
+ set_current_run_level task_hash[:run_level]
49
+ set_current_frequency task_hash
50
+ @current_resource.day(task_hash[:day]) if task_hash[:day]
51
+ @current_resource.months(task_hash[:months]) if task_hash[:months]
52
+ set_current_idle_time(task_hash[:idle_time]) if task_hash[:idle_time]
53
+ @current_resource.random_delay(task_hash[:random_delay]) if task_hash[:random_delay]
54
+ @current_resource.execution_time_limit(task_hash[:execution_time_limit]) if task_hash[:execution_time_limit]
55
+
56
+ @current_resource.status = :running if task_hash[:Status] == "Running"
57
+ @current_resource.enabled = true if task_hash[:ScheduledTaskState] == "Enabled"
58
+ end
59
+
60
+ def action_create
61
+ if @current_resource.exists && !(task_need_update? || @new_resource.force)
62
+ Chef::Log.info "#{@new_resource} task already exists - nothing to do"
63
+ else
64
+ options = {}
65
+ options["F"] = "" if @new_resource.force || task_need_update?
66
+ options["SC"] = schedule
67
+ options["MO"] = @new_resource.frequency_modifier if frequency_modifier_allowed
68
+ options["I"] = @new_resource.idle_time unless @new_resource.idle_time.nil?
69
+ options["SD"] = @new_resource.start_day unless @new_resource.start_day.nil?
70
+ options["ST"] = @new_resource.start_time unless @new_resource.start_time.nil?
71
+ options["TR"] = @new_resource.command
72
+ options["RU"] = @new_resource.user
73
+ options["RP"] = @new_resource.password if use_password?
74
+ options["RL"] = "HIGHEST" if @new_resource.run_level == :highest
75
+ options["IT"] = "" if @new_resource.interactive_enabled
76
+ options["D"] = @new_resource.day if @new_resource.day
77
+ options["M"] = @new_resource.months unless @new_resource.months.nil?
78
+
79
+ run_schtasks "CREATE", options
80
+ xml_options = []
81
+ xml_options << "cwd" if new_resource.cwd
82
+ xml_options << "random_delay" if new_resource.random_delay
83
+ xml_options << "execution_time_limit" if new_resource.execution_time_limit
84
+ update_task_xml(xml_options) unless xml_options.empty?
85
+
86
+ new_resource.updated_by_last_action true
87
+ Chef::Log.info "#{@new_resource} task created"
88
+ end
89
+ end
90
+
91
+ def action_run
92
+ if @current_resource.exists
93
+ if @current_resource.status == :running
94
+ Chef::Log.info "#{@new_resource} task is currently running, skipping run"
95
+ else
96
+ run_schtasks "RUN"
97
+ new_resource.updated_by_last_action true
98
+ Chef::Log.info "#{@new_resource} task ran"
99
+ end
100
+ else
101
+ Chef::Log.warn "#{@new_resource} task doesn't exists - nothing to do"
102
+ end
103
+ end
104
+
105
+ def action_delete
106
+ if @current_resource.exists
107
+ # always need to force deletion
108
+ run_schtasks "DELETE", "F" => ""
109
+ new_resource.updated_by_last_action true
110
+ Chef::Log.info "#{@new_resource} task deleted"
111
+ else
112
+ Chef::Log.warn "#{@new_resource} task doesn't exists - nothing to do"
113
+ end
114
+ end
115
+
116
+ def action_end
117
+ if @current_resource.exists
118
+ if @current_resource.status != :running
119
+ Chef::Log.debug "#{@new_resource} is not running - nothing to do"
120
+ else
121
+ run_schtasks "END"
122
+ @new_resource.updated_by_last_action true
123
+ Chef::Log.info "#{@new_resource} task ended"
124
+ end
125
+ else
126
+ Chef::Log.warn "#{@new_resource} task doesn't exist - nothing to do"
127
+ end
128
+ end
129
+
130
+ def action_enable
131
+ if @current_resource.exists
132
+ if @current_resource.enabled
133
+ Chef::Log.debug "#{@new_resource} already enabled - nothing to do"
134
+ else
135
+ run_schtasks "CHANGE", "ENABLE" => ""
136
+ @new_resource.updated_by_last_action true
137
+ Chef::Log.info "#{@new_resource} task enabled"
138
+ end
139
+ else
140
+ Chef::Log.fatal "#{@new_resource} task doesn't exist - nothing to do"
141
+ raise Errno::ENOENT, "#{@new_resource}: task does not exist, cannot enable"
142
+ end
143
+ end
144
+
145
+ def action_disable
146
+ if @current_resource.exists
147
+ if @current_resource.enabled
148
+ run_schtasks "CHANGE", "DISABLE" => ""
149
+ @new_resource.updated_by_last_action true
150
+ Chef::Log.info "#{@new_resource} task disabled"
151
+ else
152
+ Chef::Log.warn "#{@new_resource} already disabled - nothing to do"
153
+ end
154
+ else
155
+ Chef::Log.warn "#{@new_resource} task doesn't exist - nothing to do"
156
+ end
157
+ end
158
+
159
+ private
160
+
161
+ # rubocop:disable Style/StringLiteralsInInterpolation
162
+ def run_schtasks(task_action, options = {})
163
+ cmd = "schtasks /#{task_action} /TN \"#{@new_resource.task_name}\" "
164
+ options.keys.each do |option|
165
+ cmd += "/#{option} "
166
+ cmd += "\"#{options[option].to_s.gsub('"', "\\\"")}\" " unless options[option] == ""
167
+ end
168
+ Chef::Log.debug("running: ")
169
+ Chef::Log.debug(" #{cmd}")
170
+ shell_out!(cmd, returns: [0])
171
+ end
172
+ # rubocop:enable Style/StringLiteralsInInterpolation
173
+
174
+ def task_need_update?
175
+ return true if @current_resource.command != @new_resource.command.tr("'", '"') ||
176
+ @current_resource.user != @new_resource.user ||
177
+ @current_resource.run_level != @new_resource.run_level ||
178
+ @current_resource.cwd != @new_resource.cwd ||
179
+ @current_resource.frequency_modifier != @new_resource.frequency_modifier ||
180
+ @current_resource.frequency != @new_resource.frequency ||
181
+ @current_resource.idle_time != @new_resource.idle_time ||
182
+ @current_resource.random_delay != @new_resource.random_delay ||
183
+ @current_resource.execution_time_limit != @new_resource.execution_time_limit ||
184
+ !@new_resource.start_day.nil? || !@new_resource.start_time.nil?
185
+
186
+ begin
187
+ return true if @new_resource.day.to_s.casecmp(@current_resource.day.to_s) != 0 ||
188
+ @new_resource.months.to_s.casecmp(@current_resource.months.to_s) != 0
189
+ rescue
190
+ Chef::Log.debug "caught a raise in task_needs_update?"
191
+ end
192
+
193
+ false
194
+ end
195
+
196
+ def update_task_xml(options = [])
197
+ # random_delay xml element is different for different frequencies
198
+ random_delay_xml_element = {
199
+ :minute => "Triggers/TimeTrigger/RandomDelay",
200
+ :hourly => "Triggers/TimeTrigger/RandomDelay",
201
+ :once => "Triggers/TimeTrigger/RandomDelay",
202
+ :daily => "Triggers/CalendarTrigger/RandomDelay",
203
+ :weekly => "Triggers/CalendarTrigger/RandomDelay",
204
+ :monthly => "Triggers/CalendarTrigger/RandomDelay",
205
+ }
206
+
207
+ xml_element_mapping = {
208
+ "cwd" => "Actions/Exec/WorkingDirectory",
209
+ "random_delay" => random_delay_xml_element[@new_resource.frequency],
210
+ "execution_time_limit" => "Settings/ExecutionTimeLimit",
211
+ }
212
+
213
+ Chef::Log.debug "looking for existing tasks"
214
+
215
+ task_script = <<-EOH
216
+ [Console]::OutputEncoding = [Text.UTF8Encoding]::UTF8
217
+ schtasks /Query /TN \"#{@new_resource.task_name}\" /XML
218
+ EOH
219
+ xml_cmd = powershell_out(task_script)
220
+
221
+ return if xml_cmd.exitstatus != 0
222
+
223
+ doc = REXML::Document.new(xml_cmd.stdout)
224
+
225
+ options.each do |option|
226
+ Chef::Log.debug 'Removing former #{option} if any'
227
+ doc.root.elements.delete(xml_element_mapping[option])
228
+ option_value = @new_resource.send("#{option}")
229
+
230
+ if option_value
231
+ Chef::Log.debug "Setting #option as #option_value"
232
+ split_xml_path = xml_element_mapping[option].split("/") # eg. if xml_element_mapping[option] = "Actions/Exec/WorkingDirectory"
233
+ element_name = split_xml_path.last # element_name = "WorkingDirectory"
234
+ cwd_element = REXML::Element.new(element_name)
235
+ cwd_element.add_text(option_value)
236
+ element_root = (split_xml_path - [element_name]).join("/") # element_root = 'Actions/Exec'
237
+ exec_element = doc.root.elements[element_root]
238
+ exec_element.add_element(cwd_element)
239
+ end
240
+ end
241
+
242
+ temp_task_file = ::File.join(ENV["TEMP"], "windows_task.xml")
243
+ begin
244
+ ::File.open(temp_task_file, "w:UTF-16LE") do |f|
245
+ doc.write(f)
246
+ end
247
+
248
+ options = {}
249
+ options["RU"] = @new_resource.user if @new_resource.user
250
+ options["RP"] = @new_resource.password if @new_resource.password
251
+ options["IT"] = "" if @new_resource.interactive_enabled
252
+ options["XML"] = temp_task_file
253
+
254
+ run_schtasks("DELETE", "F" => "")
255
+ run_schtasks("CREATE", options)
256
+ ensure
257
+ ::File.delete(temp_task_file)
258
+ end
259
+ end
260
+
261
+ def load_task_hash(task_name)
262
+ Chef::Log.debug "Looking for existing tasks"
263
+
264
+ task_script = <<-EOH
265
+ [Console]::OutputEncoding = [Text.UTF8Encoding]::UTF8
266
+ schtasks /Query /FO LIST /V /TN \"#{task_name}\"
267
+ EOH
268
+
269
+ output = powershell_out(task_script).stdout.force_encoding("UTF-8")
270
+ if output.empty?
271
+ task = false
272
+ else
273
+ task = {}
274
+
275
+ output.split("\n").map! do |line|
276
+ line.split(": ").map!(&:strip)
277
+ end.each do |field|
278
+ if field.is_a?(Array) && field[0].respond_to?(:to_sym)
279
+ key = (field - [field.last]).join(": ")
280
+ task[key.gsub(/\s+/, "").to_sym] = field.last
281
+ end
282
+ end
283
+ end
284
+
285
+ task_xml = load_task_xml task_name
286
+ task.merge!(task_xml) if task && task_xml
287
+
288
+ task
289
+ end
290
+
291
+ def load_task_xml(task_name)
292
+ task_script = <<-EOH
293
+ [Console]::OutputEncoding = [Text.UTF8Encoding]::UTF8
294
+ schtasks /Query /TN \"#{task_name}\" /XML
295
+ EOH
296
+ xml_cmd = powershell_out(task_script)
297
+
298
+ return if xml_cmd.exitstatus != 0
299
+
300
+ doc = REXML::Document.new(xml_cmd.stdout)
301
+ root = doc.root
302
+
303
+ task = {}
304
+ task[:run_level] = root.elements["Principals/Principal/RunLevel"].text if root.elements["Principals/Principal/RunLevel"]
305
+
306
+ # for frequency = :minutes, :hourly
307
+ task[:repetition_interval] = root.elements["Triggers/TimeTrigger/Repetition/Interval"].text if root.elements["Triggers/TimeTrigger/Repetition/Interval"]
308
+
309
+ # for frequency = :daily
310
+ task[:schedule_by_day] = root.elements["Triggers/CalendarTrigger/ScheduleByDay/DaysInterval"].text if root.elements["Triggers/CalendarTrigger/ScheduleByDay/DaysInterval"]
311
+
312
+ # for frequency = :weekly
313
+ task[:schedule_by_week] = root.elements["Triggers/CalendarTrigger/ScheduleByWeek/WeeksInterval"].text if root.elements["Triggers/CalendarTrigger/ScheduleByWeek/WeeksInterval"]
314
+ if root.elements["Triggers/CalendarTrigger/ScheduleByWeek/DaysOfWeek"]
315
+ task[:day] = []
316
+ root.elements["Triggers/CalendarTrigger/ScheduleByWeek/DaysOfWeek"].elements.each do |e|
317
+ task[:day] << e.to_s[0..3].delete("<").delete("/>")
318
+ end
319
+ task[:day] = task[:day].join(", ")
320
+ end
321
+
322
+ # for frequency = :monthly
323
+ task[:schedule_by_month] = root.elements["Triggers/CalendarTrigger/ScheduleByMonth/DaysOfMonth/Day"].text if root.elements["Triggers/CalendarTrigger/ScheduleByMonth/DaysOfMonth/Day"]
324
+ if root.elements["Triggers/CalendarTrigger/ScheduleByMonth/Months"]
325
+ task[:months] = []
326
+ root.elements["Triggers/CalendarTrigger/ScheduleByMonth/Months"].elements.each do |e|
327
+ task[:months] << e.to_s[0..3].delete("<").delete("/>")
328
+ end
329
+ task[:months] = task[:months].join(", ")
330
+ end
331
+
332
+ task[:on_logon] = true if root.elements["Triggers/LogonTrigger"]
333
+ task[:onstart] = true if root.elements["Triggers/BootTrigger"]
334
+ task[:on_idle] = true if root.elements["Triggers/IdleTrigger"]
335
+
336
+ task[:idle_time] = root.elements["Settings/IdleSettings/Duration"].text if root.elements["Settings/IdleSettings/Duration"] && task[:on_idle]
337
+
338
+ task[:once] = true if !(task[:repetition_interval] || task[:schedule_by_day] || task[:schedule_by_week] || task[:schedule_by_month] || task[:on_logon] || task[:onstart] || task[:on_idle])
339
+ task[:execution_time_limit] = root.elements["Settings/ExecutionTimeLimit"].text if root.elements["Settings/ExecutionTimeLimit"] #by default PT72H
340
+ task[:random_delay] = root.elements["Triggers/TimeTrigger/RandomDelay"].text if root.elements["Triggers/TimeTrigger/RandomDelay"]
341
+ task[:random_delay] = root.elements["Triggers/CalendarTrigger/RandomDelay"].text if root.elements["Triggers/CalendarTrigger/RandomDelay"]
342
+ task
343
+ end
344
+
345
+ SYSTEM_USERS = ['NT AUTHORITY\SYSTEM', "SYSTEM", 'NT AUTHORITY\LOCALSERVICE', 'NT AUTHORITY\NETWORKSERVICE', 'BUILTIN\USERS', "USERS"].freeze
346
+
347
+ def use_password?
348
+ @use_password ||= !SYSTEM_USERS.include?(@new_resource.user.upcase)
349
+ end
350
+
351
+ def schedule
352
+ case @new_resource.frequency
353
+ when :on_logon
354
+ "ONLOGON"
355
+ when :on_idle
356
+ "ONIDLE"
357
+ else
358
+ @new_resource.frequency
359
+ end
360
+ end
361
+
362
+ def frequency_modifier_allowed
363
+ case @new_resource.frequency
364
+ when :minute, :hourly, :daily, :weekly
365
+ true
366
+ when :monthly
367
+ @new_resource.months.nil? || %w{ FIRST SECOND THIRD FOURTH LAST LASTDAY }.include?(@new_resource.frequency_modifier)
368
+ else
369
+ false
370
+ end
371
+ end
372
+
373
+ def set_current_run_level(run_level)
374
+ case run_level
375
+ when "HighestAvailable"
376
+ @current_resource.run_level(:highest)
377
+ when "LeastPrivilege"
378
+ @current_resource.run_level(:limited)
379
+ end
380
+ end
381
+
382
+ def set_current_frequency(task_hash)
383
+ if task_hash[:repetition_interval]
384
+ duration = ISO8601::Duration.new(task_hash[:repetition_interval])
385
+ if task_hash[:repetition_interval].include?("M")
386
+ @current_resource.frequency(:minute)
387
+ @current_resource.frequency_modifier(duration.minutes.atom.to_i)
388
+ elsif task_hash[:repetition_interval].include?("H")
389
+ @current_resource.frequency(:hourly)
390
+ @current_resource.frequency_modifier(duration.hours.atom.to_i)
391
+ end
392
+ end
393
+
394
+ if task_hash[:schedule_by_day]
395
+ @current_resource.frequency(:daily)
396
+ @current_resource.frequency_modifier(task_hash[:schedule_by_day].to_i)
397
+ end
398
+
399
+ if task_hash[:schedule_by_week]
400
+ @current_resource.frequency(:weekly)
401
+ @current_resource.frequency_modifier(task_hash[:schedule_by_week].to_i)
402
+ end
403
+
404
+ @current_resource.frequency(:monthly) if task_hash[:schedule_by_month]
405
+ @current_resource.frequency(:on_logon) if task_hash[:on_logon]
406
+ @current_resource.frequency(:onstart) if task_hash[:onstart]
407
+ @current_resource.frequency(:on_idle) if task_hash[:on_idle]
408
+ @current_resource.frequency(:once) if task_hash[:once]
409
+ end
410
+
411
+ def set_current_idle_time(idle_time)
412
+ duration = ISO8601::Duration.new(idle_time)
413
+ @current_resource.idle_time(duration.minutes.atom.to_i)
414
+ end
415
+
416
+ end
417
+ end
418
+ 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,17 +26,14 @@ require "chef/provider/noop"
26
26
  class Chef
27
27
  class Provider
28
28
  class YumRepository < Chef::Provider
29
- use_inline_resources
30
-
31
29
  extend Chef::Mixin::Which
32
30
 
33
31
  provides :yum_repository do
34
32
  which "yum"
35
33
  end
36
34
 
37
- def whyrun_supported?; true; end
38
-
39
- def load_current_resource; end
35
+ def load_current_resource
36
+ end
40
37
 
41
38
  action :create do
42
39
  declare_resource(:template, "/etc/yum.repos.d/#{new_resource.repositoryid}.repo") do
data/lib/chef/provider.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  #
2
2
  # Author:: Adam Jacob (<adam@chef.io>)
3
3
  # Author:: Christopher Walters (<cw@chef.io>)
4
- # Copyright:: Copyright 2008-2016, 2009-2016 Chef Software, Inc.
4
+ # Copyright:: Copyright 2008-2016, 2009-2017, Chef Software Inc.
5
5
  # License:: Apache License, Version 2.0
6
6
  #
7
7
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -51,6 +51,32 @@ class Chef
51
51
  true
52
52
  end
53
53
 
54
+ # Defines an action method on the provider, running the block to compile the
55
+ # resources, converging them, and then checking if any were updated (and
56
+ # updating new-resource if so)
57
+ #
58
+ # @since 13.0
59
+ # @param name [String, Symbol] Name of the action to define.
60
+ # @param block [Proc] Body of the action.
61
+ # @return [void]
62
+ def self.action(name, &block)
63
+ # We need the block directly in a method so that `super` works.
64
+ define_method("compile_action_#{name}", &block)
65
+ class_eval <<-EOM
66
+ def action_#{name}
67
+ compile_and_converge_action { compile_action_#{name} }
68
+ end
69
+ EOM
70
+ end
71
+
72
+ # Deprecation stub for the old use_inline_resources mode.
73
+ #
74
+ # @return [void]
75
+ def self.use_inline_resources
76
+ # Uncomment this in Chef 13.6.
77
+ # Chef.deprecated(:use_inline_resources, "The use_inline_resources mode is no longer optional and the line enabling it can be removed")
78
+ end
79
+
54
80
  #--
55
81
  # TODO: this should be a reader, and the action should be passed in the
56
82
  # constructor; however, many/most subclasses override the constructor so
@@ -75,7 +101,7 @@ class Chef
75
101
  end
76
102
 
77
103
  def whyrun_supported?
78
- false
104
+ true
79
105
  end
80
106
 
81
107
  def node
@@ -176,6 +202,22 @@ class Chef
176
202
  converge_actions.add_action(descriptions, &block)
177
203
  end
178
204
 
205
+ # Create a child run_context, compile the block, and converge it.
206
+ #
207
+ # @api private
208
+ def compile_and_converge_action(&block)
209
+ old_run_context = run_context
210
+ @run_context = run_context.create_child
211
+ return_value = instance_eval(&block)
212
+ Chef::Runner.new(run_context).converge
213
+ return_value
214
+ ensure
215
+ if run_context.resource_collection.any? { |r| r.updated? }
216
+ new_resource.updated_by_last_action(true)
217
+ end
218
+ @run_context = old_run_context
219
+ end
220
+
179
221
  #
180
222
  # Handle patchy convergence safely.
181
223
  #
@@ -267,15 +309,15 @@ class Chef
267
309
  # @param include_resource_dsl [Boolean] Whether to include resource DSL or
268
310
  # not (defaults to `false`).
269
311
  #
270
- def self.include_resource_dsl(include_resource_dsl)
271
- @include_resource_dsl = include_resource_dsl
312
+ def self.include_resource_dsl?
313
+ false
272
314
  end
273
315
 
274
316
  # Create the resource DSL module that forwards resource methods to new_resource
275
317
  #
276
318
  # @api private
277
319
  def self.include_resource_dsl_module(resource)
278
- if @include_resource_dsl && !defined?(@included_resource_dsl_module)
320
+ if include_resource_dsl? && !defined?(@included_resource_dsl_module)
279
321
  provider_class = self
280
322
  @included_resource_dsl_module = Module.new do
281
323
  extend Forwardable
@@ -286,10 +328,26 @@ class Chef
286
328
  resource.class.properties.each do |name, property|
287
329
  class_eval(<<-EOM, __FILE__, __LINE__)
288
330
  def #{name}(*args, &block)
331
+ # FIXME: DEPRECATE THIS IN CHEF 13.1
332
+ #
289
333
  # If no arguments were passed, we process "get" by defaulting
290
334
  # the value to current_resource, not new_resource. This helps
291
335
  # avoid issues where resources accidentally overwrite perfectly
292
336
  # valid stuff with default values.
337
+ #
338
+ # This magic is to make this kind of thing easy:
339
+ #
340
+ # FileUtils.chown new_resource.mode.nil? ? current_resource.mode : new_resource.mode, new_resource.path
341
+ #
342
+ # We do this in the file provider where we need to construct a new filesystem object and
343
+ # when the new_resource is nil/default that means "preserve the current stuff" and does not
344
+ # mean to ignore it which will wind up defaulting to changing the file to have a "root"
345
+ # ownership if anything else changes. Its kind of overly clever and magical, and most likely
346
+ # gets the use case wrong where someone has a property that they really mean to default to
347
+ # some value which /should/ get set if its left as the default and where the default is
348
+ # meant to be declarative. Instead of property_is_set? we should most likely be using
349
+ # nil? but we're going to deprecate all of it anyway. Just type out what you really mean longhand.
350
+ #
293
351
  if args.empty? && !block
294
352
  if !new_resource.property_is_set?(__method__) && current_resource
295
353
  return current_resource.public_send(__method__)
@@ -310,89 +368,6 @@ class Chef
310
368
  end
311
369
  end
312
370
 
313
- # Enables inline evaluation of resources in provider actions.
314
- #
315
- # Without this option, any resources declared inside the Provider are added
316
- # to the resource collection after the current position at the time the
317
- # action is executed. Because they are added to the primary resource
318
- # collection for the chef run, they can notify other resources outside
319
- # the Provider, and potentially be notified by resources outside the Provider
320
- # (but this is complicated by the fact that they don't exist until the
321
- # provider executes). In this mode, it is impossible to correctly set the
322
- # updated_by_last_action flag on the parent Provider resource, since it
323
- # executes and returns before its component resources are run.
324
- #
325
- # With this option enabled, each action creates a temporary run_context
326
- # with its own resource collection, evaluates the action's code in that
327
- # context, and then converges the resources created. If any resources
328
- # were updated, then this provider's new_resource will be marked updated.
329
- #
330
- # In this mode, resources created within the Provider cannot interact with
331
- # external resources via notifies, though notifications to other
332
- # resources within the Provider will work. Delayed notifications are executed
333
- # at the conclusion of the provider's action, *not* at the end of the
334
- # main chef run.
335
- #
336
- # This mode of evaluation is experimental, but is believed to be a better
337
- # set of tradeoffs than the append-after mode, so it will likely become
338
- # the default in a future major release of Chef.
339
- #
340
- def self.use_inline_resources
341
- extend InlineResources::ClassMethods
342
- include InlineResources
343
- end
344
-
345
- # Chef::Provider::InlineResources
346
- # Implementation of inline resource convergence for providers. See
347
- # Provider.use_inline_resources for a longer explanation.
348
- #
349
- # This code is restricted to a module so that it can be selectively
350
- # applied to providers on an opt-in basis.
351
- #
352
- # @api private
353
- module InlineResources
354
-
355
- # Create a child run_context, compile the block, and converge it.
356
- #
357
- # @api private
358
- def compile_and_converge_action(&block)
359
- old_run_context = run_context
360
- @run_context = run_context.create_child
361
- return_value = instance_eval(&block)
362
- Chef::Runner.new(run_context).converge
363
- return_value
364
- ensure
365
- if run_context.resource_collection.any? { |r| r.updated? }
366
- new_resource.updated_by_last_action(true)
367
- end
368
- @run_context = old_run_context
369
- end
370
-
371
- # Class methods for InlineResources. Overrides the `action` DSL method
372
- # with one that enables inline resource convergence.
373
- #
374
- # @api private
375
- module ClassMethods
376
- # Defines an action method on the provider, running the block to
377
- # compile the resources, converging them, and then checking if any
378
- # were updated (and updating new-resource if so)
379
- def action(name, &block)
380
- # We need the block directly in a method so that `super` works
381
- define_method("compile_action_#{name}", &block)
382
- # We try hard to use `def` because define_method doesn't show the method name in the stack.
383
- begin
384
- class_eval <<-EOM
385
- def action_#{name}
386
- compile_and_converge_action { compile_action_#{name} }
387
- end
388
- EOM
389
- rescue SyntaxError
390
- define_method("action_#{name}") { send("compile_action_#{name}") }
391
- end
392
- end
393
- end
394
- end
395
-
396
371
  protected
397
372
 
398
373
  def converge_actions
@@ -421,33 +396,6 @@ class Chef
421
396
  end
422
397
  end
423
398
 
424
- module DeprecatedLWRPClass
425
- def const_missing(class_name)
426
- if Chef::Provider.deprecated_constants[class_name.to_sym]
427
- Chef.deprecated(:custom_resource, "Using an LWRP provider by its name (#{class_name}) directly is no longer supported in Chef 12 and will be removed. Use Chef::ProviderResolver.new(node, resource, action) instead.")
428
- Chef::Provider.deprecated_constants[class_name.to_sym]
429
- else
430
- raise NameError, "uninitialized constant Chef::Provider::#{class_name}"
431
- end
432
- end
433
-
434
- # @api private
435
- def register_deprecated_lwrp_class(provider_class, class_name)
436
- # Register Chef::Provider::MyProvider with deprecation warnings if you
437
- # try to access it
438
- if Chef::Provider.const_defined?(class_name, false)
439
- Chef::Log.warn "Chef::Provider::#{class_name} already exists! Cannot create deprecation class for #{provider_class}"
440
- else
441
- Chef::Provider.deprecated_constants[class_name.to_sym] = provider_class
442
- end
443
- end
444
-
445
- def deprecated_constants
446
- raise "Deprecated constants should be called only on Chef::Provider" unless self == Chef::Provider
447
- @deprecated_constants ||= {}
448
- end
449
- end
450
- extend DeprecatedLWRPClass
451
399
  end
452
400
  end
453
401