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
@@ -25,11 +25,13 @@ require 'mixlib/config'
25
25
  require 'chef/util/selinux'
26
26
  require 'chef/util/path_helper'
27
27
  require 'pathname'
28
+ require 'chef/mixin/shell_out'
28
29
 
29
30
  class Chef
30
31
  class Config
31
32
 
32
33
  extend Mixlib::Config
34
+ extend Chef::Mixin::ShellOut
33
35
 
34
36
  PathHelper = Chef::Util::PathHelper
35
37
 
@@ -76,6 +78,10 @@ class Chef
76
78
  formatters << [name, file_path]
77
79
  end
78
80
 
81
+ def self.add_event_logger(logger)
82
+ event_handlers << logger
83
+ end
84
+
79
85
  # Config file to load (client.rb, knife.rb, etc. defaults set differently in knife, chef-client, etc.)
80
86
  configurable(:config_file)
81
87
 
@@ -331,10 +337,11 @@ class Chef
331
337
  default :ssl_client_cert, nil
332
338
  default :ssl_client_key, nil
333
339
 
334
- # Whether or not to verify the SSL cert for all HTTPS requests. If set to
335
- # :verify_peer, all HTTPS requests will be validated regardless of other
336
- # SSL verification settings.
337
- default :ssl_verify_mode, :verify_none
340
+ # Whether or not to verify the SSL cert for all HTTPS requests. When set to
341
+ # :verify_peer (default), all HTTPS requests will be validated regardless of other
342
+ # SSL verification settings. When set to :verify_none no HTTPS requests will
343
+ # be validated.
344
+ default :ssl_verify_mode, :verify_peer
338
345
 
339
346
  # Whether or not to verify the SSL cert for HTTPS requests to the Chef
340
347
  # server API. If set to `true`, the server's cert will be validated
@@ -448,6 +455,15 @@ class Chef
448
455
  # Event Handlers
449
456
  default :event_handlers, []
450
457
 
458
+ default :disable_event_loggers, false
459
+ default :event_loggers do
460
+ evt_loggers = []
461
+ if Chef::Platform::windows? and not Chef::Platform::windows_server_2003?
462
+ evt_loggers << :win_evt
463
+ end
464
+ evt_loggers
465
+ end
466
+
451
467
  # Exception Handlers
452
468
  default :exception_handlers, []
453
469
 
@@ -603,22 +619,38 @@ class Chef
603
619
  # available English UTF-8 locale. However, all modern POSIXen should support 'locale -a'.
604
620
  default :internal_locale do
605
621
  begin
606
- locales = `locale -a`.split
622
+ # https://github.com/opscode/chef/issues/2181
623
+ # Some systems have the `locale -a` command, but the result has
624
+ # invalid characters for the default encoding.
625
+ #
626
+ # For example, on CentOS 6 with ENV['LANG'] = "en_US.UTF-8",
627
+ # `locale -a`.split fails with ArgumentError invalid UTF-8 encoding.
628
+ locales = shell_out_with_systems_locale("locale -a").stdout.split
607
629
  case
608
630
  when locales.include?('C.UTF-8')
609
631
  'C.UTF-8'
610
- when locales.include?('en_US.UTF-8')
632
+ when locales.include?('en_US.UTF-8'), locales.include?('en_US.utf8')
611
633
  'en_US.UTF-8'
612
634
  when locales.include?('en.UTF-8')
613
635
  'en.UTF-8'
