chef 12.0.0.alpha.2-x86-mingw32 → 12.0.0.rc.0-x86-mingw32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (628) hide show
  1. data/CONTRIBUTING.md +9 -0
  2. data/README.md +1 -1
  3. data/Rakefile +12 -0
  4. data/bin/chef-service-manager +1 -1
  5. data/bin/chef-windows-service +35 -0
  6. data/distro/common/html/_sources/ctl_chef_server.txt +307 -10
  7. data/distro/common/html/ctl_chef_client.html +3 -7
  8. data/distro/common/html/ctl_chef_server.html +609 -41
  9. data/distro/common/html/ctl_chef_shell.html +2 -2
  10. data/distro/common/html/ctl_chef_solo.html +1 -1
  11. data/distro/common/html/index.html +13 -13
  12. data/distro/common/html/knife.html +10 -10
  13. data/distro/common/html/knife_bootstrap.html +8 -8
  14. data/distro/common/html/knife_client.html +12 -12
  15. data/distro/common/html/knife_common_options.html +7 -7
  16. data/distro/common/html/knife_configure.html +3 -3
  17. data/distro/common/html/knife_cookbook.html +19 -19
  18. data/distro/common/html/knife_cookbook_site.html +28 -28
  19. data/distro/common/html/knife_data_bag.html +28 -13
  20. data/distro/common/html/knife_delete.html +2 -2
  21. data/distro/common/html/knife_deps.html +3 -3
  22. data/distro/common/html/knife_diff.html +4 -4
  23. data/distro/common/html/knife_download.html +3 -3
  24. data/distro/common/html/knife_edit.html +2 -2
  25. data/distro/common/html/knife_environment.html +14 -14
  26. data/distro/common/html/knife_exec.html +11 -11
  27. data/distro/common/html/knife_index_rebuild.html +2 -2
  28. data/distro/common/html/knife_list.html +3 -3
  29. data/distro/common/html/knife_node.html +23 -23
  30. data/distro/common/html/knife_raw.html +4 -4
  31. data/distro/common/html/knife_recipe_list.html +3 -3
  32. data/distro/common/html/knife_role.html +11 -11
  33. data/distro/common/html/knife_search.html +4 -4
  34. data/distro/common/html/knife_serve.html +3 -3
  35. data/distro/common/html/knife_show.html +3 -3
  36. data/distro/common/html/knife_ssh.html +7 -7
  37. data/distro/common/html/knife_ssl_check.html +7 -7
  38. data/distro/common/html/knife_ssl_fetch.html +9 -9
  39. data/distro/common/html/knife_status.html +3 -3
  40. data/distro/common/html/knife_tag.html +9 -9
  41. data/distro/common/html/knife_upload.html +3 -3
  42. data/distro/common/html/knife_user.html +9 -9
  43. data/distro/common/html/knife_using.html +11 -11
  44. data/distro/common/html/knife_xargs.html +14 -5
  45. data/distro/common/html/search.html +2 -2
  46. data/distro/common/html/searchindex.js +1 -1
  47. data/distro/common/man/man1/chef-shell.1 +2 -2
  48. data/distro/common/man/man1/knife-bootstrap.1 +7 -7
  49. data/distro/common/man/man1/knife-client.1 +10 -10
  50. data/distro/common/man/man1/knife-configure.1 +5 -5
  51. data/distro/common/man/man1/knife-cookbook-site.1 +24 -24
  52. data/distro/common/man/man1/knife-cookbook.1 +12 -12
  53. data/distro/common/man/man1/knife-data-bag.1 +34 -10
  54. data/distro/common/man/man1/knife-delete.1 +5 -5
  55. data/distro/common/man/man1/knife-deps.1 +5 -5
  56. data/distro/common/man/man1/knife-diff.1 +7 -7
  57. data/distro/common/man/man1/knife-download.1 +5 -5
  58. data/distro/common/man/man1/knife-edit.1 +5 -5
  59. data/distro/common/man/man1/knife-environment.1 +11 -11
  60. data/distro/common/man/man1/knife-exec.1 +11 -11
  61. data/distro/common/man/man1/knife-index-rebuild.1 +1 -1
  62. data/distro/common/man/man1/knife-list.1 +5 -5
  63. data/distro/common/man/man1/knife-node.1 +16 -16
  64. data/distro/common/man/man1/knife-raw.1 +6 -6
  65. data/distro/common/man/man1/knife-recipe-list.1 +1 -1
  66. data/distro/common/man/man1/knife-role.1 +7 -7
  67. data/distro/common/man/man1/knife-search.1 +6 -6
  68. data/distro/common/man/man1/knife-serve.1 +6 -6
  69. data/distro/common/man/man1/knife-show.1 +5 -5
  70. data/distro/common/man/man1/knife-ssh.1 +9 -9
  71. data/distro/common/man/man1/knife-ssl-check.1 +7 -7
  72. data/distro/common/man/man1/knife-ssl-fetch.1 +9 -9
  73. data/distro/common/man/man1/knife-status.1 +5 -5
  74. data/distro/common/man/man1/knife-tag.1 +8 -8
  75. data/distro/common/man/man1/knife-upload.1 +5 -5
  76. data/distro/common/man/man1/knife-user.1 +8 -8
  77. data/distro/common/man/man1/knife-xargs.1 +36 -10
  78. data/distro/common/man/man1/knife.1 +14 -14
  79. data/distro/common/man/man8/chef-client.8 +3 -10
  80. data/distro/common/man/man8/chef-solo.8 +1 -1
  81. data/ext/win32-eventlog/Rakefile +50 -0
  82. data/ext/win32-eventlog/chef-log.man +26 -0
  83. data/lib/chef/application.rb +313 -241
  84. data/lib/chef/application/apply.rb +10 -8
  85. data/lib/chef/application/client.rb +58 -33
  86. data/lib/chef/application/solo.rb +33 -12
  87. data/lib/chef/chef_fs/chef_fs_data_store.rb +1 -1
  88. data/lib/chef/chef_fs/command_line.rb +1 -1
  89. data/lib/chef/chef_fs/file_system/organization_invites_entry.rb +2 -1
  90. data/lib/chef/chef_fs/file_system/organization_members_entry.rb +2 -1
  91. data/lib/chef/chef_fs/file_system/rest_list_entry.rb +2 -1
  92. data/lib/chef/client.rb +18 -48
  93. data/lib/chef/config.rb +43 -11
  94. data/lib/chef/cookbook/cookbook_version_loader.rb +14 -7
  95. data/lib/chef/cookbook/metadata.rb +81 -38
  96. data/lib/chef/cookbook/syntax_check.rb +18 -52
  97. data/lib/chef/cookbook_loader.rb +1 -1
  98. data/lib/chef/cookbook_version.rb +58 -39
  99. data/lib/chef/data_bag.rb +2 -2
  100. data/lib/chef/deprecation/provider/file.rb +2 -1
  101. data/lib/chef/dsl/data_query.rb +2 -29
  102. data/lib/chef/dsl/recipe.rb +8 -22
  103. data/lib/chef/encrypted_data_bag_item/assertions.rb +1 -1
  104. data/lib/chef/encrypted_data_bag_item/check_encrypted.rb +56 -0
  105. data/lib/chef/encrypted_data_bag_item/encrypted_data_bag_item_assertions.rb +1 -1
  106. data/lib/chef/event_loggers/base.rb +62 -0
  107. data/lib/chef/event_loggers/windows_eventlog.rb +104 -0
  108. data/lib/chef/exceptions.rb +18 -1
  109. data/lib/chef/file_cache.rb +3 -2
  110. data/lib/chef/guard_interpreter/resource_guard_interpreter.rb +15 -6
  111. data/lib/chef/http.rb +20 -13
  112. data/lib/chef/http/ssl_policies.rb +2 -1
  113. data/lib/chef/json_compat.rb +9 -3
  114. data/lib/chef/knife.rb +2 -1
  115. data/lib/chef/knife/bootstrap.rb +12 -18
  116. data/lib/chef/knife/bootstrap/archlinux-gems.erb +2 -2
  117. data/lib/chef/knife/bootstrap/chef-aix.erb +2 -2
  118. data/lib/chef/knife/bootstrap/chef-full.erb +2 -2
  119. data/lib/chef/knife/cookbook_create.rb +1 -1
  120. data/lib/chef/knife/cookbook_site_share.rb +43 -8
  121. data/lib/chef/knife/core/bootstrap_context.rb +6 -11
  122. data/lib/chef/knife/core/object_loader.rb +5 -5
  123. data/lib/chef/knife/core/status_presenter.rb +156 -0
  124. data/lib/chef/knife/core/subcommand_loader.rb +6 -5
  125. data/lib/chef/knife/core/ui.rb +4 -4
  126. data/lib/chef/knife/data_bag_create.rb +7 -32
  127. data/lib/chef/knife/data_bag_edit.rb +24 -43
  128. data/lib/chef/knife/data_bag_from_file.rb +6 -31
  129. data/lib/chef/knife/data_bag_secret_options.rb +142 -0
  130. data/lib/chef/knife/data_bag_show.rb +19 -33
  131. data/lib/chef/knife/node_from_file.rb +9 -8
  132. data/lib/chef/knife/ssh.rb +0 -7
  133. data/lib/chef/knife/ssl_check.rb +70 -6
  134. data/lib/chef/knife/status.rb +11 -58
  135. data/lib/chef/mixin/command/unix.rb +2 -2
  136. data/lib/chef/mixin/convert_to_class_name.rb +54 -0
  137. data/lib/chef/mixin/descendants_tracker.rb +82 -0
  138. data/lib/chef/mixin/homebrew_user.rb +68 -0
  139. data/lib/chef/mixin/shell_out.rb +0 -4
  140. data/lib/chef/mixin/windows_architecture_helper.rb +16 -0
  141. data/lib/chef/mixin/windows_env_helper.rb +56 -0
  142. data/lib/chef/node.rb +2 -2
  143. data/lib/chef/node_map.rb +146 -0
  144. data/lib/chef/platform/provider_mapping.rb +11 -39
  145. data/lib/chef/platform/provider_priority_map.rb +80 -0
  146. data/lib/chef/platform/query_helpers.rb +5 -1
  147. data/lib/chef/platform/service_helpers.rb +113 -0
  148. data/lib/chef/provider.rb +24 -0
  149. data/lib/chef/provider/breakpoint.rb +2 -0
  150. data/lib/chef/provider/cookbook_file.rb +2 -0
  151. data/lib/chef/provider/cron.rb +1 -1
  152. data/lib/chef/provider/cron/unix.rb +13 -9
  153. data/lib/chef/provider/deploy.rb +3 -2
  154. data/lib/chef/provider/deploy/revision.rb +4 -2
  155. data/lib/chef/provider/deploy/timestamped.rb +2 -0
  156. data/lib/chef/provider/directory.rb +2 -0
  157. data/lib/chef/provider/dsc_script.rb +179 -0
  158. data/lib/chef/provider/env.rb +25 -10
  159. data/lib/chef/provider/env/windows.rb +9 -16
  160. data/lib/chef/provider/erl_call.rb +2 -0
  161. data/lib/chef/provider/execute.rb +5 -2
  162. data/lib/chef/provider/file.rb +2 -0
  163. data/lib/chef/provider/git.rb +51 -23
  164. data/lib/chef/provider/group/dscl.rb +2 -2
  165. data/lib/chef/provider/group/pw.rb +9 -13
  166. data/lib/chef/provider/http_request.rb +2 -0
  167. data/lib/chef/provider/link.rb +3 -0
  168. data/lib/chef/provider/log.rb +2 -0
  169. data/lib/chef/provider/lwrp_base.rb +11 -9
  170. data/lib/chef/provider/mount/mount.rb +1 -1
  171. data/lib/chef/provider/package/aix.rb +2 -0
  172. data/lib/chef/provider/package/apt.rb +2 -0
  173. data/lib/chef/provider/package/dpkg.rb +2 -0
  174. data/lib/chef/provider/package/easy_install.rb +2 -0
  175. data/lib/chef/provider/package/freebsd/pkg.rb +2 -1
  176. data/lib/chef/provider/package/freebsd/pkgng.rb +1 -1
  177. data/lib/chef/provider/package/freebsd/port.rb +1 -9
  178. data/lib/chef/provider/package/homebrew.rb +127 -0
  179. data/lib/chef/provider/package/ips.rb +2 -0
  180. data/lib/chef/provider/package/macports.rb +3 -0
  181. data/lib/chef/provider/package/pacman.rb +5 -4
  182. data/lib/chef/provider/package/paludis.rb +4 -2
  183. data/lib/chef/provider/package/portage.rb +4 -1
  184. data/lib/chef/provider/package/rpm.rb +2 -0
  185. data/lib/chef/provider/package/rubygems.rb +4 -0
  186. data/lib/chef/provider/package/smartos.rb +2 -0
  187. data/lib/chef/provider/package/solaris.rb +2 -0
  188. data/lib/chef/provider/package/windows.rb +5 -2
  189. data/lib/chef/provider/package/yum.rb +2 -0
  190. data/lib/chef/provider/powershell_script.rb +3 -1
  191. data/lib/chef/provider/remote_directory.rb +25 -10
  192. data/lib/chef/provider/route.rb +2 -0
  193. data/lib/chef/provider/ruby_block.rb +2 -0
  194. data/lib/chef/provider/script.rb +6 -0
  195. data/lib/chef/provider/service/aix.rb +128 -0
  196. data/lib/chef/provider/service/aixinit.rb +117 -0
  197. data/lib/chef/provider/service/arch.rb +6 -0
  198. data/lib/chef/provider/service/debian.rb +35 -29
  199. data/lib/chef/provider/service/freebsd.rb +7 -1
  200. data/lib/chef/provider/service/gentoo.rb +5 -1
  201. data/lib/chef/provider/service/init.rb +2 -0
  202. data/lib/chef/provider/service/insserv.rb +15 -8
  203. data/lib/chef/provider/service/invokercd.rb +6 -0
  204. data/lib/chef/provider/service/macosx.rb +4 -1
  205. data/lib/chef/provider/service/redhat.rb +9 -3
  206. data/lib/chef/provider/service/simple.rb +2 -0
  207. data/lib/chef/provider/service/solaris.rb +2 -0
  208. data/lib/chef/provider/service/systemd.rb +7 -0
  209. data/lib/chef/provider/service/upstart.rb +7 -0
  210. data/lib/chef/provider/service/windows.rb +5 -0
  211. data/lib/chef/provider/subversion.rb +2 -0
  212. data/lib/chef/provider/template.rb +1 -0
  213. data/lib/chef/provider/user/dscl.rb +3 -2
  214. data/lib/chef/provider/whyrun_safe_ruby_block.rb +2 -0
  215. data/lib/chef/provider_resolver.rb +103 -0
  216. data/lib/chef/providers.rb +6 -2
  217. data/lib/chef/recipe.rb +2 -0
  218. data/lib/chef/resource.rb +69 -78
  219. data/lib/chef/resource/apt_package.rb +3 -1
  220. data/lib/chef/resource/bash.rb +1 -0
  221. data/lib/chef/resource/bff_package.rb +0 -1
  222. data/lib/chef/resource/breakpoint.rb +1 -1
  223. data/lib/chef/resource/chef_gem.rb +1 -2
  224. data/lib/chef/resource/conditional.rb +26 -6
  225. data/lib/chef/resource/cookbook_file.rb +2 -3
  226. data/lib/chef/resource/csh.rb +1 -0
  227. data/lib/chef/resource/deploy.rb +0 -1
  228. data/lib/chef/resource/deploy_revision.rb +6 -1
  229. data/lib/chef/resource/directory.rb +1 -2
  230. data/lib/chef/resource/dpkg_package.rb +2 -1
  231. data/lib/chef/resource/dsc_script.rb +125 -0
  232. data/lib/chef/resource/easy_install_package.rb +2 -1
  233. data/lib/chef/resource/erl_call.rb +1 -0
  234. data/lib/chef/resource/execute.rb +26 -9
  235. data/lib/chef/resource/file.rb +1 -3
  236. data/lib/chef/resource/freebsd_package.rb +10 -23
  237. data/lib/chef/resource/gem_package.rb +2 -1
  238. data/lib/chef/resource/git.rb +2 -1
  239. data/lib/chef/resource/homebrew_package.rb +46 -0
  240. data/lib/chef/resource/http_request.rb +1 -0
  241. data/lib/chef/resource/ips_package.rb +3 -1
  242. data/lib/chef/resource/link.rb +1 -2
  243. data/lib/chef/resource/log.rb +4 -0
  244. data/lib/chef/resource/lwrp_base.rb +24 -15
  245. data/lib/chef/resource/macports_package.rb +3 -1
  246. data/lib/chef/resource/pacman_package.rb +2 -1
  247. data/lib/chef/resource/paludis_package.rb +3 -1
  248. data/lib/chef/resource/perl.rb +1 -0
  249. data/lib/chef/resource/powershell_script.rb +0 -2
  250. data/lib/chef/resource/python.rb +1 -1
  251. data/lib/chef/resource/remote_directory.rb +1 -2
  252. data/lib/chef/resource/remote_file.rb +1 -1
  253. data/lib/chef/resource/rpm_package.rb +2 -1
  254. data/lib/chef/resource/ruby.rb +1 -0
  255. data/lib/chef/resource/ruby_block.rb +3 -0
  256. data/lib/chef/resource/script.rb +2 -25
  257. data/lib/chef/resource/service.rb +0 -4
  258. data/lib/chef/resource/smartos_package.rb +3 -4
  259. data/lib/chef/resource/solaris_package.rb +7 -1
  260. data/lib/chef/resource/subversion.rb +0 -1
  261. data/lib/chef/resource/template.rb +2 -3
  262. data/lib/chef/resource/timestamped_deploy.rb +1 -2
  263. data/lib/chef/resource/whyrun_safe_ruby_block.rb +0 -1
  264. data/lib/chef/resource/windows_package.rb +3 -4
  265. data/lib/chef/resource/windows_script.rb +3 -0
  266. data/lib/chef/resource/windows_service.rb +2 -2
  267. data/lib/chef/resource/yum_package.rb +3 -1
  268. data/lib/chef/resource_collection.rb +50 -227
  269. data/lib/chef/resource_collection/resource_collection_serialization.rb +59 -0
  270. data/lib/chef/resource_collection/resource_list.rb +89 -0
  271. data/lib/chef/resource_collection/resource_set.rb +170 -0
  272. data/lib/chef/resources.rb +2 -0
  273. data/lib/chef/role.rb +1 -1
  274. data/lib/chef/run_context.rb +5 -1
  275. data/lib/chef/shell/ext.rb +1 -1
  276. data/lib/chef/util/backup.rb +3 -2
  277. data/lib/chef/util/dsc/configuration_generator.rb +115 -0
  278. data/lib/chef/util/dsc/lcm_output_parser.rb +133 -0
  279. data/lib/chef/util/dsc/local_configuration_manager.rb +141 -0
  280. data/lib/chef/util/dsc/resource_info.rb +26 -0
  281. data/lib/chef/util/path_helper.rb +12 -0
  282. data/lib/chef/util/powershell/cmdlet.rb +136 -0
  283. data/lib/chef/util/powershell/cmdlet_result.rb +46 -0
  284. data/lib/chef/version.rb +1 -1
  285. data/lib/chef/win32/api/system.rb +9 -0
  286. data/lib/chef/win32/version.rb +2 -0
  287. data/spec/.DS_Store +0 -0
  288. data/spec/data/.DS_Store +0 -0
  289. data/spec/data/bootstrap/test-hints.erb +1 -1
  290. data/spec/data/bootstrap/test.erb +1 -1
  291. data/spec/data/cb_version_cookbooks/cookbook2/files/test.txt +0 -0
  292. data/spec/data/cb_version_cookbooks/cookbook2/templates/test.erb +0 -0
  293. data/spec/data/cookbooks/ignorken/files/default/not_me.rb +2 -0
  294. data/spec/data/cookbooks/ignorken/templates/ubuntu-12.10/not_me.rb +2 -0
  295. data/spec/data/cookbooks/openldap/libraries/openldap.rb +4 -0
  296. data/spec/data/cookbooks/openldap/libraries/openldap/version.rb +3 -0
  297. data/spec/data/lwrp/.DS_Store +0 -0
  298. data/spec/data/lwrp/providers/.DS_Store +0 -0
  299. data/spec/data/lwrp/providers/buck_passer.rb +9 -2
  300. data/spec/data/lwrp/resources/.DS_Store +0 -0
  301. data/spec/data/lwrp/resources/foo.rb +3 -2
  302. data/spec/data/lwrp_override/.DS_Store +0 -0
  303. data/spec/data/lwrp_override/providers/.DS_Store +0 -0
  304. data/spec/data/lwrp_override/providers/buck_passer.rb +5 -10
  305. data/spec/data/lwrp_override/resources/.DS_Store +0 -0
  306. data/spec/data/lwrp_override/resources/foo.rb +4 -3
  307. data/spec/functional/assets/chefinittest +34 -0
  308. data/spec/functional/assets/testchefsubsys +11 -0
  309. data/spec/functional/dsl/reboot_pending_spec.rb +19 -16
  310. data/spec/functional/event_loggers/windows_eventlog_spec.rb +82 -0
  311. data/spec/functional/knife/cookbook_delete_spec.rb +3 -3
  312. data/spec/functional/knife/exec_spec.rb +1 -1
  313. data/spec/functional/resource/aix_service_spec.rb +136 -0
  314. data/spec/functional/resource/aixinit_service_spec.rb +211 -0
  315. data/spec/functional/resource/base.rb +1 -0
  316. data/spec/functional/resource/batch_spec.rb +4 -11
  317. data/spec/functional/resource/cron_spec.rb +7 -1
  318. data/spec/functional/resource/dsc_script_spec.rb +382 -0
  319. data/spec/functional/resource/env_spec.rb +54 -0
  320. data/spec/functional/resource/execute_spec.rb +113 -0
  321. data/spec/functional/resource/file_spec.rb +2 -0
  322. data/spec/functional/resource/group_spec.rb +7 -4
  323. data/spec/functional/resource/powershell_spec.rb +198 -185
  324. data/spec/functional/resource/rpm_spec.rb +5 -4
  325. data/spec/functional/resource/user/dscl_spec.rb +2 -1
  326. data/spec/functional/util/path_helper_spec.rb +37 -0
  327. data/spec/functional/util/powershell/cmdlet_spec.rb +114 -0
  328. data/spec/integration/client/client_spec.rb +1 -1
  329. data/spec/integration/client/ipv6_spec.rb +1 -1
  330. data/spec/integration/knife/chef_fs_data_store_spec.rb +1 -1
  331. data/spec/integration/knife/chef_repo_path_spec.rb +1 -1
  332. data/spec/integration/knife/chef_repository_file_system_spec.rb +1 -1
  333. data/spec/integration/knife/chefignore_spec.rb +1 -1
  334. data/spec/integration/knife/common_options_spec.rb +1 -1
  335. data/spec/integration/knife/cookbook_api_ipv6_spec.rb +2 -2
  336. data/spec/integration/knife/delete_spec.rb +1 -1
  337. data/spec/integration/knife/deps_spec.rb +1 -1
  338. data/spec/integration/knife/diff_spec.rb +1 -1
  339. data/spec/integration/knife/download_spec.rb +1 -1
  340. data/spec/integration/knife/list_spec.rb +1 -1
  341. data/spec/integration/knife/raw_spec.rb +1 -1
  342. data/spec/integration/knife/redirection_spec.rb +1 -1
  343. data/spec/integration/knife/serve_spec.rb +1 -1
  344. data/spec/integration/knife/show_spec.rb +1 -1
  345. data/spec/integration/knife/upload_spec.rb +4 -3
  346. data/spec/integration/recipes/lwrp_inline_resources_spec.rb +1 -1
  347. data/spec/spec_helper.rb +15 -0
  348. data/spec/support/chef_helpers.rb +1 -0
  349. data/spec/support/lib/chef/provider/snakeoil.rb +1 -0
  350. data/spec/support/lib/chef/resource/zen_follower.rb +1 -7
  351. data/spec/support/platform_helpers.rb +28 -0
  352. data/spec/support/shared/functional/file_resource.rb +6 -0
  353. data/spec/support/shared/functional/windows_script.rb +118 -0
  354. data/spec/support/shared/integration/integration_helper.rb +5 -2
  355. data/spec/support/shared/matchers/exit_with_code.rb +28 -0
  356. data/spec/support/shared/matchers/match_environment_variable.rb +17 -0
  357. data/spec/support/shared/shared_examples.rb +14 -0
  358. data/spec/support/shared/unit/execute_resource.rb +0 -7
  359. data/spec/support/shared/unit/resource/static_provider_resolution.rb +71 -0
  360. data/spec/support/shared/unit/script_resource.rb +1 -1
  361. data/spec/support/shared/unit/windows_script_resource.rb +35 -2
  362. data/spec/tiny_server.rb +1 -2
  363. data/spec/unit/api_client_spec.rb +5 -1
  364. data/spec/unit/application/{apply.rb → apply_spec.rb} +13 -5
  365. data/spec/unit/application/client_spec.rb +106 -13
  366. data/spec/unit/application/solo_spec.rb +25 -1
  367. data/spec/unit/client_spec.rb +1 -26
  368. data/spec/unit/config_fetcher_spec.rb +2 -1
  369. data/spec/unit/config_spec.rb +91 -2
  370. data/spec/unit/cookbook/cookbook_version_loader_spec.rb +8 -0
  371. data/spec/unit/cookbook/metadata_spec.rb +43 -6
  372. data/spec/unit/cookbook/syntax_check_spec.rb +8 -2
  373. data/spec/unit/cookbook_loader_spec.rb +4 -2
  374. data/spec/unit/cookbook_version_spec.rb +83 -2
  375. data/spec/unit/data_bag_item_spec.rb +5 -1
  376. data/spec/unit/data_bag_spec.rb +6 -1
  377. data/spec/unit/dsl/data_query_spec.rb +8 -110
  378. data/spec/unit/encrypted_data_bag_item/check_encrypted_spec.rb +95 -0
  379. data/spec/unit/encrypted_data_bag_item_spec.rb +16 -23
  380. data/spec/unit/environment_spec.rb +6 -2
  381. data/spec/unit/exceptions_spec.rb +6 -0
  382. data/spec/unit/guard_interpreter/resource_guard_interpreter_spec.rb +16 -15
  383. data/spec/unit/json_compat_spec.rb +12 -2
  384. data/spec/unit/knife/bootstrap_spec.rb +16 -63
  385. data/spec/unit/knife/cookbook_site_share_spec.rb +59 -6
  386. data/spec/unit/knife/core/bootstrap_context_spec.rb +8 -37
  387. data/spec/unit/knife/core/subcommand_loader_spec.rb +1 -1
  388. data/spec/unit/knife/core/ui_spec.rb +28 -0
  389. data/spec/unit/knife/data_bag_create_spec.rb +63 -71
  390. data/spec/unit/knife/data_bag_edit_spec.rb +83 -49
  391. data/spec/unit/knife/data_bag_from_file_spec.rb +104 -126
  392. data/spec/unit/knife/data_bag_secret_options_spec.rb +165 -0
  393. data/spec/unit/knife/data_bag_show_spec.rb +74 -72
  394. data/spec/unit/knife/environment_from_file_spec.rb +3 -2
  395. data/spec/unit/knife/ssl_check_spec.rb +46 -1
  396. data/spec/unit/knife/status_spec.rb +1 -2
  397. data/spec/unit/knife_spec.rb +18 -1
  398. data/spec/unit/lwrp_spec.rb +29 -8
  399. data/spec/unit/mixin/homebrew_user_spec.rb +100 -0
  400. data/spec/unit/node_map_spec.rb +155 -0
  401. data/spec/unit/node_spec.rb +11 -0
  402. data/spec/unit/platform/query_helpers_spec.rb +23 -0
  403. data/spec/unit/platform_spec.rb +23 -0
  404. data/spec/unit/provider/breakpoint_spec.rb +9 -9
  405. data/spec/unit/provider/cookbook_file/content_spec.rb +3 -3
  406. data/spec/unit/provider/cookbook_file_spec.rb +1 -1
  407. data/spec/unit/provider/cron/unix_spec.rb +78 -60
  408. data/spec/unit/provider/cron_spec.rb +175 -175
  409. data/spec/unit/provider/deploy/revision_spec.rb +22 -21
  410. data/spec/unit/provider/deploy/timestamped_spec.rb +3 -3
  411. data/spec/unit/provider/deploy_spec.rb +231 -230
  412. data/spec/unit/provider/directory_spec.rb +55 -55
  413. data/spec/unit/provider/dsc_script_spec.rb +174 -0
  414. data/spec/unit/provider/env/windows_spec.rb +70 -34
  415. data/spec/unit/provider/env_spec.rb +95 -49
  416. data/spec/unit/provider/erl_call_spec.rb +9 -9
  417. data/spec/unit/provider/execute_spec.rb +43 -27
  418. data/spec/unit/provider/file/content_spec.rb +9 -9
  419. data/spec/unit/provider/file_spec.rb +1 -1
  420. data/spec/unit/provider/git_spec.rb +221 -159
  421. data/spec/unit/provider/group/dscl_spec.rb +64 -63
  422. data/spec/unit/provider/group/gpasswd_spec.rb +14 -14
  423. data/spec/unit/provider/group/groupadd_spec.rb +33 -33
  424. data/spec/unit/provider/group/groupmod_spec.rb +23 -23
  425. data/spec/unit/provider/group/pw_spec.rb +21 -21
  426. data/spec/unit/provider/group/usermod_spec.rb +20 -20
  427. data/spec/unit/provider/group/windows_spec.rb +15 -15
  428. data/spec/unit/provider/group_spec.rb +76 -76
  429. data/spec/unit/provider/http_request_spec.rb +30 -30
  430. data/spec/unit/provider/ifconfig/aix_spec.rb +20 -20
  431. data/spec/unit/provider/ifconfig/debian_spec.rb +25 -9
  432. data/spec/unit/provider/ifconfig/redhat_spec.rb +13 -13
  433. data/spec/unit/provider/ifconfig_spec.rb +43 -43
  434. data/spec/unit/provider/link_spec.rb +60 -60
  435. data/spec/unit/provider/log_spec.rb +0 -4
  436. data/spec/unit/provider/mdadm_spec.rb +23 -23
  437. data/spec/unit/provider/mount/aix_spec.rb +17 -17
  438. data/spec/unit/provider/mount/mount_spec.rb +115 -119
  439. data/spec/unit/provider/mount/solaris_spec.rb +72 -72
  440. data/spec/unit/provider/mount/windows_spec.rb +24 -24
  441. data/spec/unit/provider/ohai_spec.rb +11 -11
  442. data/spec/unit/provider/package/aix_spec.rb +34 -34
  443. data/spec/unit/provider/package/apt_spec.rb +36 -36
  444. data/spec/unit/provider/package/dpkg_spec.rb +27 -27
  445. data/spec/unit/provider/package/easy_install_spec.rb +16 -16
  446. data/spec/unit/provider/package/freebsd/pkg_spec.rb +53 -53
  447. data/spec/unit/provider/package/freebsd/pkgng_spec.rb +24 -24
  448. data/spec/unit/provider/package/freebsd/port_spec.rb +45 -35
  449. data/spec/unit/provider/package/homebrew_spec.rb +266 -0
  450. data/spec/unit/provider/package/ips_spec.rb +34 -34
  451. data/spec/unit/provider/package/macports_spec.rb +49 -49
  452. data/spec/unit/provider/package/pacman_spec.rb +35 -39
  453. data/spec/unit/provider/package/paludis_spec.rb +20 -20
  454. data/spec/unit/provider/package/portage_spec.rb +38 -38
  455. data/spec/unit/provider/package/rpm_spec.rb +29 -29
  456. data/spec/unit/provider/package/rubygems_spec.rb +284 -270
  457. data/spec/unit/provider/package/smartos_spec.rb +15 -15
  458. data/spec/unit/provider/package/solaris_spec.rb +35 -35
  459. data/spec/unit/provider/package/windows/msi_spec.rb +3 -3
  460. data/spec/unit/provider/package/windows_spec.rb +6 -6
  461. data/spec/unit/provider/package/yum_spec.rb +416 -416
  462. data/spec/unit/provider/package/zypper_spec.rb +47 -47
  463. data/spec/unit/provider/package_spec.rb +107 -107
  464. data/spec/unit/provider/powershell_spec.rb +1 -1
  465. data/spec/unit/provider/registry_key_spec.rb +61 -61
  466. data/spec/unit/provider/remote_directory_spec.rb +36 -36
  467. data/spec/unit/provider/remote_file/cache_control_data_spec.rb +24 -24
  468. data/spec/unit/provider/remote_file/content_spec.rb +45 -45
  469. data/spec/unit/provider/remote_file/fetcher_spec.rb +9 -9
  470. data/spec/unit/provider/remote_file/ftp_spec.rb +32 -32
  471. data/spec/unit/provider/remote_file/http_spec.rb +44 -44
  472. data/spec/unit/provider/remote_file/local_file_spec.rb +9 -9
  473. data/spec/unit/provider/remote_file_spec.rb +3 -3
  474. data/spec/unit/provider/route_spec.rb +63 -63
  475. data/spec/unit/provider/ruby_block_spec.rb +4 -4
  476. data/spec/unit/provider/script_spec.rb +12 -12
  477. data/spec/unit/provider/service/aix_service_spec.rb +181 -0
  478. data/spec/unit/provider/service/aixinit_service_spec.rb +269 -0
  479. data/spec/unit/provider/service/arch_service_spec.rb +48 -48
  480. data/spec/unit/provider/service/debian_service_spec.rb +40 -40
  481. data/spec/unit/provider/service/gentoo_service_spec.rb +28 -28
  482. data/spec/unit/provider/service/init_service_spec.rb +39 -39
  483. data/spec/unit/provider/service/insserv_service_spec.rb +8 -8
  484. data/spec/unit/provider/service/invokercd_service_spec.rb +35 -35
  485. data/spec/unit/provider/service/macosx_spec.rb +49 -49
  486. data/spec/unit/provider/service/redhat_spec.rb +27 -27
  487. data/spec/unit/provider/service/simple_service_spec.rb +28 -28
  488. data/spec/unit/provider/service/solaris_smf_service_spec.rb +43 -46
  489. data/spec/unit/provider/service/systemd_service_spec.rb +63 -63
  490. data/spec/unit/provider/service/upstart_service_spec.rb +78 -78
  491. data/spec/unit/provider/service/windows_spec.rb +92 -92
  492. data/spec/unit/provider/service_spec.rb +40 -40
  493. data/spec/unit/provider/subversion_spec.rb +80 -80
  494. data/spec/unit/provider/template/content_spec.rb +9 -9
  495. data/spec/unit/provider/template_spec.rb +6 -6
  496. data/spec/unit/provider/user/dscl_spec.rb +170 -167
  497. data/spec/unit/provider/user/pw_spec.rb +48 -48
  498. data/spec/unit/provider/user/solaris_spec.rb +8 -8
  499. data/spec/unit/provider/user/useradd_spec.rb +1 -1
  500. data/spec/unit/provider/user/windows_spec.rb +26 -26
  501. data/spec/unit/provider/user_spec.rb +72 -72
  502. data/spec/unit/provider/whyrun_safe_ruby_block_spec.rb +4 -4
  503. data/spec/unit/provider_resolver_spec.rb +387 -0
  504. data/spec/unit/recipe_spec.rb +33 -12
  505. data/spec/unit/resource/apt_package_spec.rb +10 -13
  506. data/spec/unit/resource/bash_spec.rb +4 -4
  507. data/spec/unit/resource/batch_spec.rb +1 -1
  508. data/spec/unit/resource/breakpoint_spec.rb +11 -7
  509. data/spec/unit/resource/chef_gem_spec.rb +8 -15
  510. data/spec/unit/resource/conditional_action_not_nothing_spec.rb +2 -2
  511. data/spec/unit/resource/conditional_spec.rb +35 -16
  512. data/spec/unit/resource/cookbook_file_spec.rb +13 -13
  513. data/spec/unit/resource/cron_spec.rb +37 -37
  514. data/spec/unit/resource/csh_spec.rb +4 -4
  515. data/spec/unit/resource/deploy_revision_spec.rb +13 -18
  516. data/spec/unit/resource/deploy_spec.rb +60 -55
  517. data/spec/unit/resource/directory_spec.rb +18 -18
  518. data/spec/unit/resource/dpkg_package_spec.rb +8 -14
  519. data/spec/unit/resource/dsc_script_spec.rb +98 -0
  520. data/spec/unit/resource/easy_install_package_spec.rb +9 -18
  521. data/spec/unit/resource/env_spec.rb +12 -12
  522. data/spec/unit/resource/erl_call_spec.rb +11 -11
  523. data/spec/unit/resource/execute_spec.rb +5 -0
  524. data/spec/unit/resource/file_spec.rb +29 -29
  525. data/spec/unit/resource/freebsd_package_spec.rb +11 -12
  526. data/spec/unit/resource/gem_package_spec.rb +8 -15
  527. data/spec/unit/resource/git_spec.rb +12 -8
  528. data/spec/unit/resource/group_spec.rb +27 -27
  529. data/spec/unit/resource/homebrew_package_spec.rb +50 -0
  530. data/spec/unit/resource/http_request_spec.rb +6 -6
  531. data/spec/unit/resource/ifconfig_spec.rb +8 -8
  532. data/spec/unit/resource/ips_package_spec.rb +10 -13
  533. data/spec/unit/resource/link_spec.rb +25 -25
  534. data/spec/unit/resource/log_spec.rb +9 -9
  535. data/spec/unit/resource/macports_package_spec.rb +8 -13
  536. data/spec/unit/resource/mdadm_spec.rb +18 -18
  537. data/spec/unit/resource/mount_spec.rb +45 -45
  538. data/spec/unit/resource/ohai_spec.rb +7 -7
  539. data/spec/unit/resource/package_spec.rb +12 -12
  540. data/spec/unit/resource/pacman_package_spec.rb +8 -14
  541. data/spec/unit/resource/perl_spec.rb +4 -4
  542. data/spec/unit/resource/portage_package_spec.rb +3 -3
  543. data/spec/unit/resource/powershell_spec.rb +7 -7
  544. data/spec/unit/resource/python_spec.rb +4 -4
  545. data/spec/unit/resource/registry_key_spec.rb +32 -32
  546. data/spec/unit/resource/remote_directory_spec.rb +17 -17
  547. data/spec/unit/resource/remote_file_spec.rb +41 -41
  548. data/spec/unit/resource/route_spec.rb +19 -19
  549. data/spec/unit/resource/rpm_package_spec.rb +9 -13
  550. data/spec/unit/resource/ruby_block_spec.rb +8 -8
  551. data/spec/unit/resource/ruby_spec.rb +4 -4
  552. data/spec/unit/resource/scm_spec.rb +40 -40
  553. data/spec/unit/resource/script_spec.rb +2 -2
  554. data/spec/unit/resource/service_spec.rb +37 -47
  555. data/spec/unit/resource/smartos_package_spec.rb +10 -15
  556. data/spec/unit/resource/solaris_package_spec.rb +13 -28
  557. data/spec/unit/resource/subversion_spec.rb +16 -12
  558. data/spec/unit/resource/template_spec.rb +35 -35
  559. data/spec/unit/resource/timestamped_deploy_spec.rb +30 -4
  560. data/spec/unit/resource/user_spec.rb +23 -23
  561. data/spec/unit/resource/windows_package_spec.rb +17 -10
  562. data/spec/unit/resource/windows_service_spec.rb +9 -6
  563. data/spec/unit/resource/yum_package_spec.rb +16 -21
  564. data/spec/unit/resource_collection/resource_list_spec.rb +137 -0
  565. data/spec/unit/resource_collection/resource_set_spec.rb +199 -0
  566. data/spec/unit/resource_collection_spec.rb +73 -92
  567. data/spec/unit/resource_definition_spec.rb +38 -40
  568. data/spec/unit/resource_reporter_spec.rb +3 -3
  569. data/spec/unit/resource_spec.rb +68 -33
  570. data/spec/unit/rest_spec.rb +83 -76
  571. data/spec/unit/role_spec.rb +5 -0
  572. data/spec/unit/run_list_spec.rb +5 -1
  573. data/spec/unit/runner_spec.rb +245 -238
  574. data/spec/unit/shell/shell_ext_spec.rb +1 -1
  575. data/spec/unit/user_spec.rb +5 -1
  576. data/spec/unit/util/dsc/configuration_generator_spec.rb +171 -0
  577. data/spec/unit/util/dsc/lcm_output_parser_spec.rb +169 -0
  578. data/spec/unit/util/dsc/local_configuration_manager_spec.rb +139 -0
  579. data/spec/unit/util/path_helper_spec.rb +23 -1
  580. data/spec/unit/util/powershell/cmdlet_spec.rb +106 -0
  581. data/spec/unit/workstation_config_loader_spec.rb +1 -1
  582. metadata +303 -196
  583. checksums.yaml +0 -7
  584. data/distro/README +0 -2
  585. data/distro/arch/etc/conf.d/chef-client.conf +0 -5
  586. data/distro/arch/etc/conf.d/chef-expander.conf +0 -8
  587. data/distro/arch/etc/conf.d/chef-server-webui.conf +0 -10
  588. data/distro/arch/etc/conf.d/chef-server.conf +0 -10
  589. data/distro/arch/etc/conf.d/chef-solr.conf +0 -8
  590. data/distro/arch/etc/rc.d/chef-client +0 -90
  591. data/distro/arch/etc/rc.d/chef-expander +0 -78
  592. data/distro/arch/etc/rc.d/chef-server +0 -78
  593. data/distro/arch/etc/rc.d/chef-server-webui +0 -78
  594. data/distro/arch/etc/rc.d/chef-solr +0 -78
  595. data/distro/debian/etc/default/chef-client +0 -4
  596. data/distro/debian/etc/default/chef-expander +0 -8
  597. data/distro/debian/etc/default/chef-server +0 -9
  598. data/distro/debian/etc/default/chef-server-webui +0 -9
  599. data/distro/debian/etc/default/chef-solr +0 -8
  600. data/distro/debian/etc/init.d/chef-client +0 -212
  601. data/distro/debian/etc/init.d/chef-expander +0 -176
  602. data/distro/debian/etc/init.d/chef-server +0 -122
  603. data/distro/debian/etc/init.d/chef-server-webui +0 -123
  604. data/distro/debian/etc/init.d/chef-solr +0 -176
  605. data/distro/debian/etc/init/chef-client.conf +0 -17
  606. data/distro/debian/etc/init/chef-expander.conf +0 -17
  607. data/distro/debian/etc/init/chef-server-webui.conf +0 -17
  608. data/distro/debian/etc/init/chef-server.conf +0 -17
  609. data/distro/debian/etc/init/chef-solr.conf +0 -17
  610. data/distro/redhat/etc/init.d/chef-client +0 -121
  611. data/distro/redhat/etc/init.d/chef-expander +0 -104
  612. data/distro/redhat/etc/init.d/chef-server +0 -112
  613. data/distro/redhat/etc/init.d/chef-server-webui +0 -112
  614. data/distro/redhat/etc/init.d/chef-solr +0 -104
  615. data/distro/redhat/etc/logrotate.d/chef-client +0 -8
  616. data/distro/redhat/etc/logrotate.d/chef-expander +0 -8
  617. data/distro/redhat/etc/logrotate.d/chef-server +0 -8
  618. data/distro/redhat/etc/logrotate.d/chef-server-webui +0 -8
  619. data/distro/redhat/etc/logrotate.d/chef-solr +0 -8
  620. data/distro/redhat/etc/sysconfig/chef-client +0 -15
  621. data/distro/redhat/etc/sysconfig/chef-expander +0 -7
  622. data/distro/redhat/etc/sysconfig/chef-server +0 -14
  623. data/distro/redhat/etc/sysconfig/chef-server-webui +0 -14
  624. data/distro/redhat/etc/sysconfig/chef-solr +0 -8
  625. data/distro/windows/service_manager.rb +0 -20
  626. data/lib/chef/resource_platform_map.rb +0 -151
  627. data/spec/support/shared/matchers.rb +0 -17
  628. data/spec/unit/resource_platform_map_spec.rb +0 -164