614
- when guesses = locales.select { |l| l =~ /^en_.*UTF-8$'/ }
615
- guesses.first
616
636
  else
617
- Chef::Log.warn "Please install an English UTF-8 locale for Chef to use, falling back to C locale and disabling UTF-8 support."
618
- 'C'
637
+ # Will match en_ZZ.UTF-8, en_ZZ.utf-8, en_ZZ.UTF8, en_ZZ.utf8
638
+ guesses = locales.select { |l| l =~ /^en_.*UTF-?8$/i }
639
+ unless guesses.empty?
640
+ guessed_locale = guesses.first
641
+ # Transform into the form en_ZZ.UTF-8
642
+ guessed_locale.gsub(/UTF-?8$/i, "UTF-8")
643
+ else
644
+ Chef::Log.warn "Please install an English UTF-8 locale for Chef to use, falling back to C locale and disabling UTF-8 support."
645
+ 'C'
646
+ end
619
647
  end
620
648
  rescue
621
- Chef::Log.warn "No usable locale -a command found, assuming you have en_US.UTF-8 installed."
649
+ if Chef::Platform.windows?
650
+ Chef::Log.debug "Defaulting to locale en_US.UTF-8 on Windows, until it matters that we do something else."
651
+ else
652
+ Chef::Log.debug "No usable locale -a command found, assuming you have en_US.UTF-8 installed."
653
+ end
622
654
  'en_US.UTF-8'
623
655
  end
624
656
  end
@@ -2,6 +2,7 @@
2
2
  require 'chef/cookbook_version'
3
3
  require 'chef/cookbook/chefignore'
4
4
  require 'chef/cookbook/metadata'
5
+ require 'chef/util/path_helper'
5
6
 
6
7
  class Chef
7
8
  class Cookbook
@@ -80,7 +81,7 @@ class Chef
80
81
  load_as(:attribute_filenames, 'attributes', '*.rb')
81
82
  load_as(:definition_filenames, 'definitions', '*.rb')
82
83
  load_as(:recipe_filenames, 'recipes', '*.rb')
83
- load_as(:library_filenames, 'libraries', '*.rb')
84
+ load_recursively_as(:library_filenames, 'libraries', '*.rb')
84
85
  load_recursively_as(:template_filenames, "templates", "*")
85
86
  load_recursively_as(:file_filenames, "files", "*")
86
87
  load_recursively_as(:resource_filenames, "resources", "*.rb")
@@ -212,24 +213,30 @@ class Chef
212
213
  end
213
214
 
214
215
  def load_root_files
215
- Dir.glob(File.join(cookbook_path, '*'), File::FNM_DOTMATCH).each do |file|
216
+ Dir.glob(File.join(Chef::Util::PathHelper.escape_glob(cookbook_path), '*'), File::FNM_DOTMATCH).each do |file|
217
+ file = Chef::Util::PathHelper.cleanpath(file)
216
218
  next if File.directory?(file)
217
219
  next if File.basename(file) == UPLOADED_COOKBOOK_VERSION_FILE
218
- cookbook_settings[:root_filenames][file[@relative_path, 1]] = file
220
+ name = Chef::Util::PathHelper.relative_path_from(@cookbook_path, file)
221
+ cookbook_settings[:root_filenames][name] = file
219
222
  end
220
223
  end
221
224
 
222
225
  def load_recursively_as(category, category_dir, glob)
223
- file_spec = File.join(cookbook_path, category_dir, '**', glob)
226
+ file_spec = File.join(Chef::Util::PathHelper.escape_glob(cookbook_path, category_dir), '**', glob)
224
227
  Dir.glob(file_spec, File::FNM_DOTMATCH).each do |file|
228
+ file = Chef::Util::PathHelper.cleanpath(file)
225
229
  next if File.directory?(file)
226
- cookbook_settings[category][file[@relative_path, 1]] = file
230
+ name = Chef::Util::PathHelper.relative_path_from(@cookbook_path, file)
231
+ cookbook_settings[category][name] = file
227
232
  end
228
233
  end
229
234
 
230
235
  def load_as(category, *path_glob)
231
- Dir[File.join(cookbook_path, *path_glob)].each do |file|
232
- cookbook_settings[category][file[@relative_path, 1]] = file
236
+ Dir[File.join(Chef::Util::PathHelper.escape_glob(cookbook_path), *path_glob)].each do |file|
237
+ file = Chef::Util::PathHelper.cleanpath(file)
238
+ name = Chef::Util::PathHelper.relative_path_from(@cookbook_path, file)
239
+ cookbook_settings[category][name] = file
233
240
  end
234
241
  end
235
242
 
@@ -35,28 +35,31 @@ class Chef
35
35
  # about Chef Cookbooks.
36
36
  class Metadata
37
37
 
38
- NAME = 'name'.freeze
39
- DESCRIPTION = 'description'.freeze
40
- LONG_DESCRIPTION = 'long_description'.freeze
41
- MAINTAINER = 'maintainer'.freeze
42
- MAINTAINER_EMAIL = 'maintainer_email'.freeze
43
- LICENSE = 'license'.freeze
44
- PLATFORMS = 'platforms'.freeze
45
- DEPENDENCIES = 'dependencies'.freeze
46
- RECOMMENDATIONS = 'recommendations'.freeze
47
- SUGGESTIONS = 'suggestions'.freeze
48
- CONFLICTING = 'conflicting'.freeze
49
- PROVIDING = 'providing'.freeze
50
- REPLACING = 'replacing'.freeze
51
- ATTRIBUTES = 'attributes'.freeze
52
- GROUPINGS = 'groupings'.freeze
53
- RECIPES = 'recipes'.freeze
54
- VERSION = 'version'.freeze
38
+ NAME = 'name'.freeze
39
+ DESCRIPTION = 'description'.freeze
40
+ LONG_DESCRIPTION = 'long_description'.freeze
41
+ MAINTAINER = 'maintainer'.freeze
42
+ MAINTAINER_EMAIL = 'maintainer_email'.freeze
43
+ LICENSE = 'license'.freeze
44
+ PLATFORMS = 'platforms'.freeze
45
+ DEPENDENCIES = 'dependencies'.freeze
46
+ RECOMMENDATIONS = 'recommendations'.freeze
47
+ SUGGESTIONS = 'suggestions'.freeze
48
+ CONFLICTING = 'conflicting'.freeze
49
+ PROVIDING = 'providing'.freeze
50
+ REPLACING = 'replacing'.freeze
51
+ ATTRIBUTES = 'attributes'.freeze
52
+ GROUPINGS = 'groupings'.freeze
53
+ RECIPES = 'recipes'.freeze
54
+ VERSION = 'version'.freeze
55
+ SOURCE_URL = 'source_url'.freeze
56
+ ISSUES_URL = 'issues_url'.freeze
55
57
 
56
58
  COMPARISON_FIELDS = [ :name, :description, :long_description, :maintainer,
57
59
  :maintainer_email, :license, :platforms, :dependencies,
58
60
  :recommendations, :suggestions, :conflicting, :providing,
59
- :replacing, :attributes, :groupings, :recipes, :version]
61
+ :replacing, :attributes, :groupings, :recipes, :version,
62
+ :source_url, :issues_url ]
60
63
 
61
64
  VERSION_CONSTRAINTS = {:depends => DEPENDENCIES,
62
65
  :recommends => RECOMMENDATIONS,
@@ -111,6 +114,8 @@ class Chef
111
114
  @groupings = Mash.new
112
115
  @recipes = Mash.new
113
116
  @version = Version.new("0.0.0")
117
+ @source_url = ''
118
+ @issues_url = ''
114
119
 
115
120
  @errors = []
116
121
  end
@@ -413,7 +418,7 @@ class Chef
413
418
  end
414
419
  end
415
420
 
416
- # Adds an attribute )hat a user needs to configure for this cookbook. Takes
421
+ # Adds an attribute that a user needs to configure for this cookbook. Takes
417
422
  # a name (with the / notation for a nested attribute), followed by any of
418
423
  # these options
419
424
  #
@@ -443,7 +448,9 @@ class Chef
443
448
  :type => { :equal_to => [ "string", "array", "hash", "symbol", "boolean", "numeric" ], :default => "string" },
444
449
  :required => { :equal_to => [ "required", "recommended", "optional", true, false ], :default => "optional" },
445
450
  :recipes => { :kind_of => [ Array ], :default => [] },
446
- :default => { :kind_of => [ String, Array, Hash, Symbol, Numeric, TrueClass, FalseClass ] }
451
+ :default => { :kind_of => [ String, Array, Hash, Symbol, Numeric, TrueClass, FalseClass ] },
452
+ :source_url => { :kind_of => String },
453
+ :issues_url => { :kind_of => String }
447
454
  }
448
455
  )
449
456
  options[:required] = remap_required_attribute(options[:required]) unless options[:required].nil?
@@ -469,23 +476,25 @@ class Chef
469
476
 
470
477
  def to_hash
471
478
  {
472
- NAME => self.name,
473
- DESCRIPTION => self.description,
474
- LONG_DESCRIPTION => self.long_description,
475
- MAINTAINER => self.maintainer,
476
- MAINTAINER_EMAIL => self.maintainer_email,
477
- LICENSE => self.license,
478
- PLATFORMS => self.platforms,
479
- DEPENDENCIES => self.dependencies,
480
- RECOMMENDATIONS => self.recommendations,
481
- SUGGESTIONS => self.suggestions,
482
- CONFLICTING => self.conflicting,
483
- PROVIDING => self.providing,
484
- REPLACING => self.replacing,
485
- ATTRIBUTES => self.attributes,
486
- GROUPINGS => self.groupings,
487
- RECIPES => self.recipes,
488
- VERSION => self.version
479
+ NAME => self.name,
480
+ DESCRIPTION => self.description,
481
+ LONG_DESCRIPTION => self.long_description,
482
+ MAINTAINER => self.maintainer,
483
+ MAINTAINER_EMAIL => self.maintainer_email,
484
+ LICENSE => self.license,
485
+ PLATFORMS => self.platforms,
486
+ DEPENDENCIES => self.dependencies,
487
+ RECOMMENDATIONS => self.recommendations,
488
+ SUGGESTIONS => self.suggestions,
489
+ CONFLICTING => self.conflicting,
490
+ PROVIDING => self.providing,
491
+ REPLACING => self.replacing,
492
+ ATTRIBUTES => self.attributes,
493
+ GROUPINGS => self.groupings,
494
+ RECIPES => self.recipes,
495
+ VERSION => self.version,
496
+ SOURCE_URL => self.source_url,
497
+ ISSUES_URL => self.issues_url
489
498
  }