@@ -27,6 +27,10 @@ class Chef
27
27
 
28
28
  attr_reader :enabled_state_found
29
29
 
30
+ provides :service, os: [ "freebsd", "netbsd" ]
31
+
32
+ include Chef::Mixin::ShellOut
33
+
30
34
  def initialize(new_resource, run_context)
31
35
  super
32
36
  @enabled_state_found = false
@@ -46,6 +50,7 @@ class Chef
46
50
 
47
51
  Chef::Log.debug("#{current_resource} found at #{init_command}")
48
52
 
53
+ @status_load_success = true
49
54
  determine_current_status! # see Chef::Provider::Service::Simple
50
55
 
51
56
  determine_enabled_status!
@@ -58,6 +63,7 @@ class Chef
58
63
  requirements.assert(:start, :enable, :reload, :restart) do |a|
59
64
  a.assertion { init_command }
60
65
  a.failure_message Chef::Exceptions::Service, "#{new_resource}: unable to locate the rc.d script"
66
+ a.whyrun("Assuming rc.d script will be installed by a previous action.")
61
67
  end
62
68
 
63
69
  requirements.assert(:all_actions) do |a|
@@ -68,7 +74,7 @@ class Chef
68
74
  end
69
75
 
70
76
  requirements.assert(:start, :enable, :reload, :restart) do |a|