490
499
  end
491
500
 
@@ -517,6 +526,8 @@ class Chef
517
526
  @groupings = o[GROUPINGS] if o.has_key?(GROUPINGS)
518
527
  @recipes = o[RECIPES] if o.has_key?(RECIPES)
519
528
  @version = o[VERSION] if o.has_key?(VERSION)
529
+ @source_url = o[SOURCE_URL] if o.has_key?(SOURCE_URL)
530
+ @issues_url = o[ISSUES_URL] if o.has_key?(ISSUES_URL)
520
531
  self
521
532
  end
522
533
 
@@ -531,7 +542,9 @@ class Chef
531
542
  VERSION_CONSTRAINTS.each do |dependency_type, hash_key|
532
543
  if dependency_group = o[hash_key]
533
544
  dependency_group.each do |cb_name, constraints|
534
- metadata.send(method_name, cb_name, *Array(constraints))
545
+ if metadata.respond_to?(method_name)
546
+ metadata.public_send(method_name, cb_name, *Array(constraints))
547
+ end
535
548
  end
536
549
  end
537
550
  end
@@ -543,6 +556,36 @@ class Chef
543
556
  from_hash(o)
544
557
  end
545
558
 
559
+ # Sets the cookbook's source URL, or returns it.
560
+ #
561
+ # === Parameters
562
+ # maintainer<String>:: The source URL
563
+ #
564
+ # === Returns
565
+ # source_url<String>:: Returns the current source URL.
566
+ def source_url(arg=nil)
567
+ set_or_return(
568
+ :source_url,
569
+ arg,
570
+ :kind_of => [ String ]
571
+ )
572
+ end
573
+
574
+ # Sets the cookbook's issues URL, or returns it.
575
+ #
576
+ # === Parameters
577
+ # issues_url<String>:: The issues URL
578
+ #
579
+ # === Returns
580
+ # issues_url<String>:: Returns the current issues URL.
581
+ def issues_url(arg=nil)
582
+ set_or_return(
583
+ :issues_url,
584
+ arg,
585
+ :kind_of => [ String ]
586
+ )
587
+ end
588
+
546
589
  private
547
590
 
548
591
  def run_validation
@@ -21,6 +21,7 @@ require 'stringio'
21
21
  require 'erubis'
22
22
  require 'chef/mixin/shell_out'
23
23
  require 'chef/mixin/checksum'
24
+ require 'chef/util/path_helper'
24
25
 
25
26
  class Chef
26
27
  class Cookbook
@@ -100,17 +101,24 @@ class Chef
100
101
  end
101
102
 
102
103
  def remove_ignored_files(file_list)
103
- return file_list unless chefignore.ignores.length > 0
104
+ return file_list if chefignore.ignores.empty?
105
+
104
106
  file_list.reject do |full_path|
105
- cookbook_pn = Pathname.new cookbook_path
106
- full_pn = Pathname.new full_path
107
- relative_pn = full_pn.relative_path_from cookbook_pn
108
- chefignore.ignored? relative_pn.to_s
107
+ relative_pn = Chef::Util::PathHelper.relative_path_from(cookbook_path, full_path)
108
+ chefignore.ignored?(relative_pn.to_s)
109
109
  end
110
110
  end
111
111
 
112
+ def remove_uninteresting_ruby_files(file_list)
113
+ file_list.reject { |f| f =~ %r{#{cookbook_path}/(files|templates)/} }
114
+ end
115
+
112
116
  def ruby_files
113
- remove_ignored_files Dir[File.join(cookbook_path, '**', '*.rb')]
117
+ path = Chef::Util::PathHelper.escape_glob(cookbook_path)
118
+ files = Dir[File.join(path, '**', '*.rb')]
119
+ files = remove_ignored_files(files)
120
+ files = remove_uninteresting_ruby_files(files)
121
+ files
114
122
  end
115
123
 
116
124
  def untested_ruby_files
@@ -125,7 +133,7 @@ class Chef
125
133
  end
126
134
 
127
135
  def template_files
128
- remove_ignored_files Dir[File.join(cookbook_path, '**/templates/**', '*.erb')]
136
+ remove_ignored_files Dir[File.join(Chef::Util::PathHelper.escape_glob(cookbook_path), '**/templates/**', '*.erb')]
129
137
  end
130
138
 
131
139
  def untested_template_files
@@ -163,31 +171,16 @@ class Chef
163
171
 
164
172
  def validate_template(erb_file)
165
173
  Chef::Log.debug("Testing template #{erb_file} for syntax errors...")
166
- if validate_inline?
167
- validate_erb_file_inline(erb_file)
168
- else
169
- validate_erb_via_subcommand(erb_file)
170
- end
174
+ validate_erb_file_inline(erb_file)
171
175
  end
172
176
 
173
177
  def validate_ruby_file(ruby_file)
174
178
  Chef::Log.debug("Testing #{ruby_file} for syntax errors...")
175
- if validate_inline?
176
- validate_ruby_file_inline(ruby_file)
177
- else
178
- validate_ruby_by_subcommand(ruby_file)
179
- end
180
- end
181
-
182
- # Whether or not we're running on a version of ruby that can support
183
- # inline validation. Inline validation relies on the `RubyVM` features
184
- # introduced with ruby 1.9, so 1.8 cannot be supported.
185
- def validate_inline?
186
- defined?(RubyVM::InstructionSequence)
179
+ validate_ruby_file_inline(ruby_file)
187
180
  end
188
181
 
189
182
  # Validate the ruby code in an erb template. Uses RubyVM to do syntax
190
- # checking, so callers should check #validate_inline? before calling.
183
+ # checking.
191
184
  def validate_erb_file_inline(erb_file)
192
185
  old_stderr = $stderr
193
186
 
@@ -214,20 +207,6 @@ class Chef
214
207
  $stderr = old_stderr if defined?(old_stderr) && old_stderr
215
208
  end
216
209
 
217
- # Validate the ruby code in an erb template. Pipes the output of `erubis
218
- # -x` to `ruby -c`, so it works with any ruby version, but is much slower
219
- # than the inline version.
220
- # --
221
- # TODO: This can be removed when ruby 1.8 support is dropped.
222
- def validate_erb_via_subcommand(erb_file)
223
- result = shell_out("erubis -x #{erb_file} | #{ruby} -c")
224
- result.error!
225
- true
226
- rescue Mixlib::ShellOut::ShellCommandFailed
227
- invalid_erb_file(erb_file, result.stderr)
228
- false
229
- end
230
-
231
210
  # Debug a syntax error in a template.
232
211
  def invalid_erb_file(erb_file, error_message)
233
212
  file_relative_path = erb_file[/^#{Regexp.escape(cookbook_path+File::Separator)}(.*)/, 1]
@@ -238,7 +217,6 @@ class Chef
238
217
 
239
218
  # Validate the syntax of a ruby file. Uses (Ruby 1.9+ only) RubyVM to
240
219
  # compile the code without evaluating it or spawning a new process.
241
- # Callers should check #validate_inline? before calling.
242
220
  def validate_ruby_file_inline(ruby_file)
243
221
  # Even when we're compiling the code w/ RubyVM, syntax errors just
244
222
  # print to $stderr. We want to capture this and handle the printing
@@ -263,18 +241,6 @@ class Chef
263
241
  $stderr = old_stderr if defined?(old_stderr) && old_stderr
264
242
  end
265
243
 
266
- # Validate the syntax of a ruby file by shelling out to `ruby -c`. Should
267
- # work for all ruby versions, but is slower and uses more resources than
268
- # the inline strategy.
269
- def validate_ruby_by_subcommand(ruby_file)
270
- result = shell_out("#{ruby} -c #{ruby_file}")
271
- result.error!
272
- true
273
- rescue Mixlib::ShellOut::ShellCommandFailed
274
- invalid_ruby_file(ruby_file, result.stderr)
275
- false
276
- end
277
-
278
244
  # Debugs ruby syntax errors by printing the path to the file and any
279
245
  # diagnostic info given in +error_message+
280
246
  def invalid_ruby_file(ruby_file, error_message)