71
- a.assertion { init_command && service_enable_variable_name != nil }
77
+ a.assertion { service_enable_variable_name != nil }
72
78
  a.failure_message Chef::Exceptions::Service, "Could not find the service name in #{init_command} and rcvar"
73
79
  # No recovery in whyrun mode - the init file is present but not correct.
74
80
  end
@@ -19,8 +19,12 @@
19
19
 
20
20
  require 'chef/provider/service/init'
21
21
  require 'chef/mixin/command'
22
+ require 'chef/util/path_helper'
22
23
 
23
24
  class Chef::Provider::Service::Gentoo < Chef::Provider::Service::Init
25
+
26
+ provides :service, platform_family: "gentoo"
27
+
24
28
  def load_current_resource
25
29
 
26
30
  @new_resource.supports[:status] = true
@@ -29,7 +33,7 @@ class Chef::Provider::Service::Gentoo < Chef::Provider::Service::Init
29
33
  super
30
34
 
31
35
  @current_resource.enabled(
32
- Dir.glob("/etc/runlevels/**/#{@current_resource.service_name}").any? do |file|
36
+ Dir.glob("/etc/runlevels/**/#{Chef::Util::PathHelper.escape_glob(@current_resource.service_name)}").any? do |file|
33
37
  @found_script = true
34
38
  exists = ::File.exists? file
35
39
  readable = ::File.readable? file
@@ -26,6 +26,8 @@ class Chef
26
26
 
27
27
  attr_accessor :init_command
28
28
 
29
+ provides :service, os: "!windows"
30
+
29
31
  def initialize(new_resource, run_context)
30
32
  super
31
33
  @init_command = "/etc/init.d/#{@new_resource.service_name}"
@@ -17,32 +17,39 @@
17
17
  #
18
18
 
19
19
  require 'chef/provider/service/init'
20
+ require 'chef/util/path_helper'
20
21
 
21
22
  class Chef
22
23
  class Provider
23
24
  class Service
24
25
  class Insserv < Chef::Provider::Service::Init
25
26
 
27
+ provides :service, os: "linux"
28
+
29
+ def self.supports?(resource, action)
30
+ Chef::Platform::ServiceHelpers.service_resource_providers.include?(:insserv)
31
+ end
32
+
26
33
  def load_current_resource
27
34
  super
28
35
 
29
- # Look for a /etc/rc.*/SnnSERVICE link to signifiy that the service would be started in a runlevel
30
- if Dir.glob("/etc/rc**/S*#{@current_resource.service_name}").empty?
31
- @current_resource.enabled false
36
+ # Look for a /etc/rc.*/SnnSERVICE link to signify that the service would be started in a runlevel
37
+ if Dir.glob("/etc/rc**/S*#{Chef::Util::PathHelper.escape_glob(current_resource.service_name)}").empty?
38
+ current_resource.enabled false
32
39
  else
33
- @current_resource.enabled true
40
+ current_resource.enabled true
34
41
  end
35
42
 
36
- @current_resource
43
+ current_resource
37
44
  end
38
45
 
39
46
  def enable_service()
40
- shell_out!("/sbin/insserv -r -f #{@new_resource.service_name}")
41
- shell_out!("/sbin/insserv -d -f #{@new_resource.service_name}")
47
+ shell_out!("/sbin/insserv -r -f #{new_resource.service_name}")
48
+ shell_out!("/sbin/insserv -d -f #{new_resource.service_name}")
42
49
  end
43
50
 
44
51
  def disable_service()
45
- shell_out!("/sbin/insserv -r -f #{@new_resource.service_name}")
52
+ shell_out!("/sbin/insserv -r -f #{new_resource.service_name}")
46
53
  end
47
54
  end
48
55
  end
@@ -23,6 +23,12 @@ class Chef
23
23
  class Service
24
24
  class Invokercd < Chef::Provider::Service::Init
25
25
 
26
+ provides :service, platform_family: "debian"
27
+
28
+ def self.supports?(resource, action)
29
+ Chef::Platform::ServiceHelpers.service_resource_providers.include?(:invokerc)
30
+ end
31
+
26
32
  def initialize(new_resource, run_context)
27
33
  super
28
34
  @init_command = "/usr/sbin/invoke-rc.d #{@new_resource.service_name}"
@@ -19,12 +19,15 @@
19
19
  require 'rexml/document'
20
20
  require 'chef/resource/service'
21
21
  require 'chef/provider/service/simple'
22
+ require 'chef/util/path_helper'
22
23
 
23
24
  class Chef
24
25
  class Provider
25
26
  class Service
26
27
  class Macosx < Chef::Provider::Service::Simple
27
28
 
29
+ provides :service, os: "darwin"
30
+
28
31
  def self.gather_plist_dirs
29
32
  locations = %w{/Library/LaunchAgents
30
33
  /Library/LaunchDaemons
@@ -194,7 +197,7 @@ class Chef
194
197
  plists = PLIST_DIRS.inject([]) do |results, dir|
195
198
  edir = ::File.expand_path(dir)
196
199
  entries = Dir.glob(
197
- "#{edir}/*#{@current_resource.service_name}*.plist"
200
+ "#{edir}/*#{Chef::Util::PathHelper.escape_glob(@current_resource.service_name)}*.plist"
198
201
  )
199
202
  entries.any? ? results << entries : results
200
203
  end
@@ -26,11 +26,17 @@ class Chef
26
26
  CHKCONFIG_ON = /\d:on/
27
27
  CHKCONFIG_MISSING = /No such/
28
28
 
29
+ provides :service, platform_family: [ "rhel", "fedora", "suse" ]
30
+
31
+ def self.supports?(resource, action)
32
+ Chef::Platform::ServiceHelpers.service_resource_providers.include?(:redhat)
33
+ end
34
+
29
35
  def initialize(new_resource, run_context)
30
36
  super
31
- @init_command = "/sbin/service #{@new_resource.service_name}"
32
- @new_resource.supports[:status] = true
33
- @service_missing = false
37
+ @init_command = "/sbin/service #{@new_resource.service_name}"
38
+ @new_resource.supports[:status] = true
39
+ @service_missing = false
34
40
  end
35
41
 
36
42
  def define_resource_requirements
@@ -25,6 +25,8 @@ class Chef
25
25
  class Service
26
26
  class Simple < Chef::Provider::Service
27
27
 
28
+ # this must be subclassed to be useful so does not directly implement :service
29
+
28
30
  attr_reader :status_load_success
29
31
 
30
32
  def load_current_resource
@@ -26,6 +26,8 @@ class Chef
26
26
  class Solaris < Chef::Provider::Service
27
27
  attr_reader :maintenance
28
28
 
29
+ provides :service, os: "solaris2"
30
+
29
31
  def initialize(new_resource, run_context=nil)
30
32
  super
31
33
  @init_command = "/usr/sbin/svcadm"
@@ -20,6 +20,13 @@ require 'chef/resource/service'
20
20
  require 'chef/provider/service/simple'
21
21
 
22
22
  class Chef::Provider::Service::Systemd < Chef::Provider::Service::Simple
23
+
24
+ provides :service, os: "linux"
25
+
26
+ def self.supports?(resource, action)
27
+ Chef::Platform::ServiceHelpers.service_resource_providers.include?(:systemd)
28
+ end
29
+
23
30
  def load_current_resource
24
31
  @current_resource = Chef::Resource::Service.new(@new_resource.name)
25
32
  @current_resource.service_name(@new_resource.service_name)
@@ -27,6 +27,13 @@ class Chef
27
27
  class Upstart < Chef::Provider::Service::Simple
28
28
  UPSTART_STATE_FORMAT = /\w+ \(?(\w+)\)?[\/ ](\w+)/
29
29
 
30
+ provides :service, os: "linux"
31
+
32
+ def self.supports?(resource, action)
33
+ Chef::Platform::ServiceHelpers.service_resource_providers.include?(:upstart) &&
34
+ Chef::Platform::ServiceHelpers.config_for_service(resource.service_name).include?(:upstart)
35
+ end
36
+
30
37
  # Upstart does more than start or stop a service, creating multiple 'states' [1] that a service can be in.
31
38
  # In chef, when we ask a service to start, we expect it to have started before performing the next step
32
39
  # since we have top down dependencies. Which is to say we may follow witha resource next that requires
@@ -25,6 +25,11 @@ end
25
25
 
26
26
  class Chef::Provider::Service::Windows < Chef::Provider::Service
27
27
 
28
+ provides :service, os: "windows"
29
+ provides :windows_service, os: "windows"
30
+
31
+ include Chef::Mixin::ShellOut
32
+
28
33
  #Win32::Service.get_start_type
29
34
  AUTO_START = 'auto start'
30
35
  MANUAL = 'demand start'
@@ -27,6 +27,8 @@ class Chef
27
27
  class Provider
28
28
  class Subversion < Chef::Provider
29
29
 
30
+ provides :subversion
31
+
30
32
  SVN_INFO_PATTERN = /^([\w\s]+): (.+)$/
31
33
 
32
34
  include Chef::Mixin::Command
@@ -25,6 +25,7 @@ require 'chef/deprecation/warnings'
25
25
  class Chef
26
26
  class Provider
27
27
  class Template < Chef::Provider::File
28
+ provides :template
28
29
 
29
30
  extend Chef::Deprecation::Warnings
30
31
  include Chef::Deprecation::Provider::Template
@@ -20,6 +20,7 @@ require 'mixlib/shellout'
20
20
  require 'chef/provider/user'
21
21
  require 'openssl'
22
22
  require 'plist'
23
+ require 'chef/util/path_helper'
23
24
 
24
25
  class Chef
25
26
  class Provider
@@ -308,7 +309,7 @@ user password using shadow hash.")
308
309
 
309
310
  src = @current_resource.home
310
311
  FileUtils.mkdir_p(@new_resource.home)
311
- files = ::Dir.glob("#{src}/*", ::File::FNM_DOTMATCH) - ["#{src}/.","#{src}/.."]
312
+ files = ::Dir.glob("#{Chef::Util::PathHelper.escape_glob(src)}/*", ::File::FNM_DOTMATCH) - ["#{src}/.","#{src}/.."]
312
313
  ::FileUtils.mv(files,@new_resource.home, :force => true)
313
314
  ::FileUtils.rmdir(src)
314
315
  ::FileUtils.chown_R(@new_resource.username,@new_resource.gid.to_s,@new_resource.home)
@@ -555,7 +556,7 @@ user password using shadow hash.")
555
556
  user_info = nil
556
557
 
557
558
  # We flush the cache here in order to make sure that we read fresh information
558
- # for the user.
559
+ # for the user.
559
560
  shell_out("dscacheutil '-flushcache'")
560
561
 
561
562
  begin
@@ -19,6 +19,8 @@
19
19
  class Chef
20
20
  class Provider
21
21
  class WhyrunSafeRubyBlock < Chef::Provider::RubyBlock
22
+ provides :whyrun_safe_ruby_block
23
+
22
24
  def action_run
23
25
  @new_resource.block.call
24
26
  @new_resource.updated_by_last_action(true)
@@ -0,0 +1,103 @@
1
+ #
2
+ # Author:: Richard Manyanza (<liseki@nyikacraftsmen.com>)
3
+ # Copyright:: Copyright (c) 2014 Richard Manyanza.
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/exceptions'
20
+ require 'chef/platform/provider_priority_map'
21
+
22
+ class Chef
23
+ class ProviderResolver
24
+
25
+ attr_reader :node
26
+
27
+ def initialize(node)
28
+ @node = node
29
+ end
30
+
31
+ # return a deterministically sorted list of Chef::Provider subclasses
32
+ def providers
33
+ Chef::Provider.descendants.sort {|a,b| a.to_s <=> b.to_s }
34
+ end
35
+
36
+ def resolve(resource, action)
37
+ maybe_explicit_provider(resource) ||
38
+ maybe_dynamic_provider_resolution(resource, action) ||
39
+ maybe_chef_platform_lookup(resource)
40
+ end
41
+
42
+ private
43
+
44
+ # if resource.provider is set, just return one of those objects
45
+ def maybe_explicit_provider(resource)
46
+ return nil unless resource.provider
47
+ resource.provider
48
+ end
49
+
50
+ # try dynamically finding a provider based on querying the providers to see what they support
51
+ def maybe_dynamic_provider_resolution(resource, action)
52
+ # this cut only depends on the node value and is going to be static for all nodes
53
+ # will contain all providers that could possibly support a resource on a node
54
+ enabled_handlers = providers.select do |klass|
55
+ klass.provides?(node, resource)
56
+ end
57
+
58
+ # log this so we know what providers will work for the generic resource on the node (early cut)
59
+ Chef::Log.debug "providers for generic #{resource.resource_name} resource enabled on node include: #{enabled_handlers}"
60
+
61
+ # ask all the enabled providers if they can actually support the resource
62
+ supported_handlers = enabled_handlers.select do |klass|
63
+ klass.supports?(resource, action)
64
+ end
65
+
66
+ # what providers were excluded by machine state (late cut)
67
+ Chef::Log.debug "providers that refused resource #{resource} were: #{enabled_handlers - supported_handlers}"
68
+ Chef::Log.debug "providers that support resource #{resource} include: #{supported_handlers}"
69
+
70
+ handlers = supported_handlers.empty? ? enabled_handlers : supported_handlers
71
+
72
+ if handlers.count >= 2
73
+ priority_list = [ get_provider_priority_map(resource.resource_name, node) ].flatten.compact
74
+
75
+ handlers = handlers.sort_by { |x| i = priority_list.index x; i.nil? ? Float::INFINITY : i }
76
+
77
+ handlers = [ handlers.first ]
78
+ end
79
+
80
+ Chef::Log.debug "providers that survived replacement include: #{handlers}"
81
+
82
+ raise Chef::Exceptions::AmbiguousProviderResolution.new(resource, handlers) if handlers.count >= 2
83
+
84
+ return nil if handlers.empty?
85
+
86
+ handlers[0]
87
+ end
88
+
89
+ # try the old static lookup of providers by platform
90
+ def maybe_chef_platform_lookup(resource)
91
+ Chef::Platform.find_provider_for_node(node, resource)
92
+ end
93
+
94
+ # dep injection hooks
95
+ def get_provider_priority_map(resource_name, node)
96
+ provider_priority_map.get(node, resource_name)
97
+ end
98
+
99
+ def provider_priority_map
100
+ Chef::Platform::ProviderPriorityMap.instance.priority_map
101
+ end
102
+ end
103
+ end
@@ -24,6 +24,7 @@ require 'chef/provider/cron/solaris'
24
24
  require 'chef/provider/cron/aix'
25
25
  require 'chef/provider/deploy'
26
26
  require 'chef/provider/directory'
27
+ require 'chef/provider/dsc_script'
27
28
  require 'chef/provider/env'
28
29
  require 'chef/provider/erl_call'
29
30
  require 'chef/provider/execute'
@@ -59,6 +60,7 @@ require 'chef/provider/package/easy_install'
59
60
  require 'chef/provider/package/freebsd/port'
60
61
  require 'chef/provider/package/freebsd/pkg'
61
62
  require 'chef/provider/package/freebsd/pkgng'
63
+ require 'chef/provider/package/homebrew'
62
64
  require 'chef/provider/package/ips'
63
65
  require 'chef/provider/package/macports'
64
66
  require 'chef/provider/package/pacman'
@@ -73,19 +75,21 @@ require 'chef/provider/package/smartos'
73
75
  require 'chef/provider/package/aix'
74
76
 
75
77
  require 'chef/provider/service/arch'
76
- require 'chef/provider/service/debian'
77
78
  require 'chef/provider/service/freebsd'
78
79
  require 'chef/provider/service/gentoo'
79
80
  require 'chef/provider/service/init'
80
- require 'chef/provider/service/insserv'
81
81
  require 'chef/provider/service/invokercd'
82
+ require 'chef/provider/service/debian'
82
83
  require 'chef/provider/service/redhat'
84
+ require 'chef/provider/service/insserv'
83
85
  require 'chef/provider/service/simple'
84
86
  require 'chef/provider/service/systemd'
85
87
  require 'chef/provider/service/upstart'
86
88
  require 'chef/provider/service/windows'
87
89
  require 'chef/provider/service/solaris'
88
90
  require 'chef/provider/service/macosx'
91
+ require 'chef/provider/service/aixinit'
92
+ require 'chef/provider/service/aix'
89
93
 
90
94
  require 'chef/provider/user/dscl'
91
95
  require 'chef/provider/user/pw'
@@ -96,6 +96,8 @@ class Chef
96
96
  # true<TrueClass>:: If all the parameters are present
97
97
  # false<FalseClass>:: If any of the parameters are missing
98
98
  def tagged?(*tags)
99
+ return false if run_context.node[:tags].nil?
100
+
99
101
  tags.each do |tag|
100
102
  return false unless run_context.node[:tags].include?(tag)
101
103
  end
@@ -27,11 +27,12 @@ require 'chef/guard_interpreter/resource_guard_interpreter'
27
27
  require 'chef/resource/conditional'
28
28
  require 'chef/resource/conditional_action_not_nothing'
29
29
  require 'chef/resource_collection'
30
- require 'chef/resource_platform_map'
30
+ require 'chef/node_map'
31
31
  require 'chef/node'
32
32
  require 'chef/platform'
33
33
 
34
34
  require 'chef/mixin/deprecation'
35
+ require 'chef/mixin/descendants_tracker'
35
36
 
36
37
  class Chef
37
38
  class Resource
@@ -133,6 +134,7 @@ F
133
134
  include Chef::Mixin::Deprecation
134
135
 
135
136
  extend Chef::Mixin::ConvertToClassName
137
+ extend Chef::Mixin::DescendantsTracker
136
138
 
137
139
  if Module.method(:const_defined?).arity == 1
138
140
  def self.strict_const_defined?(const)
@@ -144,24 +146,13 @@ F
144
146
  end
145
147
  end
146
148
 
147
- # Track all subclasses of Resource. This is used so names can be looked up
148
- # when attempting to deserialize from JSON. (See: json_compat)
149
- def self.resource_classes
150
- # Using a class variable here ensures we have one variable to track
151
- # subclasses shared by the entire class hierarchy; without this, each
152
- # subclass would have its own list of subclasses.
153
- @@resource_classes ||= []
154
- end
155
-
156
- # Callback when subclass is defined. Adds subclass to list of subclasses.
157
- def self.inherited(subclass)
158
- resource_classes << subclass
159
- end
160
-
161
- # Look up a subclass by +class_name+ which should be a string that matches
162
- # `Subclass.name`
163
- def self.find_subclass_by_name(class_name)
164
- resource_classes.first {|c| c.name == class_name }
149
+ class << self
150
+ # back-compat
151
+ # NOTE: that we do not support unregistering classes as descendents like
152
+ # we used to for LWRP unloading because that was horrible and removed in
153
+ # Chef-12.
154
+ alias :resource_classes :descendants
155
+ alias :find_subclass_by_name :find_descendants_by_name
165
156
  end
166
157
 
167
158
  # Set or return the list of "state attributes" implemented by the Resource
@@ -229,6 +220,8 @@ F
229
220
 
230
221
  attr_reader :elapsed_time
231
222
 
223
+ attr_reader :default_guard_interpreter
224
+
232
225
  # Each notify entry is a resource/action pair, modeled as an
233
226
  # Struct with a #resource and #action member
234
227
 
@@ -250,7 +243,13 @@ F
250
243
  @not_if = []
251
244
  @only_if = []
252
245
  @source_line = nil
253
- @guard_interpreter = :default
246
+ # We would like to raise an error when the user gives us a guard
247
+ # interpreter and a ruby_block to the guard. In order to achieve this
248
+ # we need to understand when the user overrides the default guard
249
+ # interpreter. Therefore we store the default separately in a different
250
+ # attribute.
251
+ @guard_interpreter = nil
252
+ @default_guard_interpreter = :default
254
253
  @elapsed_time = 0
255
254
  @sensitive = false
256
255
  end
@@ -297,12 +296,13 @@ F
297
296
  end
298
297
  end
299
298
 
300
- def load_prior_resource
299
+ def load_prior_resource(resource_type, instance_name)
301
300
  begin
302
- prior_resource = run_context.resource_collection.lookup(self.to_s)
301
+ key = ::Chef::ResourceCollection::ResourceSet.create_key(resource_type, instance_name)
302
+ prior_resource = run_context.resource_collection.lookup(key)
303
303
  # if we get here, there is a prior resource (otherwise we'd have jumped
304
304
  # to the rescue clause).
305
- Chef::Log.warn("Cloning resource attributes for #{self.to_s} from prior resource (CHEF-3694)")
305
+ Chef::Log.warn("Cloning resource attributes for #{key} from prior resource (CHEF-3694)")
306
306
  Chef::Log.warn("Previous #{prior_resource}: #{prior_resource.source_line}") if prior_resource.source_line
307
307
  Chef::Log.warn("Current #{self}: #{self.source_line}") if self.source_line
308
308
  prior_resource.instance_variables.each do |iv|
@@ -410,11 +410,15 @@ F
410
410
  end
411
411
 
412
412
  def guard_interpreter(arg=nil)
413
- set_or_return(
414
- :guard_interpreter,
415
- arg,
416
- :kind_of => Symbol
417
- )
413
+ if arg.nil?
414
+ @guard_interpreter || @default_guard_interpreter
415
+ else
416
+ set_or_return(
417
+ :guard_interpreter,
418
+ arg,
419
+ :kind_of => Symbol
420
+ )
421
+ end
418
422
  end
419
423
 
420
424
  # Sets up a notification from this resource to the resource specified by +resource_spec+.
@@ -639,6 +643,11 @@ F
639
643
  # on accident
640
644
  updated_by_last_action(false)
641
645
 
646
+ # Don't modify @retries directly and keep it intact, so that the
647
+ # recipe_snippet from ResourceFailureInspector can print the value
648
+ # that was set in the resource block initially.
649
+ remaining_retries = retries
650
+
642
651
  begin
643
652
  return if should_skip?(action)
644
653
  provider_for_action(action).run_action
@@ -646,10 +655,10 @@ F
646
655
  if ignore_failure
647
656
  Chef::Log.error("#{custom_exception_message(e)}; ignore_failure is set, continuing")
648
657
  events.resource_failed(self, action, e)
649
- elsif retries > 0
650
- events.resource_failed_retriable(self, action, retries, e)
651
- @retries -= 1
652
- Chef::Log.info("Retrying execution of #{self}, #{retries} attempt(s) left")
658
+ elsif remaining_retries > 0
659
+ events.resource_failed_retriable(self, action, remaining_retries, e)
660
+ remaining_retries -= 1
661
+ Chef::Log.info("Retrying execution of #{self}, #{remaining_retries} attempt(s) left")
653
662
  sleep retry_delay
654
663
  retry
655
664
  else
@@ -670,16 +679,9 @@ F
670
679
  end
671
680
 
672
681
  def provider_for_action(action)
673
- # leverage new platform => short_name => resource
674
- # which requires explicitly setting provider in
675
- # resource class
676
- if self.provider
677
- provider = self.provider.new(self, self.run_context)
678
- provider.action = action
679
- provider
680
- else # fall back to old provider resolution
681
- Chef::Platform.provider_for_resource(self, action)
682
- end
682
+ provider = run_context.provider_resolver.resolve(self, action).new(self, run_context)
683
+ provider.action = action
684
+ provider
683
685
  end
684
686
 
685
687
  def custom_exception_message(e)
@@ -754,8 +756,8 @@ F
754
756
  @provider_base ||= Chef::Provider
755
757
  end
756
758
 
757
- def self.platform_map
758
- @@platform_map ||= PlatformMap.new
759
+ def self.node_map
760
+ @@node_map ||= NodeMap.new
759
761
  end
760
762
 
761
763
  # Maps a short_name (and optionally a platform and version) to a
@@ -764,66 +766,55 @@ F
764
766
  # (I'm looking at you Chef::Resource::Package)
765
767
  # Ex:
766
768
  # class WindowsFile < Chef::Resource
767
- # provides :file, :on_platforms => ["windows"]
769
+ # provides :file, os: "linux", platform_family: "rhel", platform: "redhat"
770
+ # provides :file, os: "!windows
771
+ # provides :file, os: [ "linux", "aix" ]
772
+ # provides :file, os: "solaris2" do |node|
773
+ # node['platform_version'].to_f <= 5.11
774
+ # end
768
775
  # # ...other stuff
769
776
  # end
770
777
  #
771
- # TODO: 2011-11-02 schisamo - platform_version support
772
- def self.provides(short_name, opts={})
778
+ def self.provides(short_name, opts={}, &block)
773
779
  short_name_sym = short_name
774
780
  if short_name.kind_of?(String)
781
+ # YAGNI: this is probably completely unnecessary and can be removed?
782
+ Chef::Log.warn "[DEPRECATION] Passing a String to Chef::Resource#provides will be removed"
775
783
  short_name.downcase!
776
784
  short_name.gsub!(/\s/, "_")
777
785
  short_name_sym = short_name.to_sym
778
786
  end
779
- if opts.has_key?(:on_platforms)
780
- platforms = [opts[:on_platforms]].flatten
781
- platforms.each do |p|
782
- p = :default if :all == p.to_sym
783
- platform_map.set(
784
- :platform => p.to_sym,
785
- :short_name => short_name_sym,
786
- :resource => self
787
- )
788
- end
789
- else
790
- platform_map.set(
791
- :short_name => short_name_sym,
792
- :resource => self
793
- )
794
- end
787
+ node_map.set(short_name_sym, constantize(self.name), opts, &block)
795
788
  end
796
789
 
797
- # Returns a resource based on a short_name anda platform and version.
798
- #
790
+ # Returns a resource based on a short_name and node
799
791
  #
800
792
  # ==== Parameters
801
793
  # short_name<Symbol>:: short_name of the resource (ie :directory)
802
- # platform<Symbol,String>:: platform name
803
- # version<String>:: platform version
794
+ # node<Chef::Node>:: Node object to look up platform and version in
804
795
  #
805
796
  # === Returns
806
797
  # <Chef::Resource>:: returns the proper Chef::Resource class
807
- def self.resource_for_platform(short_name, platform=nil, version=nil)
808
- platform_map.get(short_name, platform, version)
798
+ def self.resource_for_node(short_name, node)
799
+ klass = node_map.get(node, short_name) ||
800
+ resource_matching_short_name(short_name)
801
+ raise Chef::Exceptions::NoSuchResourceType.new(short_name, node) if klass.nil?
802
+ klass
809
803
  end
810
804
 
811
- # Returns a resource based on a short_name and a node's
812
- # platform and version.
813
- #
805
+ # Returns the class of a Chef::Resource based on the short name
814
806
  # ==== Parameters
815
807
  # short_name<Symbol>:: short_name of the resource (ie :directory)
816
- # node<Chef::Node>:: Node object to look up platform and version in
817
808
  #
818
809
  # === Returns
819
810
  # <Chef::Resource>:: returns the proper Chef::Resource class
820
- def self.resource_for_node(short_name, node)
811
+ def self.resource_matching_short_name(short_name)
821
812
  begin
822
- platform, version = Chef::Platform.find_platform_and_version(node)
823
- rescue ArgumentError
813
+ rname = convert_to_class_name(short_name.to_s)
814
+ Chef::Resource.const_get(rname)
815
+ rescue NameError
816
+ nil
824
817
  end
825
- resource = resource_for_platform(short_name, platform, version)
826
- resource
827
818
  end
828
819
 
829
820
  private